import 'package:first_project/data/repositories/anime_repository.dart'; import 'package:first_project/data/repositories/mock_repository.dart'; import 'package:first_project/domain/models/card.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.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 { @override void initState() { WidgetsBinding.instance.addPostFrameCallback((_) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text( 'Hello', style: Theme.of(context).textTheme.bodyMedium, ), backgroundColor: Colors.purple, duration: const Duration(seconds: 1), )); }); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.purple, title: Text(widget.title), ), body: const Body(), ); } } class Body extends StatelessWidget { const Body({super.key}); @override Widget build(BuildContext context) { final data = AnimeRepository().loadData(); return Center( child: FutureBuilder?>( future: data, builder: (context, snapshot) => SingleChildScrollView( child: snapshot.hasData ? Column( mainAxisAlignment: MainAxisAlignment.center, children: snapshot.data!.map( (e) { return _Card.fromData( e, onLike: (String title, bool isLiked) => _showLiked(context, title, isLiked), onTap: () => _navToDetails(context, e), ); }, ).toList(), ) : const CircularProgressIndicator(), ), )); } void _navToDetails(BuildContext context, CardData data) { Navigator.push( context, CupertinoPageRoute(builder: (context) => DetailsPage(data)), ); } void _showLiked(BuildContext context, String title, bool isLiked) { WidgetsBinding.instance.addPostFrameCallback((_) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text( 'Аниме $title ${isLiked ? 'лайкнуто!' : 'дизлайнуто'}', style: Theme.of(context).textTheme.bodyMedium, ), backgroundColor: Colors.purple, duration: const Duration(seconds: 1), )); }); } }