import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', debugShowCheckedModeBanner: false, theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Lab 3: Cards'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Padding( padding: const EdgeInsets.all(30), child: ListView.separated( itemBuilder: (context, index) => Card(name: "test $index", price: 11.0), separatorBuilder: (context, index) => const SizedBox(height: 20), itemCount: 2, ))); } } class Card extends StatefulWidget { const Card({super.key, required this.name, required this.price}); final String name; final double price; @override State createState() => _CardState(); } class _CardState extends State { bool _isFavourite = true; void toggleIsFavourite() { setState(() { _isFavourite = !_isFavourite; }); } @override Widget build(BuildContext context) { return Stack( children: [ Container( padding: const EdgeInsets.only(top: 50, bottom: 15, left: 40, right: 40), decoration: BoxDecoration( border: Border.all(color: Colors.black12, width: 2), borderRadius: BorderRadius.circular(20)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Center( child: Image.network( "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTtAT11wKgHrJBUYzIBFogucXg0a9fE0fQXDQ&s"), ), Padding( padding: EdgeInsets.only(top: 50), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(widget.name, style: TextStyle(fontSize: 17)), Text("${widget.price} Руб", style: TextStyle(fontSize: 17, color: Colors.orange)) ], ), ) ], ), ), Positioned( right: 10, top: 10, child: IconButton( icon: Icon(_isFavourite ? Icons.favorite : Icons.favorite_border), color: Colors.red, onPressed: toggleIsFavourite, ) ) ], ); } }