change list organization page
This commit is contained in:
parent
b6d4be7f97
commit
f487c9aeb0
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
// ));
|
||||
// },
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue