From 22cc6a561b184aaa16a7e65eb4424f111802fb3c Mon Sep 17 00:00:00 2001 From: DavidMakarov Date: Wed, 2 Oct 2024 22:38:49 +0400 Subject: [PATCH] add Card --- lib/main.dart | 131 +++++++++++++++++++++++++++++++++++++------------- pubspec.lock | 8 +-- pubspec.yaml | 2 +- 3 files changed, 102 insertions(+), 39 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index a93499e..b403c75 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,57 +12,120 @@ class MyApp extends StatelessWidget { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightGreen), useMaterial3: true, ), - home: const MyHomePage(title: 'Макаров Давид Вячеславович'), + home: const MyHomePage(), ); } } class MyHomePage extends StatefulWidget { - const MyHomePage({super.key, required this.title}); - final String title; + const MyHomePage({super.key}); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() { - setState(() { - _counter++; - }); - } - + List<_CardData> data = [ + _CardData( + textData: "Random picture", + imageUrl: "https://loremflickr.com/150/150"), + _CardData( + textData: "Another picture", + imageUrl: "https://loremflickr.com/150/150?random=12"), + _CardData( + textData: "200x200 picture", + imageUrl: "https://loremflickr.com/200/200"), + _CardData( + textData: "100x150 picture", + imageUrl: "https://loremflickr.com/100/150"), + _CardData( + textData: "300x150 picture", + imageUrl: "https://loremflickr.com/350/150"), + ]; @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, - ), - ], + appBar: AppBar( + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + title: Text( + 'Item list', + ), ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), + body: SingleChildScrollView( + child: Column( + children: data.map((d) => _Card.withData(d)).toList(), + ), + )); + } +} + +class _CardData { + final String textData; + final String imageUrl; + + const _CardData({required this.textData, required this.imageUrl}); +} + +class _Card extends StatelessWidget { + String text; + String imageUrl; + + _Card({super.key, required this.text, required this.imageUrl}); + + factory _Card.withData(_CardData d) => _Card( + text: d.textData, + imageUrl: d.imageUrl, + ); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + margin: EdgeInsets.all(5.0), + padding: EdgeInsets.all(8.0), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.inversePrimary, + borderRadius: BorderRadius.circular(20)), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(20), + child: SizedBox( + width: 150, + height: 150, + child: Image.network( + imageUrl == "" + ? "https://loremflickr.com/150/150?random=1" + : imageUrl, + fit: BoxFit.cover, + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16.0, top: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + text, + style: Theme.of(context).textTheme.headlineSmall, + ), + Text( + "This is card with picture and text", + style: Theme.of(context).textTheme.labelSmall, + ), + ], + ), + ), + ) + ], + )), ); } } diff --git a/pubspec.lock b/pubspec.lock index 07514d0..84d642e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -66,10 +66,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -103,10 +103,10 @@ packages: dependency: transitive description: name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index cb839ed..4d52b62 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,7 +45,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec