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<DeliveryTabs> 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('ОК'),
            ),
          ],
        );
      },
    );
  }
}