From 00b94d6b754374e2695d2d94924fdf4ba2c3b71f Mon Sep 17 00:00:00 2001 From: urlilpolly Date: Tue, 12 Nov 2024 14:00:50 +0400 Subject: [PATCH] laba_3 --- lib/main.dart | 167 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 128 insertions(+), 39 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index c5f1664..fa30518 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,15 +9,16 @@ void main() { class MyApp extends StatelessWidget { const MyApp({super.key}); - @override + @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', + debugShowCheckedModeBanner: false, theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.black), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.white), useMaterial3: true, ), - home: const MyHomePage(title: 'Flutter rocks!'), + home: const MyHomePage(title: 'Блохин Дмитрий Алексеевич'), ); } } @@ -25,8 +26,6 @@ class MyApp extends StatelessWidget { class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); - - final String title; @override @@ -34,48 +33,138 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State { - int _counter = 0; - Color _color = Colors.green; - - void _incrementCounter() { - setState(() { - _counter++; - _color = - Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0); - }); - } - @override Widget build(BuildContext context) { + final data = [ + const _CardData( + 'Freeze', + descriptionText: 'lol', + imageUrl: 'https://steamuserimages-a.akamaihd.net/ugc/974353381258701515/67DFC214C7166FAECF380BFACC10976AA2D86D1D/?imw=512&imh=512&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true', + ), + const _CardData( + 'Hi', + descriptionText: 'aboba', + icon: Icons.abc_rounded, + imageUrl: 'https://i.pinimg.com/736x/c1/43/f8/c143f8b663bc1f6ba4e0d63fe3295bc3.jpg', + ), + const _CardData( + 'SUI', + descriptionText: 'Portugal', + icon: Icons.portrait, + imageUrl: 'https://us-tuna-sounds-images.voicemod.net/1871fd78-7359-4b9e-8e65-957cc1d35de5-1692182201559.jpg', + ), + ]; return Scaffold( appBar: AppBar( - backgroundColor: _color, + backgroundColor: Colors.deepPurple, title: Text(widget.title), ), body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'You have pushed the button this many times:', - ), - Text( - '$_counter', - style: Theme.of(context).textTheme.headlineMedium, - ), - if (_counter > 10) - Text( - 'Why are you clicking?', - style: Theme.of(context).textTheme.headlineMedium, - ), - ], + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: data.map((e) => _Card.fromData(e)).toList(), + ), ), ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - backgroundColor: _color, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), ); + ); + } +} + +class _CardData { + final String text; + final String descriptionText; + final IconData icon; + final String? imageUrl; + + const _CardData( + this.text, { + required this.descriptionText, + this.icon = Icons.add_ic_call, + this.imageUrl, + }); +} + +class _Card extends StatelessWidget { + final String text; + final String descriptionText; + final IconData icon; + final String? imageUrl; + + const _Card( + this.text, { + this.icon = Icons.ac_unit_outlined, + required this.descriptionText, + this.imageUrl, + }); + + factory _Card.fromData(_CardData data) => _Card( + data.text, + descriptionText: data.descriptionText, + icon: data.icon, + imageUrl: data.imageUrl, + ); + + @override + Widget build(BuildContext context) { + return Container( + margin: const EdgeInsets.only(top: 16), + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.greenAccent, + borderRadius: BorderRadius.circular(15), + border: Border.all( + color: Colors.black, + width: 2, + ), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(.5), + spreadRadius: 4, + offset: const Offset(0, 5), + blurRadius: 8, + ) + ] + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(15), + child: SizedBox( + height: 140, + width: 100, + child: Image.network( + imageUrl ?? '', + fit: BoxFit.cover, + errorBuilder: (_, __, ___) => const Placeholder(), + )), + ), + Flexible( + child: Padding( + padding: const EdgeInsets.only(left: 3.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + text, + style: Theme.of(context).textTheme.headlineLarge, + ), + Text( + descriptionText, + style: Theme.of(context).textTheme.bodyLarge, + ) + ], + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Icon(icon), + ), + ], + ), + ); } }