优化定时器

This commit is contained in:
2026-01-15 13:24:02 +08:00
parent d8f335eb4e
commit 9b64fdfa52
3 changed files with 55 additions and 19 deletions

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -40,6 +42,32 @@ class ReservationController extends GetxController with BaseControllerMixin {
customStartTime = DateTime.now();
customEndTime = customStartTime!.add(const Duration(days: 1));
renderData();
startAutoRefresh();
}
@override
void onClose() {
broadcastTitleController.dispose();
broadcastContentController.dispose();
stopAutoRefresh();
super.onClose();
}
void startAutoRefresh() {
// 先停止已存在的定时器,防止重复启动
stopAutoRefresh();
// 创建一个每1分钟执行一次的周期性定时器
_refreshTimer = Timer.periodic(const Duration(minutes: 1), (timer) {
renderData();
});
}
///停止定时器的方法
void stopAutoRefresh() {
// 如果定时器存在并且是激活状态,就取消它
_refreshTimer?.cancel();
_refreshTimer = null; // 置为null方便判断
}
String name = "";
@@ -56,6 +84,7 @@ class ReservationController extends GetxController with BaseControllerMixin {
String jobTipStr = "";
String jobDetailsStr = "";
String jobId = "";
Timer? _refreshTimer;
Future<void> renderData() async {
showLoading("加载中");
@@ -66,7 +95,9 @@ class ReservationController extends GetxController with BaseControllerMixin {
final jobDataResult = BaseModel.fromJson(jobData.data);
if (jobDataResult.code == 0) {
try {
final List<dynamic> dataList = jobDataResult.data is List ? jobDataResult.data : [];
final List<dynamic> dataList = jobDataResult.data is List
? jobDataResult.data
: [];
final firstJob = dataList[0];
jobId = firstJob["id"] ?? "";
@@ -408,11 +439,4 @@ class ReservationController extends GetxController with BaseControllerMixin {
await StorageService.to.clearLoginInfo();
Get.offAll(() => LoginPage());
}
@override
void onClose() {
broadcastTitleController.dispose();
broadcastContentController.dispose();
super.onClose();
}
}

View File

@@ -2,17 +2,11 @@ import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:getx_scaffold/common/common.dart';
import 'package:getx_scaffold/common/services/http.dart';
import 'package:getx_scaffold/getx_scaffold.dart';
import 'package:intl/intl.dart';
import 'package:ln_jq_app/common/model/base_model.dart';
import 'package:ln_jq_app/common/model/station_model.dart';
import 'package:ln_jq_app/common/model/vehicle_info.dart';
import 'package:ln_jq_app/pages/b_page/site/controller.dart';
import 'package:ln_jq_app/pages/c_page/reservation_edit/controller.dart';
import 'package:ln_jq_app/pages/c_page/reservation_edit/view.dart';
import 'package:ln_jq_app/pages/qr_code/view.dart';
import 'package:ln_jq_app/storage_service.dart';
@@ -395,7 +389,6 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
);
var result = BaseModel.fromJson(responseData?.data);
if (responseData == null || result.code != 0) {
dismissLoading();
showToast(result.error);
@@ -546,6 +539,7 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
//用来管理查看预约的弹窗
Worker? _sheetWorker;
bool init = false;
Timer? _refreshTimer;
@override
bool get listenLifecycleEvent => true;
@@ -555,7 +549,7 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
super.onInit();
getUserBindCarInfo();
getSiteList();
startAutoRefresh();
if (!init) {
_setupListener();
init = true;
@@ -565,9 +559,27 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
@override
void dispose() {
_sheetWorker?.dispose();
stopAutoRefresh();
super.dispose();
}
void startAutoRefresh() {
// 先停止已存在的定时器,防止重复启动
stopAutoRefresh();
// 创建一个每1分钟执行一次的周期性定时器
_refreshTimer = Timer.periodic(const Duration(minutes: 1), (timer) {
getSiteList();
});
}
///停止定时器的方法
void stopAutoRefresh() {
// 如果定时器存在并且是激活状态,就取消它
_refreshTimer?.cancel();
_refreshTimer = null; // 置为null方便判断
}
void _setupListener() {
_sheetWorker = ever(shouldShowReservationList, (bool shouldShow) {
if (shouldShow) {
@@ -691,7 +703,9 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
try {
showLoading("加氢站数据加载中");
var responseData = await HttpService.to.get("appointment/station/queryHydrogenSiteInfo");
var responseData = await HttpService.to.get(
"appointment/station/queryHydrogenSiteInfo",
);
if (responseData == null || responseData.data == null) {
showToast('暂时无法获取站点信息');

View File

@@ -3,11 +3,9 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:getx_scaffold/getx_scaffold.dart';
import 'package:ln_jq_app/common/model/station_model.dart';
import 'package:ln_jq_app/pages/qr_code/view.dart';
import 'package:ln_jq_app/storage_service.dart';
import 'controller.dart';
import 'reservation_list_bottomsheet.dart';
///加氢预约
class ReservationPage extends GetView<C_ReservationController> {