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', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Знакомства'), ); } } 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: const MyWidget(), ); } } class MyWidget extends StatelessWidget { const MyWidget({super.key}); @override Widget build(BuildContext context) { final data = [ const _CardPostData( "Евгения", "Люблю программирование и кататься на скейте", "https://avatar.iran.liara.run/public/girl", true), const _CardPostData("Алекс", "Junior Flutter Engineer", "https://avatar.iran.liara.run/public/36", false), const _CardPostData( "Станислав", "Нет ничего приятнее прогулки на природе!", "https://avatar.iran.liara.run/public/boy", true), const _CardPostData("Вероника", "В свободное время хожу на уроки вокала", "https://avatar.iran.liara.run/public/93", false), ]; return Center( child: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: data.map((e) => _CardPost.fromData(e)).toList(), ))); } } class _CardPost extends StatelessWidget { final String description; final String? imageUrl; final bool isLiked; final String name; const _CardPost(this.name, this.description, this.imageUrl, this.isLiked); factory _CardPost.fromData(_CardPostData data) => _CardPost(data.name, data.description, data.imageUrl, data.isLiked); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.all(10), padding: const EdgeInsets.all(10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Colors.blue, border: Border.all( color: Colors.blue, width: 0.5, ), boxShadow: const [ BoxShadow( color: Colors.black12, offset: Offset( 0.0, 5.0, ), blurRadius: 4.0, spreadRadius: 1.0, ), ], ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Flexible( child: Text( name, style: const TextStyle( color: Colors.white, fontSize: 30, ), ), ), ], ), Padding( padding: const EdgeInsets.only(top: 6.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Flexible( child: Text( description, textAlign: TextAlign.center, style: const TextStyle( color: Colors.white, fontSize: 24, ), ), ), ], ), ), if (imageUrl != null) Padding( padding: const EdgeInsets.all(8.0), child: Image.network(imageUrl!, height: 500, width: double.infinity, fit: BoxFit.fitWidth), ), if (isLiked) const Padding( padding: EdgeInsets.all(4.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.favorite, color: Colors.red, size: 80), ], ), ) else const Padding( padding: EdgeInsets.all(4.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.favorite_border, color: Colors.red, size: 80), ], ), ) ], ), ); } } class _CardPostData extends StatelessWidget { final String name; final String description; final String? imageUrl; final bool isLiked; const _CardPostData(this.name, this.description, this.imageUrl, this.isLiked); @override Widget build(BuildContext context) { return const Placeholder(); } }