change list organization page

This commit is contained in:
max 2025-07-17 14:41:42 +03:00
parent b6d4be7f97
commit f487c9aeb0
4 changed files with 61 additions and 15 deletions

View File

@ -1,6 +1,6 @@
abstract class Repository<T> { abstract class Repository<T> {
Future<List<T>> load(); Future<List<T>> load();
Future<T> add(T organization); Future<T> add(T value);
Future<void> update(T organization); Future<void> update(T value);
Future<void> delete(String? id); Future<void> delete(String? id);
} }

View File

@ -47,7 +47,7 @@ class _OrganizationDetailPage extends State<OrganizationDetailPage>{
icon: const Icon(Icons.edit), icon: const Icon(Icons.edit),
tooltip: 'Редактировать', tooltip: 'Редактировать',
onPressed: () => Navigator.of(context).push( onPressed: () => Navigator.of(context).push(
MaterialPageRoute(builder: (ctx) => OrganizationAddPage(initialOrganization: editOrganization))) MaterialPageRoute(builder: (ctx) => OrganizationEditPage(initialOrganization: editOrganization)))
.then((value) => { .then((value) => {
setState(() { setState(() {
if (value != null && value is Organization) if (value != null && value is Organization)

View File

@ -4,15 +4,15 @@ import 'package:instruction_app/providers/organization_ptovider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class OrganizationAddPage extends StatefulWidget { class OrganizationEditPage extends StatefulWidget {
final Organization? initialOrganization; final Organization? initialOrganization;
const OrganizationAddPage({super.key, this.initialOrganization}); const OrganizationEditPage({super.key, this.initialOrganization});
@override @override
State<OrganizationAddPage> createState() => _OrganizationAddPage(); State<OrganizationEditPage> createState() => _OrganizationEditPage();
} }
class _OrganizationAddPage extends State<OrganizationAddPage> { class _OrganizationEditPage extends State<OrganizationEditPage> {
final _formKey = GlobalKey<FormState>(); final _formKey = GlobalKey<FormState>();
late TextEditingController _titleController; late TextEditingController _titleController;

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:instruction_app/models/organization.dart';
import 'package:instruction_app/providers/organization_ptovider.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/edit_organization_page.dart';
import 'package:instruction_app/screens/organization_page/detail_organization_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class OrganizationListPage extends StatefulWidget { class OrganizationListPage extends StatefulWidget {
@ -20,6 +20,31 @@ class _OrganizationListPage extends State<OrganizationListPage>{
.loadOrganizations()); .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<OrganizationProvider>(context, listen: false)
.deleteOrganization(organization.id!);
Navigator.of(ctx).pop();
},
child: const Text('Удалить', style: TextStyle(color: Colors.red))
),
],
)
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -41,7 +66,7 @@ class _OrganizationListPage extends State<OrganizationListPage>{
onPressed: () { onPressed: () {
// возможно поменять // возможно поменять
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute(builder: (context) => const OrganizationAddPage()), MaterialPageRoute(builder: (context) => const OrganizationEditPage()),
); );
}, },
tooltip: "Добавить организацию", tooltip: "Добавить организацию",
@ -66,18 +91,39 @@ class _OrganizationListPage extends State<OrganizationListPage>{
itemCount: provider.organizations.length, itemCount: provider.organizations.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final organization = provider.organizations[index]; final organization = provider.organizations[index];
return Card( return
Card( // возможно убрать
margin: const EdgeInsets.symmetric( margin: const EdgeInsets.symmetric(
horizontal: 16, horizontal: 16,
vertical: 8 vertical: 8
), ),
child: ListTile( child: ListTile(
title: Text(organization.title), title: Text(organization.title),
onTap: () { trailing: Row(
Navigator.of(context).push(MaterialPageRoute( mainAxisSize: MainAxisSize.min,
builder: (ctx) => OrganizationDetailPage(initialOrganization: organization), 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),
// ));
// },
), ),
); );
} }