From f487c9aeb0e754f731c12f547f946d4521b91006 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 17 Jul 2025 14:41:42 +0300 Subject: [PATCH] change list organization page --- lib/data/interface/IRepository.dart | 4 +- .../detail_organization_page.dart | 2 +- .../edit_organization_page.dart | 8 +-- .../list_organization_page.dart | 62 ++++++++++++++++--- 4 files changed, 61 insertions(+), 15 deletions(-) diff --git a/lib/data/interface/IRepository.dart b/lib/data/interface/IRepository.dart index 0474077..697090c 100644 --- a/lib/data/interface/IRepository.dart +++ b/lib/data/interface/IRepository.dart @@ -1,6 +1,6 @@ abstract class Repository { Future> load(); - Future add(T organization); - Future update(T organization); + Future add(T value); + Future update(T value); Future delete(String? id); } \ No newline at end of file diff --git a/lib/screens/organization_page/detail_organization_page.dart b/lib/screens/organization_page/detail_organization_page.dart index cc1035d..02e7715 100644 --- a/lib/screens/organization_page/detail_organization_page.dart +++ b/lib/screens/organization_page/detail_organization_page.dart @@ -47,7 +47,7 @@ class _OrganizationDetailPage extends State{ icon: const Icon(Icons.edit), tooltip: 'Редактировать', onPressed: () => Navigator.of(context).push( - MaterialPageRoute(builder: (ctx) => OrganizationAddPage(initialOrganization: editOrganization))) + MaterialPageRoute(builder: (ctx) => OrganizationEditPage(initialOrganization: editOrganization))) .then((value) => { setState(() { if (value != null && value is Organization) diff --git a/lib/screens/organization_page/edit_organization_page.dart b/lib/screens/organization_page/edit_organization_page.dart index d61cc86..0de8860 100644 --- a/lib/screens/organization_page/edit_organization_page.dart +++ b/lib/screens/organization_page/edit_organization_page.dart @@ -4,15 +4,15 @@ import 'package:instruction_app/providers/organization_ptovider.dart'; import 'package:provider/provider.dart'; -class OrganizationAddPage extends StatefulWidget { +class OrganizationEditPage extends StatefulWidget { final Organization? initialOrganization; - const OrganizationAddPage({super.key, this.initialOrganization}); + const OrganizationEditPage({super.key, this.initialOrganization}); @override - State createState() => _OrganizationAddPage(); + State createState() => _OrganizationEditPage(); } -class _OrganizationAddPage extends State { +class _OrganizationEditPage extends State { final _formKey = GlobalKey(); late TextEditingController _titleController; diff --git a/lib/screens/organization_page/list_organization_page.dart b/lib/screens/organization_page/list_organization_page.dart index 723927a..092bf2c 100644 --- a/lib/screens/organization_page/list_organization_page.dart +++ b/lib/screens/organization_page/list_organization_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:instruction_app/models/organization.dart'; import 'package:instruction_app/providers/organization_ptovider.dart'; import 'package:instruction_app/screens/organization_page/edit_organization_page.dart'; -import 'package:instruction_app/screens/organization_page/detail_organization_page.dart'; import 'package:provider/provider.dart'; class OrganizationListPage extends StatefulWidget { @@ -20,6 +20,31 @@ class _OrganizationListPage extends State{ .loadOrganizations()); } + void _deleteOrganization(BuildContext context, Organization organization) async { + showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) => AlertDialog( + title: const Text('Подтверждение операции'), + content: Text("Вы уверены, что хотите удалить организацию \"${organization.title}\"?"), + actions: [ + TextButton( + onPressed: () => Navigator.of(ctx).pop(), + child: const Text('Отмена') + ), + TextButton( + onPressed: () { + Provider.of(context, listen: false) + .deleteOrganization(organization.id!); + Navigator.of(ctx).pop(); + }, + child: const Text('Удалить', style: TextStyle(color: Colors.red)) + ), + ], + ) + ); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -41,7 +66,7 @@ class _OrganizationListPage extends State{ onPressed: () { // возможно поменять Navigator.of(context).push( - MaterialPageRoute(builder: (context) => const OrganizationAddPage()), + MaterialPageRoute(builder: (context) => const OrganizationEditPage()), ); }, tooltip: "Добавить организацию", @@ -66,18 +91,39 @@ class _OrganizationListPage extends State{ itemCount: provider.organizations.length, itemBuilder: (context, index) { final organization = provider.organizations[index]; - return Card( + return + Card( // возможно убрать margin: const EdgeInsets.symmetric( horizontal: 16, vertical: 8 ), child: ListTile( title: Text(organization.title), - onTap: () { - Navigator.of(context).push(MaterialPageRoute( - builder: (ctx) => OrganizationDetailPage(initialOrganization: organization), - )); - }, + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: Icon(Icons.edit), + tooltip: 'Редактировать', + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => OrganizationEditPage(initialOrganization: organization) + )); + }, + ), + IconButton( + icon: Icon(Icons.delete), + tooltip: 'Удалить', + onPressed: () => _deleteOrganization(context, organization), + ) + ], + ), + // onTap: () { + // Navigator.of(context).push(MaterialPageRoute( + // builder: (ctx) => OrganizationDetailPage(initialOrganization: organization), + // )); + // }, ), ); }