From 8901a403ad9d79ea5c43508131fe1ef9f37e490c Mon Sep 17 00:00:00 2001 From: Arkadiy Radaev Date: Tue, 8 Oct 2024 18:05:02 +0400 Subject: [PATCH] lab 3 done --- lib/main.dart | 184 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 152 insertions(+), 32 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 4f17621..a63dd30 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,15 +7,16 @@ void main() { class MyApp extends StatelessWidget { const MyApp({super.key}); - @override + @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', + title: 'My app', + debugShowCheckedModeBanner: false, theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.orangeAccent), useMaterial3: true, ), - home: const MyHomePage(title: 'Radaev Arkadiy'), + home: const MyHomePage(title: 'Kupi Slona'), ); } } @@ -23,8 +24,6 @@ class MyApp extends StatelessWidget { class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); - - final String title; @override @@ -32,37 +31,158 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() { - setState(() { - _counter++; - }); - } + final Color _color = Colors.deepOrange; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - backgroundColor: Theme.of(context).colorScheme.inversePrimary, - 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, - ), - ], - ), + backgroundColor: _color, + title: Text(widget.title), ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), ); + body: const MyWidget(), + ); } } + +class _CarData { + final String text; + final String descriptionCar; + final IconData icon; + final String? imageUrl; + + _CarData( + this.text, { + required this.descriptionCar, + this.icon = Icons.ac_unit_outlined, + this.imageUrl, + }); +} + +class MyWidget extends StatelessWidget { + const MyWidget({super.key}); + + @override + Widget build(BuildContext context) { + final data = [ + _CarData( + 'Lada Vesta', + descriptionCar: 'год: 2021\nпробег: 12000км\nвладельцев: 2', + icon: Icons.access_alarm, + imageUrl: + 'https://yandex-images.clstorage.net/9mo9mr339/ee7538_C/G8eJXZRUhfuSJ9OjdqqaieLubYBOeM1UA1msI7Sd_LOgNGnS4z1IcAaQIvJeBUT1gL1zzfQzXO5c6BvSx-0aw2-jrS1VpRXfdwbz5zILb3mWX4kFSm2YIIK4yef1bn8Q9vZbcVDu-1ZFEUPWS2AAJAQJpXr1Rp2umW-b8GJJ3aE49Qla0NDF2aIH8zAEDLoLMaiecc5o37VUiZ9zkF1NwaQV-9PDnfn2hQNB9asA8XBkabeYInUdvvnMqbHSmM0C-BW4KlAANzhCx7Ii1g6YCONbDLFN-R83djoegKCerfIGlSgS4Q8rhiURsUeIE1FwpWtV60PUbB1rfapgAvsNM-sn6poQgObboRawofStC9oheC2wfaouF5aKL9Cg7cwz1jSaAoH8Onf0YMPkO2DCA4YapttDtv2fG7_pEnI6PXB6dGqYEcD3iuImQhB2jysZkzhsoO_73ScW6kwR4c3Ms4WEqqER3tgU9QHjVNijMxH3ydf7w_U9DHvvqUGz6u5iStW4-LIAxViAdIIRFTypy9HorkDt6e5m5Vg_I3BfrbKGtRgykF4bV5Ujg2TYUjCC9et1-SDGz6xavBqQooivgisluhlTAjUY0kRDkVb8iWkjW-0hPxovpxQab0OTz_ygpUVrwgFdO4Rlk8OXykLwAlda1PhDdH7_eT2qs-A6PCE4tLsa0SA2-2LEEhA1PJpKwWuMAh4I3aa22c1RYX2e0IanKZFDTgq3lcDj9FsAIUHUaBcZ0nUtDLmsqpOi6p7CC4XKuxKCp9vBRGLzBq9K2IGJ3lP-uLxF9wvM0ABNLJHXt2vzILzoVYTS80YJgvHwlTgXmGOm_mypL6hz8cl_8wjmeerAEfW78XSh8OW9eQsRmg0Sn_qvxRVrboLjbpyAB2dYEMG9SDZXwoNG2TFRklVqdDviBDxcet_bEGHIHNIIxKj4AFBXGfGWI_CW_Pp7YUudcO-I_FYGOmySUW3-8', + ), + _CarData( + 'Lada Granta', + descriptionCar: 'Год 2018\nпробег: 157000км\nвладельцев: 3', + icon: Icons.access_alarm, + imageUrl: + 'https://avatars.mds.yandex.net/get-verba/1535139/2a00000190baa76e30188cfeae4d9b675edf/cattouchret', + ), + _CarData( + 'Lada Iskra', + descriptionCar: 'год 2024\nпробег: 100км\nвладельцев: 1', + icon: Icons.access_alarm, + imageUrl: + 'https://s.auto.drom.ru/i24294/c/photos/fullsize/lada/iskra/lada_iskra_1205438.jpg', + ), + _CarData( + 'Lada Niva', + descriptionCar: 'год 2022\nпробег: 67000км\nвладельцев: 2', + icon: Icons.access_alarm, + imageUrl: + 'https://avatars.mds.yandex.net/i?id=4d0abc12a692355be9dddf44bdb701b1_l-7736363-images-thumbs&n=13', + ), + ]; + + return Center( + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: data.map((e) => _Car.fromData(e)).toList(), + ), + ), + ); + } +} + +class _Car extends StatelessWidget { + final String text; + final String descriptionCar; + final IconData icon; + final String? imageUrl; + + const _Car( + this.text, { + this.icon = Icons.ac_unit_outlined, + required this.descriptionCar, + this.imageUrl, + }); + + factory _Car.fromData(_CarData data) => _Car( + data.text, + descriptionCar: data.descriptionCar, + icon: data.icon, + imageUrl: data.imageUrl, + ); + + @override + Widget build(BuildContext context) { + return Container( + margin: const EdgeInsets.all(16), + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white70, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: Colors.grey), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(.5), + spreadRadius: 4, + offset: const Offset(0, 5), + blurRadius: 8, + ), + ], + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(20), + child: SizedBox( + height: 140, + width: 100, + child: Image.network( + imageUrl ?? '', + fit: BoxFit.cover, + errorBuilder: (_, __, ___) => const Placeholder(), + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + text, + style: Theme.of(context).textTheme.headlineLarge, + ), + Text( + descriptionCar, + style: Theme.of(context).textTheme.bodyLarge, + ) + ], + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Icon(icon), + ), + ], + ), + ); + } +} \ No newline at end of file