171 lines
4.1 KiB
Dart
Raw Normal View History

2024-10-22 00:36:13 +04:00
import 'dart:math';
2024-10-21 16:34:25 +04:00
import 'package:flutter/material.dart';
2024-10-22 00:36:13 +04:00
// Classes +
// Methods +
// Enums +
// Loops +
// Generics (List<>) +
// Anonymous functions +
// Future +
// Extension +
2024-10-21 16:34:25 +04:00
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
2024-10-22 00:36:13 +04:00
@override
2024-10-21 16:34:25 +04:00
Widget build(BuildContext context) {
return MaterialApp(
2024-10-22 00:36:13 +04:00
title: 'Gerimovich demo',
2024-10-21 16:34:25 +04:00
theme: ThemeData(
2024-10-22 00:36:13 +04:00
colorScheme: ColorScheme.fromSeed(seedColor: Colors.red),
2024-10-21 16:34:25 +04:00
useMaterial3: true,
),
2024-10-22 00:36:13 +04:00
home: const MyHomePage(title: 'Gerimovich I M'),
2024-10-21 16:34:25 +04:00
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
2024-10-22 00:36:13 +04:00
@override
void initState() {
super.initState();
2024-10-21 16:34:25 +04:00
}
@override
Widget build(BuildContext context) {
2024-10-22 00:36:13 +04:00
return Scaffold(
2024-10-21 16:34:25 +04:00
appBar: AppBar(
2024-10-22 00:36:13 +04:00
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: const StocksWidget(),
);
}
}
enum StockCategory { oilgas, finance, mining }
extension StockCategoryExtension on StockCategory {
String get name {
switch (this) {
case StockCategory.oilgas:
return 'Нефтегазовая отрасль';
case StockCategory.finance:
return 'Банки';
case StockCategory.mining:
return 'Добыча полезных ископаемых';
}
}
}
class Stock {
final String name;
final double price;
final String imageUrl;
final StockCategory category;
Stock({
required this.name,
required this.price,
required this.imageUrl,
required this.category,
});
}
class StocksWidget extends StatelessWidget {
const StocksWidget({super.key});
@override
Widget build(BuildContext context) {
final stocks = [
Stock(
name: 'Алроса',
price: 52.90,
imageUrl:
'https://data.cbonds.info/organisations_logos/18/1617957662ALROSA_Rus_COLOUR_RGB.jpg',
category: StockCategory.mining),
Stock(
name: 'Газпром',
price: 135.43,
imageUrl: 'https://data.cbonds.info/organisations_logos/21/21.png',
category: StockCategory.oilgas),
Stock(
name: 'Сбербанк',
price: 257.50,
imageUrl:
'https://data.cbonds.info/organisations_logos/313/1615279834sberbank__2-01.png',
category: StockCategory.finance),
Stock(
name: 'Сбербанк',
price: 111111111.111111111,
imageUrl:
'https://data.cbonds.info/organisations_logos/313/1615279834sberbank__2-01.png',
category: StockCategory.finance),
];
return Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
...stocks.map((e) => StockCard(stock: e)),
],
),
2024-10-21 16:34:25 +04:00
),
2024-10-22 00:36:13 +04:00
);
}
}
class StockCard extends StatelessWidget {
final Stock stock;
const StockCard({super.key, required this.stock});
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.all(8.0),
child: Padding(
padding: const EdgeInsets.all(14.0),
child: Row(
children: [
Image.network(
stock.imageUrl,
width: 85,
height: 85,
2024-10-21 16:34:25 +04:00
),
2024-10-22 00:36:13 +04:00
const SizedBox(width: 16.0),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
stock.name,
style: Theme.of(context).textTheme.headlineSmall,
),
Text(
'${stock.price.toStringAsFixed(2)} р',
style: Theme.of(context).textTheme.bodyLarge,
),
Text(
stock.category.name,
style: Theme.of(context).textTheme.bodySmall,
),
],
2024-10-21 16:34:25 +04:00
),
],
),
),
2024-10-22 00:36:13 +04:00
);
2024-10-21 16:34:25 +04:00
}
}