diff --git a/lib/main.dart b/lib/main.dart index c0a18e6..9363d57 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; - +import 'presentation/home_page/home_page.dart'; void main() { runApp(const MyApp()); } @@ -21,164 +21,9 @@ class MyApp extends StatelessWidget { } } -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.deepOrange; - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - backgroundColor: _color, - title: Text(widget.title), - ), - 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 TitleCar; - final String descriptionCar; - final IconData icon; - final String? imageUrl; - - const _Car( - this.TitleCar, { - 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.redAccent), - boxShadow: [ - BoxShadow( - color: Colors.deepOrange.withOpacity(.5), - spreadRadius: 5, - offset: const Offset(0, 5), - blurRadius: 8, - ), - ], - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(20), - child: SizedBox( - height: 150, - width: 150, - 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( - TitleCar, - style: Theme.of(context).textTheme.headlineLarge, - ), - Text( - descriptionCar, - style: Theme.of(context).textTheme.bodyLarge, - ) - ], - ), - ), - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/lib/presentation/home_page/car.dart b/lib/presentation/home_page/car.dart new file mode 100644 index 0000000..9ab8765 --- /dev/null +++ b/lib/presentation/home_page/car.dart @@ -0,0 +1,131 @@ +part of 'home_page.dart'; + +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 _Car extends StatefulWidget { + 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 + State<_Car> createState() => _CarState(); +} + +class _CarState extends State<_Car> { + bool islike = false; + + @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.redAccent), + boxShadow: [ + BoxShadow( + color: Colors.deepOrange.withOpacity(.5), + spreadRadius: 5, + offset: const Offset(0, 5), + blurRadius: 8, + ), + ], + ), + child: IntrinsicHeight( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(20), + child: SizedBox( + height: 150, + width: 150, + child: Image.network( + widget.imageUrl ?? '', + fit: BoxFit.cover, + errorBuilder: (_, __, ___) => const Placeholder(), + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.text, + style: Theme.of(context).textTheme.headlineLarge, + ), + Text( + widget.descriptionCar, + style: Theme.of(context).textTheme.bodyLarge, + ) + ], + ), + ), + ), + Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: const EdgeInsets.only( + left: 8, + right: 16, + bottom: 16, + ), + child: GestureDetector( + onTap: () { + setState(() { + islike = !islike; + }); + }, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: islike + ? const Icon( + Icons.add_circle_outline, + color: Colors.redAccent, + key: ValueKey(0), + ) + : const Icon( + Icons.add_circle, + key: ValueKey(1), + ), + ), + ), + ), + ), + ], + ), + ) + ); + } +} \ No newline at end of file diff --git a/lib/presentation/home_page/home_page.dart b/lib/presentation/home_page/home_page.dart new file mode 100644 index 0000000..8b2a6c4 --- /dev/null +++ b/lib/presentation/home_page/home_page.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +part 'car.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.deepOrange; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: _color, + title: Text(widget.title), + ), + body: const WidgetBody(), + ); + } +} +class WidgetBody extends StatelessWidget { + const WidgetBody({super.key}); + + @override + Widget build(BuildContext context) { + final data = [ + _CarData( + '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( + 'Granta', + descriptionCar: 'Год 2018\nпробег: 157000км\nвладельцев: 3', + icon: Icons.access_alarm, + imageUrl: + 'https://avatars.mds.yandex.net/get-verba/1535139/2a00000190baa76e30188cfeae4d9b675edf/cattouchret', + ), + _CarData( + '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( + '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(), + ), + ), + ); + } +} \ No newline at end of file