优化定时器

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/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -40,6 +42,32 @@ class ReservationController extends GetxController with BaseControllerMixin {
customStartTime = DateTime.now(); customStartTime = DateTime.now();
customEndTime = customStartTime!.add(const Duration(days: 1)); customEndTime = customStartTime!.add(const Duration(days: 1));
renderData(); 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 = ""; String name = "";
@@ -56,6 +84,7 @@ class ReservationController extends GetxController with BaseControllerMixin {
String jobTipStr = ""; String jobTipStr = "";
String jobDetailsStr = ""; String jobDetailsStr = "";
String jobId = ""; String jobId = "";
Timer? _refreshTimer;
Future<void> renderData() async { Future<void> renderData() async {
showLoading("加载中"); showLoading("加载中");
@@ -66,7 +95,9 @@ class ReservationController extends GetxController with BaseControllerMixin {
final jobDataResult = BaseModel.fromJson(jobData.data); final jobDataResult = BaseModel.fromJson(jobData.data);
if (jobDataResult.code == 0) { if (jobDataResult.code == 0) {
try { 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]; final firstJob = dataList[0];
jobId = firstJob["id"] ?? ""; jobId = firstJob["id"] ?? "";
@@ -408,11 +439,4 @@ class ReservationController extends GetxController with BaseControllerMixin {
await StorageService.to.clearLoginInfo(); await StorageService.to.clearLoginInfo();
Get.offAll(() => LoginPage()); 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/cupertino.dart';
import 'package:flutter/material.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: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/base_model.dart';
import 'package:ln_jq_app/common/model/station_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/common/model/vehicle_info.dart';
import 'package:ln_jq_app/pages/b_page/site/controller.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/pages/qr_code/view.dart';
import 'package:ln_jq_app/storage_service.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); var result = BaseModel.fromJson(responseData?.data);
if (responseData == null || result.code != 0) { if (responseData == null || result.code != 0) {
dismissLoading(); dismissLoading();
showToast(result.error); showToast(result.error);
@@ -546,6 +539,7 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
//用来管理查看预约的弹窗 //用来管理查看预约的弹窗
Worker? _sheetWorker; Worker? _sheetWorker;
bool init = false; bool init = false;
Timer? _refreshTimer;
@override @override
bool get listenLifecycleEvent => true; bool get listenLifecycleEvent => true;
@@ -555,7 +549,7 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
super.onInit(); super.onInit();
getUserBindCarInfo(); getUserBindCarInfo();
getSiteList(); getSiteList();
startAutoRefresh();
if (!init) { if (!init) {
_setupListener(); _setupListener();
init = true; init = true;
@@ -565,9 +559,27 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
@override @override
void dispose() { void dispose() {
_sheetWorker?.dispose(); _sheetWorker?.dispose();
stopAutoRefresh();
super.dispose(); super.dispose();
} }
void startAutoRefresh() {
// 先停止已存在的定时器,防止重复启动
stopAutoRefresh();
// 创建一个每1分钟执行一次的周期性定时器
_refreshTimer = Timer.periodic(const Duration(minutes: 1), (timer) {
getSiteList();
});
}
///停止定时器的方法
void stopAutoRefresh() {
// 如果定时器存在并且是激活状态,就取消它
_refreshTimer?.cancel();
_refreshTimer = null; // 置为null方便判断
}
void _setupListener() { void _setupListener() {
_sheetWorker = ever(shouldShowReservationList, (bool shouldShow) { _sheetWorker = ever(shouldShowReservationList, (bool shouldShow) {
if (shouldShow) { if (shouldShow) {
@@ -691,7 +703,9 @@ class C_ReservationController extends GetxController with BaseControllerMixin {
try { try {
showLoading("加氢站数据加载中"); 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) { if (responseData == null || responseData.data == null) {
showToast('暂时无法获取站点信息'); showToast('暂时无法获取站点信息');

View File

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