You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.2 KiB

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:logger/web.dart';
import '/routes/app_routes.dart';
/// UI交互管理器
/// 负责处理所有与用户界面交互相关的功能
class UiManager {
/// 显示更新确认对话框
/// [latestVersion] 最新版本号
/// [onConfirm] 确认更新的回调函数
void showUpdateDialog(String latestVersion, VoidCallback onConfirm) {
Logger().d('显示更新对话框');
Get.dialog(
AlertDialog(
title: Text('发现新版本 $latestVersion'),
content: const Text('是否立即更新?'),
actions: [
TextButton(
onPressed: () {
Logger().d('取消按钮被点击');
Get.back();
},
child: const Text('取消'),
),
TextButton(
onPressed: () {
Logger().d('更新按钮被点击');
Get.back();
Future.delayed(const Duration(milliseconds: 300));
onConfirm();
},
child: const Text('更新'),
),
],
),
);
}
/// 显示升级成功对话框
/// 引导用户进行设备重新配对
void showUpgradeSuccessDialog() {
Get.dialog(
AlertDialog(
title: Row(
children: [
Icon(
Icons.check_circle,
color: Colors.green[600],
size: 28,
),
SizedBox(width: 12.w),
Text(
'升级成功',
style: TextStyle(
color: Colors.green[700],
fontWeight: FontWeight.w600,
),
),
],
),
content: const Text(
'固件升级已完成!\n\n设备需要重新配对才能正常使用,现在跳转到配对页面吗?',
style: TextStyle(
fontSize: 16,
height: 1.4,
),
),
actions: [
TextButton(
onPressed: () {
Get.back();
},
child: Text(
'稍后配对',
style: TextStyle(color: Colors.grey[600]),
),
),
ElevatedButton(
onPressed: () {
Get.back();
Get.toNamed(Routes.pairing);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green[600],
foregroundColor: Colors.white,
),
child: const Text('立即配对'),
),
],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
barrierDismissible: false,
);
}
/// 显示错误提示
/// [title] 错误标题
/// [message] 错误信息
/// [backgroundColor] 背景颜色,可选
void showErrorSnackbar(String title, String message, {Color? backgroundColor}) {
Get.snackbar(
title,
message,
snackPosition: SnackPosition.BOTTOM,
backgroundColor: backgroundColor ?? Colors.red[600],
colorText: Colors.white,
icon: const Icon(
Icons.error_outline,
color: Colors.white,
),
);
}
}