diff --git a/.gitignore b/.gitignore index b6323af..8fe0e1d 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,8 @@ app.*.map.json /android/app/release # FVM Version Cache -.fvm/ \ No newline at end of file +.fvm/ +# AI assist files +.video_agent/ +.mimosa/ +.v2c/ diff --git a/lib/common/api/hard_api.dart b/lib/common/api/hard_api.dart index 7ce60c3..e1b1257 100644 --- a/lib/common/api/hard_api.dart +++ b/lib/common/api/hard_api.dart @@ -189,6 +189,22 @@ abstract class HardApi { return ServiceVerificationRecordPage.fromJson(res.data); } + /// 分页查询当前设备的交易记录;scope=MERCHANT 时按终端所属商户查询全部设备。 + static Future terminalOrderRecordPage({ + required int current, + required int size, + required TerminalOrderRecordQueryRequest request, + }) async { + final res = await HttpManage().dio.post( + '/hard/hard-api/ad/order-record/page', + queryParameters: {'current': current, 'size': size}, + data: request.toJson(), + options: dio.Options(headers: {'DEVICE-ID': '${request.hardId}'}), + ); + if (res.data == null) return null; + return ServiceTerminalOrderRecordPage.fromJson(res.data); + } + /// 创建硬件订单 static Future createHardwareOrder(dynamic formData) async { final res = await HttpManage().dio.post( diff --git a/lib/common/models/api/hard_api_models.dart b/lib/common/models/api/hard_api_models.dart index 029ad3e..a15d5e5 100644 --- a/lib/common/models/api/hard_api_models.dart +++ b/lib/common/models/api/hard_api_models.dart @@ -660,6 +660,7 @@ class VerificationRecordQueryRequest { required this.startDate, required this.endDate, this.verificationType, + this.scope, }); final int hardId; @@ -667,12 +668,118 @@ class VerificationRecordQueryRequest { final String endDate; final String? verificationType; + /// 数据范围:留空仅本机,MERCHANT 按终端所属商户查询全部设备。 + final String? scope; + factory VerificationRecordQueryRequest.fromJson(Map json) => _$VerificationRecordQueryRequestFromJson(json); Map toJson() => _$VerificationRecordQueryRequestToJson(this); } +/// 终端交易记录的服务端查询参数,数据范围由服务端按设备归属解析。 +@JsonSerializable(includeIfNull: false) +class TerminalOrderRecordQueryRequest { + const TerminalOrderRecordQueryRequest({ + required this.hardId, + required this.startDate, + required this.endDate, + this.scope, + this.orderStatusCodes, + this.hourType, + }); + + final int hardId; + final String startDate; + final String endDate; + + /// 数据范围:留空仅本机,MERCHANT 按终端所属商户查询全部设备。 + final String? scope; + + /// 订单状态编码集合,留空查询全部状态。 + final List? orderStatusCodes; + + /// 用餐时段编码,留空或 -1 不区分。 + final String? hourType; + + factory TerminalOrderRecordQueryRequest.fromJson( + Map json) => + _$TerminalOrderRecordQueryRequestFromJson(json); + + Map toJson() => + _$TerminalOrderRecordQueryRequestToJson(this); +} + +/// 交易记录远端行只承载列表展示字段,金额与时间口径和本地订单一致。 +@JsonSerializable() +class ServiceTerminalOrderRecord { + const ServiceTerminalOrderRecord({ + required this.orderId, + required this.orderNo, + required this.orderType, + required this.orderTypeName, + required this.orderStatus, + required this.orderStatusName, + required this.payType, + required this.payTypeName, + required this.username, + required this.productDesc, + required this.totalPrice, + required this.extraPrice, + required this.payPrice, + this.userDeptName, + this.hourType, + this.hardName, + this.createTime, + }); + + /// 后端 Long 为避免跨端精度丢失可能序列化为字符串,终端同时兼容数字返回。 + @JsonKey(fromJson: JsonTool.anyToInt) + final int orderId; + final String orderNo; + final String orderType; + final String orderTypeName; + final String orderStatus; + final String orderStatusName; + final String payType; + final String payTypeName; + final String username; + final String? userDeptName; + final String productDesc; + final String? hourType; + + /// 完成交易的设备名称;全部数据范围下用于区分不同机器。 + final String? hardName; + + /// 金额仍按整数分使用,同时兼容部分环境将数值序列化为字符串。 + @JsonKey(fromJson: JsonTool.anyToInt) + final int totalPrice; + @JsonKey(fromJson: JsonTool.anyToInt) + final int extraPrice; + @JsonKey(fromJson: JsonTool.anyToInt) + final int payPrice; + final DateTime? createTime; + + factory ServiceTerminalOrderRecord.fromJson(Map json) => + _$ServiceTerminalOrderRecordFromJson(json); + + Map toJson() => _$ServiceTerminalOrderRecordToJson(this); +} + +@JsonSerializable() +class ServiceTerminalOrderRecordPage extends ServicePageBase { + ServiceTerminalOrderRecordPage({this.records}); + + final List? records; + + factory ServiceTerminalOrderRecordPage.fromJson( + Map json) => + _$ServiceTerminalOrderRecordPageFromJson(json); + + @override + Map toJson() => _$ServiceTerminalOrderRecordPageToJson(this); +} + /// 核销记录只承载列表展示字段,不复用本地订单实体,避免混淆远端与本地状态。 @JsonSerializable() class ServiceVerificationRecord { diff --git a/lib/common/models/api/hard_api_models.g.dart b/lib/common/models/api/hard_api_models.g.dart index 1484834..63f7735 100644 --- a/lib/common/models/api/hard_api_models.g.dart +++ b/lib/common/models/api/hard_api_models.g.dart @@ -368,6 +368,7 @@ VerificationRecordQueryRequest _$VerificationRecordQueryRequestFromJson( startDate: json['startDate'] as String, endDate: json['endDate'] as String, verificationType: json['verificationType'] as String?, + scope: json['scope'] as String?, ); Map _$VerificationRecordQueryRequestToJson( @@ -385,9 +386,112 @@ Map _$VerificationRecordQueryRequestToJson( } writeNotNull('verificationType', instance.verificationType); + writeNotNull('scope', instance.scope); return val; } +TerminalOrderRecordQueryRequest _$TerminalOrderRecordQueryRequestFromJson( + Map json) => + TerminalOrderRecordQueryRequest( + hardId: (json['hardId'] as num).toInt(), + startDate: json['startDate'] as String, + endDate: json['endDate'] as String, + scope: json['scope'] as String?, + orderStatusCodes: (json['orderStatusCodes'] as List?) + ?.map((e) => e as String) + .toList(), + hourType: json['hourType'] as String?, + ); + +Map _$TerminalOrderRecordQueryRequestToJson( + TerminalOrderRecordQueryRequest instance) { + final val = { + 'hardId': instance.hardId, + 'startDate': instance.startDate, + 'endDate': instance.endDate, + }; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('scope', instance.scope); + writeNotNull('orderStatusCodes', instance.orderStatusCodes); + writeNotNull('hourType', instance.hourType); + return val; +} + +ServiceTerminalOrderRecord _$ServiceTerminalOrderRecordFromJson( + Map json) => + ServiceTerminalOrderRecord( + orderId: JsonTool.anyToInt(json['orderId']), + orderNo: json['orderNo'] as String, + orderType: json['orderType'] as String, + orderTypeName: json['orderTypeName'] as String, + orderStatus: json['orderStatus'] as String, + orderStatusName: json['orderStatusName'] as String, + payType: json['payType'] as String, + payTypeName: json['payTypeName'] as String, + username: json['username'] as String, + productDesc: json['productDesc'] as String, + totalPrice: JsonTool.anyToInt(json['totalPrice']), + extraPrice: JsonTool.anyToInt(json['extraPrice']), + payPrice: JsonTool.anyToInt(json['payPrice']), + userDeptName: json['userDeptName'] as String?, + hourType: json['hourType'] as String?, + hardName: json['hardName'] as String?, + createTime: json['createTime'] == null + ? null + : DateTime.parse(json['createTime'] as String), + ); + +Map _$ServiceTerminalOrderRecordToJson( + ServiceTerminalOrderRecord instance) => + { + 'orderId': instance.orderId, + 'orderNo': instance.orderNo, + 'orderType': instance.orderType, + 'orderTypeName': instance.orderTypeName, + 'orderStatus': instance.orderStatus, + 'orderStatusName': instance.orderStatusName, + 'payType': instance.payType, + 'payTypeName': instance.payTypeName, + 'username': instance.username, + 'userDeptName': instance.userDeptName, + 'productDesc': instance.productDesc, + 'hourType': instance.hourType, + 'hardName': instance.hardName, + 'totalPrice': instance.totalPrice, + 'extraPrice': instance.extraPrice, + 'payPrice': instance.payPrice, + 'createTime': instance.createTime?.toIso8601String(), + }; + +ServiceTerminalOrderRecordPage _$ServiceTerminalOrderRecordPageFromJson( + Map json) => + ServiceTerminalOrderRecordPage( + records: (json['records'] as List?) + ?.map((e) => + ServiceTerminalOrderRecord.fromJson(e as Map)) + .toList(), + ) + ..current = (json['current'] as num).toInt() + ..pages = (json['pages'] as num).toInt() + ..size = (json['size'] as num).toInt() + ..total = (json['total'] as num).toInt(); + +Map _$ServiceTerminalOrderRecordPageToJson( + ServiceTerminalOrderRecordPage instance) => + { + 'current': instance.current, + 'pages': instance.pages, + 'size': instance.size, + 'total': instance.total, + 'records': instance.records, + }; + ServiceVerificationRecord _$ServiceVerificationRecordFromJson( Map json) => ServiceVerificationRecord( diff --git a/lib/common/models/index.dart b/lib/common/models/index.dart index 2fd08f6..f94c093 100644 --- a/lib/common/models/index.dart +++ b/lib/common/models/index.dart @@ -16,6 +16,7 @@ export './page/order_page_models.dart'; export './page/product_meal_period_models.dart'; export './page/reservation_menu_page_models.dart'; export './page/setting_page_enum_models.dart'; +export './page/terminal_data_scope.dart'; export './page/verification_record_page_models.dart'; export './page/wallet_page_enum_models.dart'; diff --git a/lib/common/models/page/terminal_data_scope.dart b/lib/common/models/page/terminal_data_scope.dart new file mode 100644 index 0000000..7fbfc32 --- /dev/null +++ b/lib/common/models/page/terminal_data_scope.dart @@ -0,0 +1,16 @@ +/// 记录列表的数据范围。 +/// +/// [device] 仅查询本机数据;[merchant] 按当前终端权限(所属商户)查询全部设备数据, +/// 需要网络可用,服务端负责解析设备归属,客户端不指定商户范围。 +enum TerminalDataScope { + device('本机数据'), + merchant('全部数据'); + + final String title; + + const TerminalDataScope(this.title); + + /// 服务端接口的 scope 协议值;本机范围沿用接口默认值,不额外传参。 + String? get requestCode => + this == TerminalDataScope.merchant ? 'MERCHANT' : null; +} diff --git a/lib/common/widgets/app/terminal_data_scope_tabs.dart b/lib/common/widgets/app/terminal_data_scope_tabs.dart new file mode 100644 index 0000000..f84d846 --- /dev/null +++ b/lib/common/widgets/app/terminal_data_scope_tabs.dart @@ -0,0 +1,87 @@ +import 'package:ducafe_ui_core/ducafe_ui_core.dart'; +import 'package:flutter/material.dart'; +import 'package:forui/forui.dart'; + +import 'package:pj_supermarket_cloud/common/index.dart'; + +/// 记录列表顶部的数据范围切换(本机数据 / 全部数据)。 +/// +/// 采用与状态筛选一致的胶囊语言:外层灰底承载选项,选中项以主题色填充, +/// 触控高度不小于 44,选中态同时用颜色和字重表达,避免仅靠颜色区分。 +class TerminalDataScopeTabs extends StatelessWidget { + const TerminalDataScopeTabs({ + super.key, + required this.scope, + required this.onChanged, + }); + + final TerminalDataScope scope; + final ValueChanged onChanged; + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(3.w), + decoration: BoxDecoration( + color: XfjDesignTokens.control, + borderRadius: BorderRadius.circular(XfjDesignTokens.controlRadius), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: TerminalDataScope.values + .map( + (item) => _ScopeTabButton( + label: item.title, + selected: scope == item, + onTap: () => onChanged(item), + ), + ) + .toList(), + ), + ); + } +} + +class _ScopeTabButton extends StatelessWidget { + const _ScopeTabButton({ + required this.label, + required this.selected, + required this.onTap, + }); + + final String label; + final bool selected; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + final theme = FTheme.of(context); + return Semantics( + button: true, + selected: selected, + label: '数据范围:$label', + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(XfjDesignTokens.controlRadius - 2), + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + curve: Curves.easeOut, + constraints: BoxConstraints(minHeight: 40.h), + padding: EdgeInsets.symmetric(horizontal: 20.w), + decoration: BoxDecoration( + color: selected ? XfjDesignTokens.primary : Colors.transparent, + borderRadius: + BorderRadius.circular(XfjDesignTokens.controlRadius - 2), + ), + child: Text( + label, + style: theme.typography.base.copyWith( + color: selected ? Colors.white : const Color(0xFF344054), + fontWeight: selected ? FontWeight.w700 : FontWeight.w600, + ), + ).center(), + ), + ), + ); + } +} diff --git a/lib/common/widgets/index.dart b/lib/common/widgets/index.dart index 743a179..f7908f6 100644 --- a/lib/common/widgets/index.dart +++ b/lib/common/widgets/index.dart @@ -19,6 +19,7 @@ export './app/app_wallet_selector.dart'; export './app/terminal_shell.dart'; export './app/terminal_device_status.dart'; export './app/terminal_toolbar.dart'; +export './app/terminal_data_scope_tabs.dart'; export './cashier/cashier_workspace.dart'; export './face/face_recognition_preview_layer.dart'; diff --git a/lib/pages/terminal/order_history/controller.dart b/lib/pages/terminal/order_history/controller.dart index 8e39e7c..4c024b0 100644 --- a/lib/pages/terminal/order_history/controller.dart +++ b/lib/pages/terminal/order_history/controller.dart @@ -21,6 +21,9 @@ class OrderHistoryController extends GetxController { Rx currentStatus = OrderStatus.TOTAL.obs; + /// 列表数据范围;全部数据按终端所属商户在线查询,本机数据读本地数据库。 + final scope = TerminalDataScope.device.obs; + RxList tabList = [].obs; RxList saleReasons = [].obs; @@ -100,6 +103,10 @@ class OrderHistoryController extends GetxController { // 订单列表 Future getOrder() async { _collapseExpandedOrder(); + if (scope.value == TerminalDataScope.merchant) { + await _getRemoteOrder(); + return; + } final appSetting = await AppSettingTool.getSysSetting(); final sysType = appSetting.sysType.name; final orderDao = appC.dataBase.getOrderDao; @@ -138,11 +145,160 @@ class OrderHistoryController extends GetxController { orderList.value = list; } - /// 展开列表订单并按需查询本地购物车;再次点击同一笔订单时收起。 + /// 切换数据范围;全部数据依赖网络,离线时提示并保持本机数据。 + Future doScope(TerminalDataScope target) async { + if (scope.value == target) return; + if (target == TerminalDataScope.merchant && !AppNetworkTool.isAutoNetwork()) { + Toast.error(msg: '当前没有网络,无法查询全部数据'); + return; + } + scope.value = target; + currentPage.value = 1; + EasyLoading.show( + status: '切换中...', + maskType: EasyLoadingMaskType.black, + ); + try { + await getTotalList(); + await getOrder(); + } finally { + EasyLoading.dismiss(); + } + } + + /// 全部数据范围:按终端权限在线分页查询,服务端负责解析商户范围。 + Future _getRemoteOrder() async { + final appSetting = await AppSettingTool.getSysSetting(); + final hardId = int.tryParse(appSetting.serviceId ?? ''); + if (hardId == null) { + totalPage.value = 0; + orderList.clear(); + Toast.error(msg: '设备尚未绑定,请先前往设置完成绑定'); + return; + } + final orderStatusCodes = currentStatus.value == OrderStatus.TOTAL + ? null + : [currentStatus.value.code]; + String? hourTypeCode = hourType.value.code; + if (appSetting.sysType == SysType.SUPERMARKET) { + hourTypeCode = null; + } + try { + final response = await HardApi.terminalOrderRecordPage( + current: currentPage.value, + size: pageSize.value, + request: TerminalOrderRecordQueryRequest( + hardId: hardId, + startDate: DateUtil.formatDate( + selectDateTime[0], + format: DateFormats.y_mo_d, + ), + endDate: DateUtil.formatDate( + selectDateTime[1], + format: DateFormats.y_mo_d, + ), + scope: scope.value.requestCode, + orderStatusCodes: orderStatusCodes, + hourType: hourTypeCode, + ), + ); + // 服务端暂不支持关键词模糊查询,与核销记录一致仅过滤当前页。 + final keyword = keywordC.text.trim().toLowerCase(); + final records = (response?.records ?? const []) + .where((record) => + keyword.isEmpty || + record.orderNo.toLowerCase().contains(keyword) || + record.username.toLowerCase().contains(keyword) || + record.productDesc.toLowerCase().contains(keyword)) + .map(_toOrderEntity) + .toList(growable: false); + totalPage.value = response?.total ?? 0; + orderList.value = records; + } catch (error, stack) { + totalPage.value = 0; + orderList.clear(); + Toast.error(msg: '查询全部数据失败,请检查网络后重试'); + logger.e('|交易记录|查询全部数据失败|error:$error|stack:$stack|'); + } + } + + /// 远端交易记录映射为本地订单实体;枚举缺码时按语义就近降级。 + OrderEntity _toOrderEntity(ServiceTerminalOrderRecord record) { + final orderType = OrderType.values.firstWhere( + (item) => item.code == record.orderType, + orElse: () => OrderType.BELOW, + ); + final payType = OrderPayType.values.firstWhere( + (item) => item.code == record.payType, + orElse: () => OrderPayType.WALLET_DEFAULT, + ); + final status = OrderStatus.values.firstWhere( + (item) => item.code == record.orderStatus, + orElse: () => OrderStatus.PAY, + ); + return OrderEntity( + uniqueCode: record.orderNo, + serviceUniqueCode: '${record.orderId}', + sysType: appSetting.sysType, + userCode: '', + username: record.username, + hourType: record.hourType, + price: record.totalPrice, + extraPrice: record.extraPrice, + payPrice: record.payPrice, + type: orderType, + status: status, + payType: payType, + productDesc: record.productDesc, + count: 0, + weight: 0, + createTime: record.createTime ?? DateTime.now(), + ); + } + + /// 远端购物车快照映射为本地购物车实体,供展开明细与详情抽屉复用展示。 + Future> _loadRemoteShopCards(int orderId) async { + final cars = await HardApi.getCarByOrderId({'orderId': orderId}) ?? []; + return cars + .map( + (car) => ShopCardEntity( + orderId: orderId, + productServiceUniqueCode: car.productId ?? '', + productName: car.productName ?? '未知商品', + productPic: car.productPic ?? '', + productPrice: car.productPrice ?? 0, + nature: car.productNature == ProductNature.WEIGHT.code + ? ProductNature.WEIGHT + : ProductNature.DEFAULT, + productNumber: car.productCount ?? 0, + productWidget: car.productWeight ?? 0, + totalPrice: car.totalPrice ?? 0, + isPriceIncreased: false, + ), + ) + .toList(growable: false); + } + + /// 展开列表订单并按需查询购物车;再次点击同一笔订单时收起。 + /// 本机订单读本地库,全部数据范围的远端订单在线取购物车快照。 Future toggleExpandedOrder(OrderEntity order) async { final id = order.id; if (id == null) { - Toast.error(msg: '订单尚未写入本地数据库,无法查询购物车明细'); + if (scope.value != TerminalDataScope.merchant) { + Toast.error(msg: '订单尚未写入本地数据库,无法查询购物车明细'); + return; + } + final remoteId = int.tryParse(order.serviceUniqueCode); + if (remoteId == null) { + Toast.error(msg: '订单缺少服务端标识,无法查询购物车明细'); + return; + } + if (expandedOrderId.value == remoteId) { + _collapseExpandedOrder(); + return; + } + expandedOrderId.value = remoteId; + await _loadExpandedRemoteOrder(remoteId); return; } if (expandedOrderId.value == id) { @@ -153,9 +309,38 @@ class OrderHistoryController extends GetxController { await _loadExpandedOrder(id); } + /// 全部数据范围下从服务端加载展开订单的购物车明细。 + Future _loadExpandedRemoteOrder(int orderId) async { + final requestId = ++_expandedDetailRequestId; + expandedDetailStatus.value = OrderRecordDetailLoadStatus.loading; + expandedDetailError.value = ''; + expandedShopCardList.clear(); + try { + final items = await _loadRemoteShopCards(orderId); + if (requestId != _expandedDetailRequestId || + expandedOrderId.value != orderId) { + return; + } + expandedShopCardList.assignAll(items); + expandedDetailStatus.value = OrderRecordDetailLoadStatus.success; + } catch (error, stack) { + if (requestId != _expandedDetailRequestId || + expandedOrderId.value != orderId) { + return; + } + expandedDetailError.value = '服务端购物车读取失败,请检查网络后重试'; + expandedDetailStatus.value = OrderRecordDetailLoadStatus.failure; + logger.e('|交易记录|展开远端购物车失败|orderId:$orderId|error:$error|stack:$stack|'); + } + } + Future retryExpandedOrder() async { final id = expandedOrderId.value; if (id == null) return; + if (scope.value == TerminalDataScope.merchant) { + await _loadExpandedRemoteOrder(id); + return; + } await _loadExpandedOrder(id); } @@ -257,7 +442,10 @@ class OrderHistoryController extends GetxController { } Future getTotalList() async { - final total = await _getTotal(); + // 全部数据范围没有本机统计口径,状态页签不展示数量。 + final total = scope.value == TerminalDataScope.merchant + ? {} + : await _getTotal(); List tabs = OrderStatus.visibleList() .map((v) => OrderHistoryTableItem(status: v)) .toList(); @@ -360,10 +548,12 @@ class OrderHistoryController extends GetxController { }; final data = await HardApi.timeLimitRefund(pa); if (!data) throw Error(); - // 修改本地订单为退款 + // 修改本地订单为退款;远端订单无本地记录,仅刷新列表 v.status = OrderStatus.REFUND; - final orderDao = appC.dataBase.getOrderDao; - await orderDao.edit(v); + if (v.id != null) { + final orderDao = appC.dataBase.getOrderDao; + await orderDao.edit(v); + } await getTotalList(); await getOrder(); TtsManage.speak("退款成功总金额$price元"); @@ -378,13 +568,31 @@ class OrderHistoryController extends GetxController { ); } - /// 打开订单详情抽屉,并从本地数据库加载商品明细。 + /// 打开订单详情抽屉;本机订单读本地库,远端订单在线取购物车快照。 Future doDetail(OrderEntity v) async { selectedOrder.value = v; final id = v.id; - selectedShopCardList.value = id == null - ? [] - : await appC.dataBase.getShopCardDao.findByOrderId(id); + if (id != null) { + selectedShopCardList.value = + await appC.dataBase.getShopCardDao.findByOrderId(id); + return; + } + if (scope.value != TerminalDataScope.merchant) { + selectedShopCardList.value = []; + return; + } + final remoteId = int.tryParse(v.serviceUniqueCode); + if (remoteId == null) { + selectedShopCardList.value = []; + return; + } + try { + selectedShopCardList.value = await _loadRemoteShopCards(remoteId); + } catch (error, stack) { + selectedShopCardList.value = []; + logger.e('|交易记录|远端详情购物车失败|orderId:$remoteId|error:$error|stack:$stack|'); + Toast.error(msg: '服务端购物车读取失败,请检查网络后重试'); + } } void closeDetail() { diff --git a/lib/pages/terminal/order_history/view.dart b/lib/pages/terminal/order_history/view.dart index b88e1a0..d06ff4b 100644 --- a/lib/pages/terminal/order_history/view.dart +++ b/lib/pages/terminal/order_history/view.dart @@ -83,6 +83,13 @@ class OrderHistoryPage extends GetView { SizedBox(height: 16.h), Row( children: [ + Obx( + () => TerminalDataScopeTabs( + scope: controller.scope.value, + onChanged: controller.doScope, + ), + ), + SizedBox(width: 12.w), Obx( () => Row( children: controller.tabList @@ -90,6 +97,8 @@ class OrderHistoryPage extends GetView { (tab) => _StatusFilterButton( label: tab.status.title, count: tab.total, + showCount: controller.scope.value == + TerminalDataScope.device, selected: controller.currentStatus.value == tab.status, onTap: () => controller.doTab(tab.status), @@ -489,6 +498,7 @@ class _StatusFilterButton extends StatelessWidget { required this.count, required this.selected, required this.onTap, + this.showCount = true, }); final String label; @@ -496,6 +506,9 @@ class _StatusFilterButton extends StatelessWidget { final bool selected; final VoidCallback onTap; + /// 全部数据范围没有本机统计口径,隐藏数量角标。 + final bool showCount; + @override Widget build(BuildContext context) { final theme = FTheme.of(context); @@ -518,22 +531,25 @@ class _StatusFilterButton extends StatelessWidget { fontWeight: FontWeight.w700, ), ), - SizedBox(width: 8.w), - Container( - padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 2.h), - decoration: BoxDecoration( - color: selected - ? Colors.white.withValues(alpha: 0.2) - : Colors.white, - borderRadius: BorderRadius.circular(999), - ), - child: Text( - '$count', - style: theme.typography.sm.copyWith( - color: selected ? Colors.white : XfjDesignTokens.muted, + if (showCount) ...[ + SizedBox(width: 8.w), + Container( + padding: + EdgeInsets.symmetric(horizontal: 8.w, vertical: 2.h), + decoration: BoxDecoration( + color: selected + ? Colors.white.withValues(alpha: 0.2) + : Colors.white, + borderRadius: BorderRadius.circular(999), + ), + child: Text( + '$count', + style: theme.typography.sm.copyWith( + color: selected ? Colors.white : XfjDesignTokens.muted, + ), ), ), - ), + ], ], ), ), diff --git a/lib/pages/terminal/verification_records/controller.dart b/lib/pages/terminal/verification_records/controller.dart index 36bd178..418b611 100644 --- a/lib/pages/terminal/verification_records/controller.dart +++ b/lib/pages/terminal/verification_records/controller.dart @@ -11,6 +11,10 @@ class VerificationRecordsController extends GetxController { final status = VerificationRecordLoadStatus.loading.obs; final records = [].obs; + + /// 列表数据范围;本机数据仅当前设备,全部数据按终端所属商户在线查询。 + final scope = TerminalDataScope.device.obs; + final selectDateTime = [ DateTime.now(), DateTime.now(), @@ -135,6 +139,7 @@ class VerificationRecordsController extends GetxController { format: DateFormats.y_mo_d, ), verificationType: verificationRecordReservationType, + scope: scope.value.requestCode, ), ); if (response == null) throw StateError('服务端未返回核销记录'); @@ -153,6 +158,18 @@ class VerificationRecordsController extends GetxController { } } + /// 切换数据范围;全部数据依赖网络,离线时提示并保持本机数据。 + Future changeScope(TerminalDataScope target) async { + if (scope.value == target) return; + if (target == TerminalDataScope.merchant && + !AppNetworkTool.isAutoNetwork()) { + Toast.error(msg: '当前没有网络,无法查询全部数据'); + return; + } + scope.value = target; + await loadRecords(resetPage: true); + } + Future changeDateRange(List? dates) async { if (dates == null || dates.length < 2) return; selectDateTime.assignAll(dates.take(2)); diff --git a/lib/pages/terminal/verification_records/view.dart b/lib/pages/terminal/verification_records/view.dart index 2deaefe..fb66750 100644 --- a/lib/pages/terminal/verification_records/view.dart +++ b/lib/pages/terminal/verification_records/view.dart @@ -100,12 +100,19 @@ class VerificationRecordsPage extends GetView { ), ), SizedBox(width: 10.w), - Text( - '仅显示当前设备已完成的预约核销订单', - style: theme.typography.sm.copyWith( - color: XfjDesignTokens.muted, - ), - ), + Obx(() => Text( + controller.scope.value == TerminalDataScope.device + ? '仅显示当前设备已完成的预约核销订单' + : '按当前终端权限显示全部设备的预约核销订单', + style: theme.typography.sm.copyWith( + color: XfjDesignTokens.muted, + ), + )), + SizedBox(width: 10.w), + Obx(() => TerminalDataScopeTabs( + scope: controller.scope.value, + onChanged: controller.changeScope, + )), SizedBox(width: 10.w), Obx( () => Text( diff --git a/pubspec.lock b/pubspec.lock index 0d9cebb..d9841a8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: _fe_analyzer_shared sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "76.0.0" _macros: @@ -19,47 +19,47 @@ packages: description: name: analyzer sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.11.0" android_id: dependency: "direct main" description: name: android_id - sha256: "748ba5f93dd5c497e675d8eaa1404346ce4d1794464ea654576ff192d153b92a" - url: "https://pub.flutter-io.cn" + sha256: f6489be4c4380cdb55a99db5b03764d936e84e9d5258a26571aa500bd1159fe0 + url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.1" archive: dependency: transitive description: name: archive - sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742" - url: "https://pub.flutter-io.cn" + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff + url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.9" args: dependency: transitive description: name: args - sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 - url: "https://pub.flutter-io.cn" + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.0" async: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.flutter-io.cn" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" background_downloader: dependency: "direct main" description: name: background_downloader sha256: "0873a939f5a301872cb7614e12f759fbccef2e3ed0d0d37b540dde7611275b12" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.12.3" barcode: @@ -67,31 +67,31 @@ packages: description: name: barcode sha256: "7b6729c37e3b7f34233e2318d866e8c48ddb46c1f7ad01ff7bb2a8de1da2b9f4" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.9" bidi: dependency: transitive description: name: bidi - sha256: "9a712c7ddf708f7c41b1923aa83648a3ed44cfd75b04f72d598c45e5be287f9d" - url: "https://pub.flutter-io.cn" + sha256: "77f475165e94b261745cf1032c751e2032b8ed92ccb2bf5716036db79320637d" + url: "https://pub.dev" source: hosted - version: "2.0.12" + version: "2.0.13" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.flutter-io.cn" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: name: build sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.2" build_config: @@ -99,23 +99,23 @@ packages: description: name: build_config sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.2" build_daemon: dependency: transitive description: name: build_daemon - sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" - url: "https://pub.flutter-io.cn" + sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 + url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.1.1" build_resolvers: dependency: transitive description: name: build_resolvers sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.4" build_runner: @@ -123,7 +123,7 @@ packages: description: name: build_runner sha256: "74691599a5bc750dc96a6b4bfd48f7d9d66453eab04c7f4063134800d6a5c573" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.14" build_runner_core: @@ -131,7 +131,7 @@ packages: description: name: build_runner_core sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "8.0.0" built_collection: @@ -139,23 +139,23 @@ packages: description: name: built_collection sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - sha256: "8b158ab94ec6913e480dc3f752418348b5ae099eb75868b5f4775f0572999c61" - url: "https://pub.flutter-io.cn" + sha256: f87ea98192116f7093cb214551ce1929caae0681fdba282b3d8b4462adee7bb7 + url: "https://pub.dev" source: hosted - version: "8.9.4" + version: "8.13.0" cached_network_image: dependency: "direct main" description: name: cached_network_image sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.4.1" cached_network_image_platform_interface: @@ -163,7 +163,7 @@ packages: description: name: cached_network_image_platform_interface sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.1.1" cached_network_image_web: @@ -171,23 +171,23 @@ packages: description: name: cached_network_image_web sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.1" characters: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.flutter-io.cn" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" charcode: dependency: transitive description: name: charcode sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.0" checked_yaml: @@ -195,63 +195,63 @@ packages: description: name: checked_yaml sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.3" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.flutter-io.cn" + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" code_builder: dependency: transitive description: name: code_builder - sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" - url: "https://pub.flutter-io.cn" + sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d" + url: "https://pub.dev" source: hosted - version: "4.10.1" + version: "4.11.1" collection: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf - url: "https://pub.flutter-io.cn" + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" common_utils: dependency: "direct main" description: name: common_utils sha256: c26884339b13ff99b0739e56f4b02090c84054ed9dd3a045435cd24e7b99c2c1 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" connectivity_plus: dependency: "direct main" description: name: connectivity_plus - sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27" - url: "https://pub.flutter-io.cn" + sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec + url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.1.5" connectivity_plus_platform_interface: dependency: transitive description: name: connectivity_plus_platform_interface - sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" - url: "https://pub.flutter-io.cn" + sha256: "3c09627c536d22fd24691a905cdd8b14520de69da52c7a97499c8be5284a32ed" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.0" convert: dependency: transitive description: name: convert sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.2" cron: @@ -259,23 +259,23 @@ packages: description: name: cron sha256: "2af3de2cabcc81346c00ff9db06296cdaf37ad17bd6f97fb63777a9ddefcacf3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.6.2" crypto: dependency: "direct main" description: name: crypto - sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" - url: "https://pub.flutter-io.cn" + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.7" csslib: dependency: transitive description: name: csslib sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" cupertino_icons: @@ -283,7 +283,7 @@ packages: description: name: cupertino_icons sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.8" dart_style: @@ -291,39 +291,39 @@ packages: description: name: dart_style sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.8" data_table_2: dependency: "direct main" description: name: data_table_2 - sha256: "5a540a7b64809eb46b3809c67fc6faa29ca217864341294df66b1f0eb040c20e" - url: "https://pub.flutter-io.cn" + sha256: cb31d465dcf1e1598a662d06d3d2c16c73700ae9e837a3d91588f1dda7519abc + url: "https://pub.dev" source: hosted - version: "2.5.18" + version: "2.7.2" dbus: dependency: transitive description: name: dbus - sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" - url: "https://pub.flutter-io.cn" + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" decimal: dependency: transitive description: name: decimal - sha256: "4140a688f9e443e2f4de3a1162387bf25e1ac6d51e24c9da263f245210f41440" - url: "https://pub.flutter-io.cn" + sha256: "2c3c8b74f2948066d3f42585477aec9cfc48fefd7a723a4d4274a6c71a5c0df7" + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.2.6" dio: dependency: "direct main" description: name: dio sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.7.0" dio_web_adapter: @@ -331,17 +331,17 @@ packages: description: name: dio_web_adapter sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.0" drago_pos_printer: dependency: "direct main" description: name: drago_pos_printer - sha256: "3ad14d15872204541a964005005a535ecf78f052a9d295b1703fddebc3e50def" - url: "https://pub.flutter-io.cn" + sha256: "8b601221dcf804f662228a6ae68d0c644543b6df0026e40808fc0fbf2c19871c" + url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" drago_usb_printer: dependency: "direct overridden" description: @@ -354,7 +354,7 @@ packages: description: name: ducafe_ui_core sha256: "92ff9b05654e1b5ae2adbeac7227c669655da73f134bede75ad9aa1c505af904" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.6" dylib: @@ -362,23 +362,23 @@ packages: description: name: dylib sha256: bf609b3eb6492a3309b3d1dbe8f83a4031de5535dd7686be33487051cc760bb0 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.3.3" equatable: dependency: "direct main" description: name: equatable - sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" - url: "https://pub.flutter-io.cn" + sha256: "3bce007a596ff8b3119c45d68aaef631272537c03d30e5d4534dd24bf4c5eaa2" + url: "https://pub.dev" source: hosted - version: "2.0.7" + version: "2.1.0" event_bus: dependency: transitive description: name: event_bus sha256: "1a55e97923769c286d295240048fc180e7b0768902c3c2e869fe059aafa15304" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.1" external_path: @@ -386,31 +386,31 @@ packages: description: name: external_path sha256: "68a18a2aa51ec012d7013ea2a80305dc5372f3577a2bbcc7dcc5550b25a5a73b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.0" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.flutter-io.cn" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" - url: "https://pub.flutter-io.cn" + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.2.0" file: dependency: transitive description: name: file sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.0.1" fixnum: @@ -418,7 +418,7 @@ packages: description: name: fixnum sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" floor: @@ -426,7 +426,7 @@ packages: description: name: floor sha256: "52a8eac2c8d274e7c0c54251226f59786bb5b749365a2d8537d8095aa5132d92" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.2" floor_annotation: @@ -434,7 +434,7 @@ packages: description: name: floor_annotation sha256: a40949580a7ab0eee572686e2d3b1638fd6bd6a753e661d792ab4236b365b23b - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.0" floor_generator: @@ -442,7 +442,7 @@ packages: description: name: floor_generator sha256: "1499b3ab878a807e6fbe6f140dc014124845cd1df3090a113aae5fa7577a1e77" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.0" flutter: @@ -455,7 +455,7 @@ packages: description: name: flutter_cache_manager sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.4.1" flutter_easyloading: @@ -463,7 +463,7 @@ packages: description: name: flutter_easyloading sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.5" flutter_html: @@ -471,7 +471,7 @@ packages: description: name: flutter_html sha256: "38a2fd702ffdf3243fb7441ab58aa1bc7e6922d95a50db76534de8260638558d" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.0" flutter_libserialport: @@ -479,7 +479,7 @@ packages: description: name: flutter_libserialport sha256: d193b5ac819db6540d20cc8d20d9f5ec9e3396edb4d2c4a23c97863fa9132336 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.5.0" flutter_lints: @@ -487,7 +487,7 @@ packages: description: name: flutter_lints sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.0.0" flutter_localizations: @@ -499,26 +499,26 @@ packages: dependency: transitive description: name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.flutter-io.cn" + sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f" + url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "5.2.2" flutter_subscreen_plugin: dependency: "direct main" description: name: flutter_subscreen_plugin sha256: b89bc8ba87956d441726557ece140ccea418ca4569e8f06e028e1017740ff6f3 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.2+5" flutter_svg: dependency: transitive description: name: flutter_svg - sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b - url: "https://pub.flutter-io.cn" + sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355" + url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.2.2" flutter_test: dependency: "direct dev" description: flutter @@ -528,10 +528,10 @@ packages: dependency: "direct main" description: name: flutter_tts - sha256: baa3cb6b4990318460fe28bfa8c7869399e97223971532c02bd97c5e876aa3c5 - url: "https://pub.flutter-io.cn" + sha256: ce5eb209b40e95f2f4a1397116c87ab2fcdff32257d04ed7a764e75894c03775 + url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.2.5" flutter_web_plugins: dependency: transitive description: flutter @@ -541,16 +541,16 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "25e51620424d92d3db3832464774a6143b5053f15e382d8ffbfd40b6e795dcf1" - url: "https://pub.flutter-io.cn" + sha256: "90778fe0497fe3a09166e8cf2e0867310ff434b794526589e77ec03cf08ba8e8" + url: "https://pub.dev" source: hosted - version: "8.2.12" + version: "8.2.14" forui: dependency: "direct main" description: name: forui sha256: "3ebbf39d57f0667afc47cbab86b0afe679bba2173a51afc21855053663dc5062" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.9.1+1" forui_assets: @@ -558,7 +558,7 @@ packages: description: name: forui_assets sha256: df0f24b47ff0c3e16811bb4ad597b426b8e1a62fcf2fea7d95923ef4d6e8aa2c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.9.1" frontend_server_client: @@ -566,7 +566,7 @@ packages: description: name: frontend_server_client sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.0" gbk_codec: @@ -574,39 +574,39 @@ packages: description: name: gbk_codec sha256: "3af5311fc9393115e3650ae6023862adf998051a804a08fb804f042724999f61" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.4.0" get: dependency: "direct main" description: name: get - sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425 - url: "https://pub.flutter-io.cn" + sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" + url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.7.3" glob: dependency: transitive description: name: glob - sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de - url: "https://pub.flutter-io.cn" + sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.2.0" google_fonts: dependency: transitive description: name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 - url: "https://pub.flutter-io.cn" + sha256: "517b20870220c48752eafa0ba1a797a092fb22df0d89535fd9991e86ee2cdd9c" + url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.3.2" graphs: dependency: transitive description: name: graphs sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.2" hex: @@ -614,31 +614,31 @@ packages: description: name: hex sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.2.0" html: dependency: transitive description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" - url: "https://pub.flutter-io.cn" + sha256: "43b67b8f43321ab066817dfac5619596c98bb1b61624e77203bb4351785f9699" + url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.7" http: dependency: "direct main" description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f - url: "https://pub.flutter-io.cn" + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.6.0" http_multi_server: dependency: transitive description: name: http_multi_server sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.2" http_parser: @@ -646,7 +646,7 @@ packages: description: name: http_parser sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.1.2" icons_launcher: @@ -654,47 +654,47 @@ packages: description: name: icons_launcher sha256: a7c83fbc837dc6f81944ef35c3756f533bb2aba32fcca5cbcdb2dbcd877d5ae9 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.0" image: dependency: "direct main" description: name: image - sha256: "13d3349ace88f12f4a0d175eb5c12dcdd39d35c4c109a8a13dfeb6d0bd9e31c3" - url: "https://pub.flutter-io.cn" + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + url: "https://pub.dev" source: hosted - version: "4.5.3" + version: "4.5.4" intl: dependency: transitive description: name: intl sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.19.0" io: dependency: transitive description: name: io - sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.flutter-io.cn" + sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" + url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" js: dependency: transitive description: name: js - sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf - url: "https://pub.flutter-io.cn" + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.7.2" json_annotation: dependency: "direct main" description: name: json_annotation sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.9.0" json_serializable: @@ -702,31 +702,31 @@ packages: description: name: json_serializable sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.8.0" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" - url: "https://pub.flutter-io.cn" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + url: "https://pub.dev" source: hosted - version: "10.0.7" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" - url: "https://pub.flutter-io.cn" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.1" libserialport: @@ -734,7 +734,7 @@ packages: description: name: libserialport sha256: "392e1592def65282429832ec66fa25e9e163d3b37716b97691482e2406720727" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.3.0+1" lints: @@ -742,7 +742,7 @@ packages: description: name: lints sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.1.1" list_counter: @@ -750,7 +750,7 @@ packages: description: name: list_counter sha256: c447ae3dfcd1c55f0152867090e67e219d42fe6d4f2807db4bbe8b8d69912237 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" logger: @@ -758,7 +758,7 @@ packages: description: name: logger sha256: af05cc8714f356fd1f3888fb6741cbe9fbe25cdb6eedbab80e1a6db21047d4a4 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.0" logging: @@ -766,7 +766,7 @@ packages: description: name: logging sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.0" macros: @@ -774,63 +774,63 @@ packages: description: name: macros sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.1.3-main.0" matcher: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.flutter-io.cn" + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 - url: "https://pub.flutter-io.cn" + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: name: mime sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.6" mqtt_client: dependency: "direct main" description: name: mqtt_client - sha256: "37aae360fac0b3322cb37267696c1535e1ad2984a13064d877273ffe4b16ca7a" - url: "https://pub.flutter-io.cn" + sha256: "85fa7e9aad03fbd6a54fcaf46127579f3e049b4834557a06e49aea7869b04c94" + url: "https://pub.dev" source: hosted - version: "10.5.1" + version: "10.8.0" network_info_plus: dependency: transitive description: name: network_info_plus - sha256: "08f4166bbb77da9e407edef6322a33f87b18c0ca46483fb25606cb3d2bfcdd2a" - url: "https://pub.flutter-io.cn" + sha256: f926b2ba86aa0086a0dfbb9e5072089bc213d854135c1712f1d29fc89ba3c877 + url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.1.4" network_info_plus_platform_interface: dependency: transitive description: name: network_info_plus_platform_interface sha256: "7e7496a8a9d8136859b8881affc613c4a21304afeb6c324bcefc4bd0aff6b94b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.2" nitrogen_flutter_svg: @@ -838,7 +838,7 @@ packages: description: name: nitrogen_flutter_svg sha256: "103313861b182fd4069bac896519b1ee64cbe1af0023d818f6c300b81c16853c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.4.0" nitrogen_types: @@ -846,7 +846,7 @@ packages: description: name: nitrogen_types sha256: "5d4ec453aea14e34607bc6021ff1381192e8fcd8541bf103638baa4d013e668f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.4.0+1" nm: @@ -854,7 +854,7 @@ packages: description: name: nm sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.5.0" number_pagination: @@ -862,7 +862,7 @@ packages: description: name: number_pagination sha256: "75d3a28616196e7c8df431d0fb7c48e811e462155f4cf3b5b4167b3408421327" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.6" octo_image: @@ -870,23 +870,23 @@ packages: description: name: octo_image sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" package_config: dependency: transitive description: name: package_config - sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" - url: "https://pub.flutter-io.cn" + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" package_info_plus: dependency: "direct main" description: name: package_info_plus sha256: "67eae327b1b0faf761964a1d2e5d323c797f3799db0e85aa232db8d9e922bc35" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "8.2.1" package_info_plus_platform_interface: @@ -894,23 +894,23 @@ packages: description: name: package_info_plus_platform_interface sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.1" path: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.flutter-io.cn" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_parsing: dependency: transitive description: name: path_parsing sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" path_provider: @@ -918,31 +918,31 @@ packages: description: name: path_provider sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" - url: "https://pub.flutter-io.cn" + sha256: "3b4c1fc3aa55ddc9cd4aa6759984330d5c8e66aa7702a6223c61540dc6380c37" + url: "https://pub.dev" source: hosted - version: "2.2.15" + version: "2.2.19" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" - url: "https://pub.flutter-io.cn" + sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd" + url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" path_provider_linux: dependency: transitive description: name: path_provider_linux sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.1" path_provider_platform_interface: @@ -950,7 +950,7 @@ packages: description: name: path_provider_platform_interface sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.2" path_provider_windows: @@ -958,7 +958,7 @@ packages: description: name: path_provider_windows sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.0" pdf: @@ -966,7 +966,7 @@ packages: description: name: pdf sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.11.3" pdf_widget_wrapper: @@ -974,7 +974,7 @@ packages: description: name: pdf_widget_wrapper sha256: c930860d987213a3d58c7ec3b7ecf8085c3897f773e8dc23da9cae60a5d6d0f5 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" permission_handler: @@ -982,7 +982,7 @@ packages: description: name: permission_handler sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "11.4.0" permission_handler_android: @@ -990,55 +990,55 @@ packages: description: name: permission_handler_android sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "12.1.0" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98 - url: "https://pub.flutter-io.cn" + sha256: f49cb15a064ea9d974fc7fbb302099353b7b170d07284e86e264561579e5bcf8 + url: "https://pub.dev" source: hosted - version: "9.4.6" + version: "9.6.1" permission_handler_html: dependency: transitive description: name: permission_handler_html - sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" - url: "https://pub.flutter-io.cn" + sha256: "6ea98b3f17f60d3b527f2647ed2ab4dc0f6bfe25b22cb1c363f5d8f62252f6ac" + url: "https://pub.dev" source: hosted - version: "0.1.3+5" + version: "0.1.4+1" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 - url: "https://pub.flutter-io.cn" + sha256: ed86a61c190258fdd65de395ea0632822e3415c1faec38eae0c31b479c28a531 + url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.1" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.flutter-io.cn" + sha256: caeae01858a0a7d2df67a445ac98e1ad95e55a0e77c73044f4e9b1c8c2289cbd + url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.2" petitparser: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.flutter-io.cn" + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "6.1.0" pinyin: dependency: "direct main" description: name: pinyin sha256: "240f271a3c71af20c8d2757756b5ee8e9d79a955d37abad4b3568fd406b22411" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.3.0" platform: @@ -1046,7 +1046,7 @@ packages: description: name: platform sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.6" plugin_platform_interface: @@ -1054,7 +1054,7 @@ packages: description: name: plugin_platform_interface sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.8" pointycastle: @@ -1062,47 +1062,47 @@ packages: description: name: pointycastle sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.9.1" pool: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.flutter-io.cn" + sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" + url: "https://pub.dev" source: hosted - version: "1.5.1" + version: "1.5.3" posix: dependency: transitive description: name: posix - sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a - url: "https://pub.flutter-io.cn" + sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e + url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.5.2" printing: dependency: "direct main" description: name: printing - sha256: "482cd5a5196008f984bb43ed0e47cbfdca7373490b62f3b27b3299275bf22a93" - url: "https://pub.flutter-io.cn" + sha256: "689170c9ddb1bda85826466ba80378aa8993486d3c959a71cd7d2d80cb606692" + url: "https://pub.dev" source: hosted - version: "5.14.2" + version: "5.14.3" pub_semver: dependency: transitive description: name: pub_semver - sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" - url: "https://pub.flutter-io.cn" + sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" + url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.1" pubspec_parse: dependency: transitive description: name: pubspec_parse sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.0" qr: @@ -1110,7 +1110,7 @@ packages: description: name: qr sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.2" qr_flutter: @@ -1118,7 +1118,7 @@ packages: description: name: qr_flutter sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.1.0" rational: @@ -1126,7 +1126,7 @@ packages: description: name: rational sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.3" rxdart: @@ -1134,7 +1134,7 @@ packages: description: name: rxdart sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.28.0" shelf: @@ -1142,7 +1142,7 @@ packages: description: name: shelf sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.2" shelf_web_socket: @@ -1150,7 +1150,7 @@ packages: description: name: shelf_web_socket sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.1" simple_sparse_list: @@ -1158,7 +1158,7 @@ packages: description: name: simple_sparse_list sha256: aa648fd240fa39b49dcd11c19c266990006006de6699a412de485695910fbc1f - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.1.4" sky_engine: @@ -1171,7 +1171,7 @@ packages: description: name: source_gen sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.0" source_helper: @@ -1179,127 +1179,119 @@ packages: description: name: source_helper sha256: "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.5" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.flutter-io.cn" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" source: hosted - version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.flutter-io.cn" - source: hosted - version: "7.0.0" + version: "1.10.1" sqflite: dependency: "direct main" description: name: sqflite sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.1" sqflite_android: dependency: transitive description: name: sqflite_android - sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" - url: "https://pub.flutter-io.cn" + sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b" + url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" - url: "https://pub.flutter-io.cn" + sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" + url: "https://pub.dev" source: hosted - version: "2.5.4+6" + version: "2.5.5" sqflite_common_ffi: dependency: transitive description: name: sqflite_common_ffi - sha256: "883dd810b2b49e6e8c3b980df1829ef550a94e3f87deab5d864917d27ca6bf36" - url: "https://pub.flutter-io.cn" + sha256: "9faa2fedc5385ef238ce772589f7718c24cdddd27419b609bb9c6f703ea27988" + url: "https://pub.dev" source: hosted - version: "2.3.4+4" + version: "2.3.6" sqflite_darwin: dependency: transitive description: name: sqflite_darwin - sha256: "22adfd9a2c7d634041e96d6241e6e1c8138ca6817018afc5d443fef91dcefa9c" - url: "https://pub.flutter-io.cn" + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" + url: "https://pub.dev" source: hosted - version: "2.4.1+1" + version: "2.4.2" sqflite_platform_interface: dependency: transitive description: name: sqflite_platform_interface sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "32b632dda27d664f85520093ed6f735ae5c49b5b75345afb8b19411bc59bb53d" - url: "https://pub.flutter-io.cn" + sha256: "3145bd74dcdb4fd6f5c6dda4d4e4490a8087d7f286a14dee5d37087290f0f8a2" + url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.9.4" sqlparser: dependency: transitive description: name: sqlparser sha256: "91f47610aa54d8abf9d795a7b4e49b2a788f65d7493d5a68fbf180c3cbcc6f38" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.27.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" - url: "https://pub.flutter-io.cn" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.flutter-io.cn" + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: name: stream_transform - sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 - url: "https://pub.flutter-io.cn" + sha256: a00e5f18bffc764f923e7dec1038527f7fe7a1791361a7117f0358193f13d53a + url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" - url: "https://pub.flutter-io.cn" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.1" strings: dependency: transitive description: name: strings sha256: "482f1511d2cd8ab9f2c4cc148e6837be8a00c03b9a8eaedbc981a84d9c6305d8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.0" sugar: @@ -1307,55 +1299,55 @@ packages: description: name: sugar sha256: a0a97f1d3552a3ef4cbec7c6e62c7b52c151cd5c11e984e8311700a918f73dc5 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.0" syncfusion_flutter_core: dependency: transitive description: name: syncfusion_flutter_core - sha256: "59b6d2a7deacade6129d2f15615ca49ed56278fea055cd2e52cace78a343dd5e" - url: "https://pub.flutter-io.cn" + sha256: f1d2b52697543e13bdefdc62d15868124a265987577f53224a7dbe176c8448f0 + url: "https://pub.dev" source: hosted - version: "28.2.11" + version: "28.2.12" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "7e598b8933d906ef7a3b8f47c59e942409f71c8e59e3d1b88e67acc9eea48817" - url: "https://pub.flutter-io.cn" + sha256: cfc91ebacee63b2c5220e541736f8df211d4f0bfbf34265778862ae20faf094f + url: "https://pub.dev" source: hosted - version: "28.2.11" + version: "28.2.12" synchronized: dependency: transitive description: name: synchronized - sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" - url: "https://pub.flutter-io.cn" + sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6" + url: "https://pub.dev" source: hosted - version: "3.3.0+3" + version: "3.3.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.flutter-io.cn" + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" - url: "https://pub.flutter-io.cn" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.4" timing: dependency: transitive description: name: timing sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" typed_data: @@ -1363,127 +1355,119 @@ packages: description: name: typed_data sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.0" unicode: dependency: transitive description: name: unicode - sha256: "0d99edbd2e74726bed2e4989713c8bec02e5581628e334d8c88c0271593fb402" - url: "https://pub.flutter-io.cn" + sha256: a6f7bcfc8ea1d5ce1f6c0b1c39117a9919f4953edd9fd7a64090a9796c499b57 + url: "https://pub.dev" source: hosted - version: "1.1.8" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.2.4" + version: "1.1.9" universal_io: dependency: transitive description: name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.flutter-io.cn" + sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 + url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.1" uuid: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff - url: "https://pub.flutter-io.cn" + sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" + url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "4.6.0" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" - url: "https://pub.flutter-io.cn" + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 + url: "https://pub.dev" source: hosted - version: "1.1.18" + version: "1.1.19" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.13" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" - url: "https://pub.flutter-io.cn" + sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc + url: "https://pub.dev" source: hosted - version: "1.1.16" + version: "1.1.19" vector_math: dependency: transitive description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.4" vm_service: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b - url: "https://pub.flutter-io.cn" + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.3.1" watcher: dependency: transitive description: name: watcher - sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" - url: "https://pub.flutter-io.cn" + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.1" web: dependency: transitive description: name: web sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" web_socket: dependency: transitive description: name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" - url: "https://pub.flutter-io.cn" + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.dev" source: hosted - version: "0.1.6" + version: "1.0.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5" - url: "https://pub.flutter-io.cn" + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" win32: dependency: transitive description: name: win32 - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e - url: "https://pub.flutter-io.cn" + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" + url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.13.0" xdg_directories: dependency: transitive description: name: xdg_directories sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" xml: @@ -1491,17 +1475,17 @@ packages: description: name: xml sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.5.0" yaml: dependency: transitive description: name: yaml - sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.flutter-io.cn" + sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea + url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" sdks: - dart: ">=3.6.0 <4.0.0" - flutter: ">=3.27.0" + dart: ">=3.7.0 <4.0.0" + flutter: ">=3.29.0"