Flutter - Dart
Dostavka posylok
main.dart
import 'package:flutter/material.dart';
import 'delivery_form.dart';
import 'tracking_form.dart';
void main() {
runApp(DeliveryApp());
}
class DeliveryApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
// Изменение цветов текста на вкладках
tabBarTheme: TabBarTheme(
labelColor: Colors.black, // Цвет активной вкладки
unselectedLabelColor: Colors.grey, // Цвет неактивных вкладок
),
),
home: Scaffold(
appBar: AppBar(
title: Text('Доставка посылок'),
),
body: DeliveryTabs(),
),
);
}
}
class DeliveryTabs extends StatefulWidget {
@override
_DeliveryTabsState createState() => _DeliveryTabsState();
}
class _DeliveryTabsState extends State with SingleTickerProviderStateMixin {
late TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
TabBar(
controller: _tabController,
tabs: [
Tab(text: 'Отправить посылку'),
Tab(text: 'Отследить посылку'),
],
),
Expanded(
child: TabBarView(
controller: _tabController,
children: [
DeliveryForm(),
TrackingForm(),
],
),
),
],
);
}
}
delivery_form.dart
import 'package:flutter/material.dart';
class DeliveryForm extends StatelessWidget {
final TextEditingController senderNameController = TextEditingController();
final TextEditingController receiverNameController = TextEditingController();
final TextEditingController parcelContentController = TextEditingController();
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextFormField(
controller: senderNameController,
decoration: InputDecoration(labelText: 'Ваше имя'),
validator: (value) {
if (value!.isEmpty) {
return 'Введите ваше имя';
}
return null;
},
),
TextFormField(
controller: receiverNameController,
decoration: InputDecoration(labelText: 'Имя получателя'),
validator: (value) {
if (value!.isEmpty) {
return 'Введите имя получателя';
}
return null;
},
),
TextFormField(
controller: parcelContentController,
decoration: InputDecoration(labelText: 'Содержимое посылки'),
validator: (value) {
if (value!.isEmpty) {
return 'Введите содержимое посылки';
}
return null;
},
),
ElevatedButton(
onPressed: () {
// Здесь можно добавить логику для отправки данных на сервер или другую обработку
String senderName = senderNameController.text;
String receiverName = receiverNameController.text;
String parcelContent = parcelContentController.text;
_showDeliveryConfirmation(context, senderName, receiverName);
},
child: Text('Отправить'),
),
],
),
);
}
void _showDeliveryConfirmation(BuildContext context, String senderName, String receiverName) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Подтверждение отправки'),
content: Text('Посылка от $senderName для $receiverName отправлена!'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
senderNameController.clear();
receiverNameController.clear();
parcelContentController.clear();
},
child: Text('ОК'),
),
],
);
},
);
}
}
tracking_form.dart
import 'package:flutter/material.dart';
class TrackingForm extends StatelessWidget {
final TextEditingController trackingCodeController = TextEditingController();
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextFormField(
controller: trackingCodeController,
decoration: InputDecoration(labelText: 'Введите код отслеживания'),
validator: (value) {
if (value!.isEmpty) {
return 'Введите код отслеживания';
}
return null;
},
),
ElevatedButton(
onPressed: () {
// Здесь можно добавить логику для запроса статуса посылки на сервере
String trackingCode = trackingCodeController.text;
_showTrackingStatus(context, trackingCode);
},
child: Text('Отследить'),
),
SizedBox(height: 20),
Text(
'Статус посылки:',
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(
'В пути',
style: TextStyle(color: Colors.green),
),
],
),
);
}
void _showTrackingStatus(BuildContext context, String trackingCode) {
// Здесь можно добавить логику для получения статуса посылки с сервера
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Отслеживание посылки'),
content: Text('Статус посылки с кодом отслеживания $trackingCode: В пути'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
trackingCodeController.clear();
},
child: Text('ОК'),
),
],
);
},
);
}
}