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> {
Future<List<T>> load();
Future<T> add(T organization);
Future<void> update(T organization);
Future<T> add(T value);
Future<void> update(T value);
Future<void> delete(String? id);
}

View File

@ -47,7 +47,7 @@ class _OrganizationDetailPage extends State<OrganizationDetailPage>{
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)

View File

@ -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<OrganizationAddPage> createState() => _OrganizationAddPage();
State<OrganizationEditPage> createState() => _OrganizationEditPage();
}
class _OrganizationAddPage extends State<OrganizationAddPage> {
class _OrganizationEditPage extends State<OrganizationEditPage> {
final _formKey = GlobalKey<FormState>();
late TextEditingController _titleController;

View File

@ -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<OrganizationListPage>{
.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
Widget build(BuildContext context) {
return Scaffold(
@ -41,7 +66,7 @@ class _OrganizationListPage extends State<OrganizationListPage>{
onPressed: () {
// возможно поменять
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => const OrganizationAddPage()),
MaterialPageRoute(builder: (context) => const OrganizationEditPage()),
);
},
tooltip: "Добавить организацию",
@ -66,18 +91,39 @@ class _OrganizationListPage extends State<OrganizationListPage>{
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),
// ));
// },
),
);
}