This commit is contained in:
jyuesong
2022-01-13 18:10:46 +08:00
parent e8956e5ff1
commit 3ef05709ea
3 changed files with 25 additions and 33 deletions

View File

@@ -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<AddTaskPage> createState() => _AddTaskPageState();
ConsumerState<AddTaskPage> createState() => _AddTaskPageState();
}
class _AddTaskPageState extends State<AddTaskPage> {
class _AddTaskPageState extends ConsumerState<AddTaskPage> {
late TaskBean taskBean;
final TextEditingController _nameController = TextEditingController();
@@ -192,7 +193,8 @@ class _AddTaskPageState extends State<AddTaskPage> {
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 ??"");

View File

@@ -33,7 +33,6 @@ class _TaskPageState extends State<TaskPage> {
Widget build(BuildContext context) {
return BaseStateWidget<TaskViewModel>(
builder: (ref, model, child) {
return RefreshIndicator(
onRefresh: () async {
return model.loadData(false);
@@ -48,7 +47,7 @@ class _TaskPageState extends State<TaskPage> {
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<TaskPage> {
}
}
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<TaskItemCell> {
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<TaskItemCell> {
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(

View File

@@ -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<TaskBean> list = [];
String temp = "sadad";
Future<void> 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();
}
}