mirror of
https://github.com/asjqkkkk/flutter-todos.git
synced 2025-08-06 14:19:24 +08:00
91 lines
2.4 KiB
Dart
91 lines
2.4 KiB
Dart
import 'dart:async';
|
||
|
||
import 'package:flutter/material.dart';
|
||
import 'package:todo_list/config/api_service.dart';
|
||
import 'package:todo_list/json/task_bean.dart';
|
||
import 'package:todo_list/logic/all_logic.dart';
|
||
import 'package:todo_list/model/done_task_page_model.dart';
|
||
import 'package:todo_list/model/search_page_model.dart';
|
||
|
||
import 'global_model.dart';
|
||
|
||
class TaskDetailPageModel extends ChangeNotifier {
|
||
TaskDetailPageLogic logic;
|
||
BuildContext context;
|
||
GlobalModel globalModel;
|
||
|
||
int heroTag;
|
||
|
||
//是否正在退出中,如果是,任务详情列表就消失,如果不是就展示
|
||
bool isExiting = false;
|
||
|
||
//进入的动画是否完成,完成后左上角的退出按钮就可以显示了,同时任务详情列表也开始展示
|
||
bool isAnimationComplete = false;
|
||
|
||
//这个定时器是为了配合hero动画定时的
|
||
Timer timer;
|
||
TaskBean taskBean;
|
||
|
||
CancelToken cancelToken = CancelToken();
|
||
|
||
|
||
//这个progress用于判断进度是否改变,当被改变后退出的时候就更新数据库
|
||
double progress;
|
||
|
||
//如果不为空,表示是否从"完成列表"过来的
|
||
DoneTaskPageModel doneTaskPageModel;
|
||
|
||
//如果不为空,表示是否从"搜索界面"过来的
|
||
SearchPageModel searchPageModel;
|
||
|
||
TaskDetailPageModel(
|
||
TaskBean taskBean, {
|
||
DoneTaskPageModel doneTaskPageModel,
|
||
SearchPageModel searchPageModel,
|
||
int heroTag,
|
||
}) {
|
||
logic = TaskDetailPageLogic(this);
|
||
this.taskBean = taskBean;
|
||
this.heroTag = heroTag;
|
||
this.doneTaskPageModel = doneTaskPageModel;
|
||
this.searchPageModel = searchPageModel;
|
||
this.progress = taskBean.overallProgress;
|
||
//如果是从"完成列表"进来,就不搞hero动画了
|
||
if (doneTaskPageModel != null) {
|
||
isAnimationComplete = true;
|
||
return;
|
||
}
|
||
timer = Timer(Duration(seconds: 1), () {
|
||
isAnimationComplete = true;
|
||
notifyListeners();
|
||
});
|
||
}
|
||
|
||
void setContext(BuildContext context, GlobalModel globalModel) async {
|
||
if (this.context == null) {
|
||
this.context = context;
|
||
this.globalModel = globalModel;
|
||
}
|
||
}
|
||
|
||
void setGlobalModel(GlobalModel globalModel) {
|
||
if (this.globalModel == null) {
|
||
this.globalModel = globalModel;
|
||
}
|
||
}
|
||
|
||
@override
|
||
void dispose() {
|
||
timer?.cancel();
|
||
if(!cancelToken.isCancelled) cancelToken.cancel();
|
||
super.dispose();
|
||
globalModel.taskDetailPageModel = null;
|
||
debugPrint("TaskDetailPageModel销毁了");
|
||
|
||
}
|
||
|
||
void refresh() {
|
||
notifyListeners();
|
||
}
|
||
}
|