mirror of
https://github.com/asjqkkkk/flutter-todos.git
synced 2025-08-06 14:19:24 +08:00
128 lines
4.3 KiB
Dart
128 lines
4.3 KiB
Dart
import 'package:flutter/cupertino.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:todo_list/config/provider_config.dart';
|
||
import 'package:todo_list/database/database.dart';
|
||
import 'package:todo_list/json/task_bean.dart';
|
||
import 'package:todo_list/model/all_model.dart';
|
||
|
||
class TaskDetailPageLogic {
|
||
final TaskDetailPageModel _model;
|
||
|
||
TaskDetailPageLogic(this._model);
|
||
|
||
double _getOverallProgress() {
|
||
int length = _model.taskBean.detailList.length;
|
||
double overallProgress = 0.0;
|
||
for (int i = 0; i < length; i++) {
|
||
overallProgress += _model.taskBean.detailList[i].itemProgress / length;
|
||
}
|
||
_model.taskBean.overallProgress = overallProgress;
|
||
return overallProgress;
|
||
}
|
||
|
||
void refreshProgress(
|
||
TaskDetailBean taskDetailBean, progress, MainPageModel model) {
|
||
taskDetailBean.itemProgress = progress;
|
||
_getOverallProgress();
|
||
model.refresh();
|
||
_model.refresh();
|
||
}
|
||
|
||
//页面退出需要执行的逻辑,isDeleting表示这个页面是否执行了删除当前任务的操作
|
||
void exitPage({bool isDeleting = false}) {
|
||
final context = _model.context;
|
||
final mainPageModel = _model.globalModel.mainPageModel;
|
||
bool needUpdate = needUpdateDatabase();
|
||
if (needUpdate && !isDeleting) {
|
||
//如果一个任务中的所有任务项都完成了,因为主页面都是未完成任务,所以删除主页面的该任务
|
||
if (_model.taskBean.overallProgress >= 1.0) {
|
||
_model.taskBean.finishDate = DateTime.now().toIso8601String();
|
||
//下面这个延时操作,目的如下,如果一个任务完成了,主页面会把这个任务去除掉
|
||
//这个时候主页任务卡片的herotag就消失了,因为herotag不一致,会导致hero动画失效
|
||
Future.delayed(Duration(milliseconds: 800, ), (){
|
||
debugPrint("删除了");
|
||
removeTask(mainPageModel);
|
||
debugPrint("刷新main");
|
||
mainPageModel.refresh();
|
||
});
|
||
}
|
||
_model.taskBean.changeTimes++;
|
||
DBProvider.db.updateTask(_model.taskBean).then((value){
|
||
//如果是从"完成列表"过来
|
||
if (_model.doneTaskPageModel != null) {
|
||
mainPageModel.logic.getTasks();
|
||
_model.doneTaskPageModel.logic.getDoneTasks().then((value) {
|
||
_model.doneTaskPageModel.refresh();
|
||
Navigator.of(context).pop();
|
||
});
|
||
}
|
||
//如果是从"搜索页面"过来
|
||
else if(_model.searchPageModel != null){
|
||
_model.isExiting = true;
|
||
_model.refresh();
|
||
mainPageModel.logic.getTasks();
|
||
_model.searchPageModel.logic.onEditingComplete();
|
||
Navigator.of(context).pop();
|
||
}
|
||
else {
|
||
debugPrint("退出了");
|
||
_model.isExiting = true;
|
||
_model.refresh();
|
||
Navigator.of(context).pop();
|
||
}
|
||
});
|
||
return;
|
||
}
|
||
_model.isExiting = true;
|
||
_model.refresh();
|
||
Navigator.of(context).pop();
|
||
}
|
||
|
||
bool needUpdateDatabase() {
|
||
return _model.progress != _model.taskBean.overallProgress;
|
||
}
|
||
|
||
void deleteTask(MainPageModel mainPageModel) {
|
||
removeTask(mainPageModel);
|
||
DBProvider.db.deleteTask(_model.taskBean.id);
|
||
_model.refresh();
|
||
//如果是从“完成列表”过来
|
||
final doneTaskPageModel = _model.doneTaskPageModel;
|
||
if (doneTaskPageModel != null) {
|
||
doneTaskPageModel.doneTasks.removeAt(doneTaskPageModel.currentTapIndex);
|
||
doneTaskPageModel.refresh();
|
||
}
|
||
//如果是从"搜索界面"过来
|
||
final searchPageModel = _model.searchPageModel;
|
||
if(searchPageModel != null){
|
||
searchPageModel.searchTasks.removeAt(searchPageModel.currentTapIndex);
|
||
searchPageModel.refresh();
|
||
}
|
||
exitPage(isDeleting: true);
|
||
}
|
||
|
||
void removeTask(MainPageModel mainPageModel) {
|
||
for (var i = 0; i < mainPageModel.tasks.length; i++) {
|
||
var task = mainPageModel.tasks[i];
|
||
if(task.id == _model.taskBean.id){
|
||
mainPageModel.tasks.removeAt(i);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
void editTask(MainPageModel mainPageModel) {
|
||
Navigator.of(_model.context).push(
|
||
new CupertinoPageRoute(
|
||
builder: (ctx) {
|
||
return ProviderConfig.getInstance().getEditTaskPage(
|
||
_model.taskBean.taskIconBean,
|
||
taskBean: _model.taskBean,
|
||
taskDetailPageModel: _model,
|
||
);
|
||
},
|
||
),
|
||
);
|
||
}
|
||
}
|