import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import '../../domain/models/card.dart'; import '../details_page/details_page.dart'; part 'card.dart'; class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { final Color _color = Colors.purple; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: _color, title: Text(widget.title), ), body: const Body(), ); } } class Body extends StatelessWidget { const Body({super.key}); @override Widget build(BuildContext context) { final data = [ CardData('Arc Warden', discriptionText: 'Ловкость', icon: Icons.account_circle, imageUrl: 'https://yt3.googleusercontent.com/VnqOJt9iHkwXonTzNfenydf4hTD2ilYcmiZv-RP8-3eifX16A64eZyV4z43LBL4EhPWAhTN2lJE=s900-c-k-c0x00ffffff-no-rj', ), CardData('Void Spirit', discriptionText: 'Универсальный', icon: Icons.account_circle, imageUrl: 'https://cdna.artstation.com/p/assets/covers/images/024/245/520/large/maxime-lebled-voidspirit.jpg?1581789586', ), CardData('Invoker', discriptionText: 'Универсальный', icon: Icons.account_circle, imageUrl: 'https://steamuserimages-a.akamaihd.net/ugc/1010400569445271177/6D5FF0CF2C48F8351C9AAC98363DEC31386678AB/?imw=5000&imh=5000&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=false', ), ]; return Center( child: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: data.map((data) { return _Card.fromData( data, onLike: (String title, bool isLiked) => _showSnackBar(context, title, isLiked), onTap: () => _navToDetails(context, data), ); }).toList(), ), )); } void _navToDetails(BuildContext context, CardData data){ Navigator.push( context, CupertinoPageRoute(builder: (context) => DetailsPage(data)), ); } void _showSnackBar(BuildContext context, String title, bool isLiked) { WidgetsBinding.instance.addPostFrameCallback((_) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text( 'Вы ${isLiked ? 'добавили в избранное' : 'убрали из избраных'} $title', style: Theme.of(context).textTheme.bodyLarge, ), backgroundColor: Color(0xFF7BA05B), duration: const Duration(seconds: 1), )); }); } }