diff --git a/lib/module/task/add_task_page.dart b/lib/module/task/add_task_page.dart index d255f40..dd11c29 100644 --- a/lib/module/task/add_task_page.dart +++ b/lib/module/task/add_task_page.dart @@ -1,22 +1,23 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:qinglong_app/base/common_dialog.dart'; import 'package:qinglong_app/base/http/api.dart'; import 'package:qinglong_app/base/http/http.dart'; import 'package:qinglong_app/base/ql_app_bar.dart'; import 'package:qinglong_app/module/task/task_bean.dart'; import 'package:qinglong_app/module/task/task_detail/task_detail_bean.dart'; +import 'package:qinglong_app/module/task/task_viewmodel.dart'; -class AddTaskPage extends StatefulWidget { +class AddTaskPage extends ConsumerStatefulWidget { final TaskBean? taskBean; const AddTaskPage({Key? key, this.taskBean}) : super(key: key); @override - State createState() => _AddTaskPageState(); + ConsumerState createState() => _AddTaskPageState(); } -class _AddTaskPageState extends State { +class _AddTaskPageState extends ConsumerState { late TaskBean taskBean; final TextEditingController _nameController = TextEditingController(); @@ -192,7 +193,8 @@ class _AddTaskPageState extends State { if (response.success) { successDialog(context, "操作成功").then((value) { - Navigator.of(context).pop(response.bean); + ref.read(taskProvider).updateBean(taskBean); + Navigator.of(context).pop(); }); } else { failDialog(context, response.message ??""); diff --git a/lib/module/task/task_page.dart b/lib/module/task/task_page.dart index d34285d..36a9450 100644 --- a/lib/module/task/task_page.dart +++ b/lib/module/task/task_page.dart @@ -33,7 +33,6 @@ class _TaskPageState extends State { Widget build(BuildContext context) { return BaseStateWidget( builder: (ref, model, child) { - return RefreshIndicator( onRefresh: () async { return model.loadData(false); @@ -48,7 +47,7 @@ class _TaskPageState extends State { TaskBean item = model.list[index - 1]; if ((item.name == null || item.name!.contains(_searchKey ?? "")) || (item.command == null || item.command!.contains(_searchKey ?? ""))) { - return TaskItemCell(item); + return TaskItemCell(item, ref); } else { return const SizedBox.shrink(); } @@ -102,23 +101,11 @@ class _TaskPageState extends State { } } -class TaskItemCell extends ConsumerStatefulWidget { +class TaskItemCell extends StatelessWidget { final TaskBean bean; + final WidgetRef ref; - const TaskItemCell(this.bean, {Key? key}) : super(key: key); - - @override - _TaskItemCellState createState() => _TaskItemCellState(); -} - -class _TaskItemCellState extends ConsumerState { - late TaskBean bean; - - @override - void initState() { - bean = widget.bean; - super.initState(); - } + const TaskItemCell(this.bean, this.ref, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -317,15 +304,7 @@ class _TaskItemCellState extends ConsumerState { child: const Text('编辑'), onPressed: () { Navigator.pop(context); - Navigator.of(context).pushNamed(Routes.route_AddTask, arguments: bean).then((value) { - if (value != null) { - var result = value as TaskDetailBean; - bean.name = result.name; - bean.schedule = result.schedule; - bean.command = result.command; - setState(() {}); - } - }); + Navigator.of(context).pushNamed(Routes.route_AddTask, arguments: bean); }, ), CupertinoActionSheetAction( diff --git a/lib/module/task/task_viewmodel.dart b/lib/module/task/task_viewmodel.dart index fb72c11..d78b0a5 100644 --- a/lib/module/task/task_viewmodel.dart +++ b/lib/module/task/task_viewmodel.dart @@ -6,14 +6,13 @@ import 'package:qinglong_app/base/base_viewmodel.dart'; import 'package:qinglong_app/base/http/api.dart'; import 'package:qinglong_app/base/http/http.dart'; import 'package:qinglong_app/module/task/task_bean.dart'; +import 'package:qinglong_app/module/task/task_detail/task_detail_bean.dart'; var taskProvider = ChangeNotifierProvider((ref) => TaskViewModel()); class TaskViewModel extends BaseViewModel { List list = []; - String temp = "sadad"; - Future loadData([isLoading = true]) async { if (isLoading) { loading(notify: true); @@ -74,4 +73,16 @@ class TaskViewModel extends BaseViewModel { failed(result.message, notify: true); } } + + void updateBean(TaskBean result) { + if (result.sId == null) { + loadData(false); + return; + } + TaskBean bean = list.firstWhere((element) => element.sId == result.sId); + bean.name = result.name; + bean.schedule = result.schedule; + bean.command = result.command; + notifyListeners(); + } }