Files
flutter-todos/lib/logic/task_detail_page_logic.dart
2019-07-26 23:03:05 +08:00

128 lines
4.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
);
},
),
);
}
}