Isar part 2

Screens

Add Screen

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:task_manager/logic/task_cubit.dart';
import 'package:task_manager/model/task_model.dart';
import 'package:task_manager/ui%20/widgets/app_button.dart';
import 'package:task_manager/ui%20/widgets/date_picker_widget.dart';
import 'package:task_manager/ui%20/widgets/priority_widget.dart';
import 'package:task_manager/ui%20/widgets/text_input_field_widget.dart';

class AddScreen extends StatefulWidget {
  const AddScreen({super.key});

  @override
  State<AddScreen> createState() => _AddScreenState();
}

class _AddScreenState extends State<AddScreen> {
  TextEditingController titleController = TextEditingController();
  TextEditingController descController = TextEditingController();

  DateTime _selectedDateTime = DateTime.now();

  int selectPriority = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        backgroundColor: Colors.white,
        elevation: 0,
        title: Text('Новая задача'),
      ),
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 15),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextInputFieldWidget(
              label: 'Tilte',
              hint: 'Добавьте название задачи',
              controller: titleController,
            ),
            SizedBox(height: 24),
            TextInputFieldWidget(
              label: 'Описание ',
              hint: 'добавьте описание',
              maxLines: 4,
              controller: descController,
            ),
            SizedBox(height: 24),

            PriorityWidget(
              selectPriority: selectPriority,
              onTap: (int p1) {
                setState(() {
                  selectPriority = p1;
                });
              },
            ),
            SizedBox(height: 24),
            DatePickerWidget(
              onTap: () {
                showDateDialog();
              },
              selectedDay: _selectedDateTime,
            ),
            SizedBox(height: 48),
            AppButton(
              title: 'Добавить задачу',
              onPressed: () {
                submit();
              },
            ),
          ],
        ),
      ),
    );
  }

  void showDateDialog() async {
    final picked = await showDatePicker(
      context: context,
      initialDate: _selectedDateTime,
      firstDate: DateTime.now(),
      lastDate: DateTime(2030),
    );
    if (picked != null) setState(() => _selectedDateTime = picked);
  }

  void submit() {
    if (titleController.text.isEmpty) return;

    final task = TaskModel(
      title: titleController.text,
      description: descController.text,
      dueDate: _selectedDateTime,
      priority: selectPriority,
      categoryId: 'default',
      createdAt: DateTime.now(),
    );
    print('задача добавлена');
    context.read<TaskCubit>().addTask(taskModel: task);
    Navigator.pop(context);
  }
}

Widgets

logic

отвечает за логику

Repositories

model

Last updated