скрол детальной карочки

This commit is contained in:
MaD 2024-12-17 20:44:47 +04:00
parent aececde5c2
commit 6e89dcde51

View File

@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import '../../presentation/home_page/bloc/hero_detail_bloc.dart'; import '../../presentation/home_page/bloc/hero_detail_bloc.dart';
import '../../data/dtos/hero_dto.dart';
import '../../data/repositories/hero_repository.dart'; import '../../data/repositories/hero_repository.dart';
class HeroDetailScreen extends StatelessWidget { class HeroDetailScreen extends StatelessWidget {
@ -16,40 +15,58 @@ class HeroDetailScreen extends StatelessWidget {
return BlocProvider( return BlocProvider(
create: (_) => HeroDetailBloc(heroRepository)..add(FetchHeroDetails(heroId)), create: (_) => HeroDetailBloc(heroRepository)..add(FetchHeroDetails(heroId)),
child: Scaffold( child: Scaffold(
appBar: AppBar(title: Text('Hero Details')), appBar: AppBar(title: const Text('Hero Details')),
body: BlocBuilder<HeroDetailBloc, HeroDetailState>( body: BlocBuilder<HeroDetailBloc, HeroDetailState>(
builder: (context, state) { builder: (context, state) {
if (state is HeroDetailLoading) { if (state is HeroDetailLoading) {
return Center(child: CircularProgressIndicator()); // Показ индикатора загрузки
return const Center(child: CircularProgressIndicator());
} else if (state is HeroDetailLoaded) { } else if (state is HeroDetailLoaded) {
final hero = state.hero; final hero = state.hero;
return Padding( return SingleChildScrollView( // Добавляем прокрутку
padding: const EdgeInsets.all(16.0), child: Padding(
child: Column( padding: const EdgeInsets.all(16.0),
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Center( children: [
child: hero.portraitUrl != null // Центрируем изображение героя
? Image.network(hero.portraitUrl!, height: 150) Center(
: Icon(Icons.image, size: 150), child: hero.portraitUrl != null
), ? Image.network(hero.portraitUrl!, height: 150)
SizedBox(height: 16), : const Icon(Icons.image, size: 150),
Text( ),
hero.name, const SizedBox(height: 16),
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
), // Имя героя
SizedBox(height: 16), Text(
Text( hero.name,
hero.description ?? 'No description available', style: const TextStyle(
style: TextStyle(fontSize: 16), fontSize: 24,
), fontWeight: FontWeight.bold,
], ),
),
const SizedBox(height: 16),
// Описание героя
Text(
hero.description ?? 'No description available',
style: const TextStyle(fontSize: 16),
),
],
),
), ),
); );
} else if (state is HeroDetailError) { } else if (state is HeroDetailError) {
return Center(child: Text('Error: ${state.message}')); // Показ сообщения об ошибке
return Center(
child: Text(
'Error: ${state.message}',
style: const TextStyle(fontSize: 16, color: Colors.red),
),
);
} }
return SizedBox.shrink(); // Пустое состояние по умолчанию
return const SizedBox.shrink();
}, },
), ),
), ),