diff --git a/lib/http/ApiService.dart b/lib/http/ApiService.dart index 0c1ade8..012b9e3 100644 --- a/lib/http/ApiService.dart +++ b/lib/http/ApiService.dart @@ -1,48 +1,39 @@ -import 'dart:io'; - import 'package:dio/dio.dart'; import 'package:qhd_prevention/tools/tools.dart'; import 'HttpManager.dart'; class ApiService { + // static const String basePath = "http://192.168.0.25:28199/"; + // static const String basePath = "http://192.168.20.240:8500/integrated_whb"; + // static const String baseFacePath = "http://192.168.0.25:38199/"; + // 人脸识别服务 + // static const String baseFacePath = "https://qaaqwh.qhdsafety.com/whb_stu_face/"; - /// 人脸识别服务 - // static const String baseFacePath = - // "https://qaaqwh.qhdsafety.com/whb_stu_face/"; - // - // /// 登录及其他管理后台接口 - // static const String basePath = "https://qaaqwh.qhdsafety.com/integrated_whb"; - // - // /// 图片文件服务 + // static const String basePath = "https://qaaqwh.qhdsafety.com/integrated_whb/"; // static const String baseImgPath = "https://file.zcloudchina.com/YTHFile"; - // - // /// 管理后台统一路径 - // static const String adminPath = - // "https://qaaqwh.qhdsafety.com/integrated_whb/"; - // - // /// 项目管理系统 - // static const String projectManagerUrl = - // 'https://pm.qhdsafety.com/zy-projectManage'; + // static const String adminPath = "https://qaaqwh.qhdsafety.com/integrated_whb/"; + // static const String projectManagerUrl = 'https://pm.qhdsafety.com/zy-projectManage/'; + // static const String publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUoHAavCikaZxjlDM6Km8cX+ye78F4oF39AcEfnE1p2Yn9pJ9WFxYZ4Vkh6F8SKMi7k4nYsKceqB1RwG996SvHQ5C3pM3nbXCP4K15ad6QhN4a7lzlbLhiJcyIKszvvK8ncUDw8mVQ0j/2mwxv05yH6LN9OKU6Hzm1ninpWeE+awIDAQAB' /// 人脸识别服务 static const String baseFacePath = - "http://192.168.0.25:38199/"; + "https://qaaqwh.qhdsafety.com/whb_stu_face/"; /// 登录及其他管理后台接口 - static const String basePath = "http://192.168.20.240:8500/integrated_whb/"; + static const String basePath = "https://qaaqwh.qhdsafety.com/integrated_whb"; /// 图片文件服务 static const String baseImgPath = "https://file.zcloudchina.com/YTHFile"; /// 管理后台统一路径 static const String adminPath = - "http://192.168.20.240:8500/integrated_whb/"; + "https://qaaqwh.qhdsafety.com/integrated_whb/"; /// 项目管理系统 static const String projectManagerUrl = 'https://pm.qhdsafety.com/zy-projectManage'; - /// RSA 秘钥 + /// RSA 公钥 static const publicKey = ''' -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUoHAavCikaZxjlDM6Km8cX+ye @@ -229,7 +220,7 @@ U6Hzm1ninpWeE+awIDAQAB }, ); } -// TODO -------------–-------------------- 首页学习园地 -------------–-------------------- +/// TODO -------------–-------------------- 首页学习园地 -------------–-------------------- /// 我的任务列表 static Future> getStudyList(int page) { return HttpManager().request( @@ -443,6 +434,74 @@ U6Hzm1ninpWeE+awIDAQAB ); } + /// 通知列表 + static Future> getNotifList(String showCount, String currentPage,String keyWord) { + return HttpManager().request( + basePath, + '/app/notice/list', + method: Method.post, + data: { + "showCount" : showCount, + "currentPage" : currentPage, + "KEYWORDS":keyWord, + "corpinfoId" :SessionService.instance.corpinfoId, + "CORPINFO_ID":SessionService.instance.corpinfoId, + "USER_ID":SessionService.instance.loginUserId, + }, + ); + } + + /// 通知列表-企业 + static Future> getNotifEnterprise(String showCount, String currentPage,String keyWord) { + return HttpManager().request( + basePath, + '/app/notice/listForCp', + method: Method.post, + data: { + "showCount" : showCount, + "currentPage" : currentPage, + "KEYWORDS":keyWord, + "loginUserId" :SessionService.instance.loginUserId, + "CORPINFO_ID":SessionService.instance.corpinfoId, + "USER_ID":SessionService.instance.loginUserId, + }, + ); + } + + + /// 通知详情 + static Future> getNotifDetail(String id) { + return HttpManager().request( + basePath, + '/app/notice/goEdit', + method: Method.post, + data: { + "NOTICECORPUSERID_ID":id, + "loginUserId":SessionService.instance.loginUserId, + "corpinfoId":SessionService.instance.corpinfoId, + "ISMAIN":"0", + "CORPINFO_ID":SessionService.instance.corpinfoId, + "USER_ID":SessionService.instance.loginUserId, + }, + ); + } + + /// 通知详情-企业 + static Future> getNotifEnterpriseDetail(String id) { + return HttpManager().request( + basePath, + '/app/notice/goEditForPc', + method: Method.post, + data: { + "NOTICECORPUSERID_ID":id, + "loginUserId":SessionService.instance.loginUserId, + "corpinfoId":SessionService.instance.corpinfoId, + "ISMAIN":"0", + "CORPINFO_ID":SessionService.instance.corpinfoId, + "USER_ID":SessionService.instance.loginUserId, + }, + ); + } /// 更新人脸信息 static Future> reloadMyFace(String imagePath) async { final file = File(imagePath); @@ -465,6 +524,33 @@ U6Hzm1ninpWeE+awIDAQAB ); } + /// 删除通知-企业 + static Future> deleteNotif(String id) { + return HttpManager().request( + basePath, + '/app/notice/delete', + method: Method.post, + data: { + "NOTICECORPUSERID_ID":id, + }, + ); + } + + /// 获取离岗管理列表 + static Future> getAiAlarmList(String showCount, String currentPage,String keyWord) { + + return HttpManager().request( + basePath, + '/app/aiwarning/list?showCount=$showCount¤tPage=$currentPage', + method: Method.post, + data: { + "tm": DateTime.now().millisecondsSinceEpoch, + "KEYWORDS": keyWord, //关键字模糊查询 + "CORPINFO_ID":SessionService.instance.corpinfoId, + "USER_ID":SessionService.instance.loginUserId, + }, + ); + } } diff --git a/lib/pages/app/application_page.dart b/lib/pages/app/application_page.dart index afe6b08..8d235e8 100644 --- a/lib/pages/app/application_page.dart +++ b/lib/pages/app/application_page.dart @@ -6,6 +6,7 @@ import 'package:qhd_prevention/pages/home/work/risk_list_page.dart'; import '../../tools/tools.dart'; import '../home/userInfo_page.dart'; +import '../home/work/ai_alarm_page.dart'; import '../home/work/danger_page.dart'; import '../home/work/danger_repair_page.dart'; @@ -22,6 +23,7 @@ enum AppItem { specialRecord, // 专项检查中的隐患记录 supervisionRectification, // 监管帮扶中的隐患整改 supervisionRecord, // 监管帮扶中的隐患记录 + aiAlarm, // 监管帮扶中的隐患记录 } class ApplicationPage extends StatelessWidget { @@ -42,26 +44,6 @@ class ApplicationPage extends StatelessWidget { // 跳转到检查记录页面 pushPage(CheckRecordPage(), context); break; - case AppItem.riskRecord: - // 跳转到隐患记录页面 - pushPage(DangerWaitListPage(DangerType.ristRecord), context); - break; - case AppItem.pendingRectification: - // 跳转到待整改隐患页面 - pushPage(DangerWaitListPage(DangerType.wait), context); - break; - case AppItem.overdueRectification: - // 跳转到超期未整改页面 - pushPage(DangerWaitListPage(DangerType.expired), context); - break; - case AppItem.riskAcceptance: - // 跳转到隐患验收页面 - pushPage(DangerWaitListPage(DangerType.waitAcceptance), context); - break; - case AppItem.acceptedRisk: - // 跳转到已验收隐患页面 - pushPage(DangerWaitListPage(DangerType.acceptanced), context); - break; case AppItem.specialRectification: // 跳转到专项检查隐患整改页面 //Navigator.push(context, MaterialPageRoute(builder: (_) => SpecialRectificationPage())); @@ -78,6 +60,31 @@ class ApplicationPage extends StatelessWidget { // 跳转到监管帮扶隐患记录页面 //Navigator.push(context, MaterialPageRoute(builder: (_) => SupervisionRecordPage())); break; + + case AppItem.riskRecord: + // 跳转到隐患记录页面 + pushPage(DangerWaitListPage(DangerType.ristRecord,1), context); + break; + case AppItem.pendingRectification: + // 跳转到待整改隐患页面 + pushPage(DangerWaitListPage(DangerType.wait,2), context); + break; + case AppItem.overdueRectification: + // 跳转到超期未整改页面 + pushPage(DangerWaitListPage(DangerType.expired,3), context); + break; + case AppItem.riskAcceptance: + // 跳转到隐患验收页面 + pushPage(DangerWaitListPage(DangerType.waitAcceptance,4), context); + break; + case AppItem.acceptedRisk: + // 跳转到已验收隐患页面 + pushPage(DangerWaitListPage(DangerType.acceptanced,5), context); + break; + case AppItem.aiAlarm: + // 跳转到隐患排查页面 + pushPage(AiAlarmPage(), context); + break; } } @@ -93,16 +100,7 @@ class ApplicationPage extends StatelessWidget { {'item': AppItem.checkRecord, 'icon': 'assets/icon-apps/icon-zl-2.png', 'title': '检查记录', 'num': 0}, ], }, - { - 'title': '隐患治理', - 'list': [ - {'item': AppItem.riskRecord, 'icon': 'assets/icon-apps/icon-zl-2.png', 'title': '隐患记录', 'num': 1}, - {'item': AppItem.pendingRectification, 'icon': 'assets/icon-apps/icon-zl-3.png', 'title': '待整改隐患', 'num': 3}, - {'item': AppItem.overdueRectification, 'icon': 'assets/icon-apps/icon-zl-4.png', 'title': '超期未整改', 'num': 0}, - {'item': AppItem.riskAcceptance, 'icon': 'assets/icon-apps/icon-yh-1.png', 'title': '隐患验收', 'num': 2}, - {'item': AppItem.acceptedRisk, 'icon': 'assets/icon-apps/icon-zl-1.png', 'title': '已验收隐患', 'num': 0}, - ], - }, + { 'title': '专项检查', 'list': [ @@ -117,6 +115,25 @@ class ApplicationPage extends StatelessWidget { {'item': AppItem.supervisionRecord, 'icon': 'assets/icon-apps/icon-zl-2.png', 'title': '隐患记录', 'num': 0}, ], }, + + { + 'title': '隐患治理', + 'list': [ + {'item': AppItem.riskRecord, 'icon': 'assets/icon-apps/icon-zl-2.png', 'title': '隐患记录', 'num': 0}, + {'item': AppItem.pendingRectification, 'icon': 'assets/icon-apps/icon-zl-3.png', 'title': '待整改隐患', 'num': 0}, + {'item': AppItem.overdueRectification, 'icon': 'assets/icon-apps/icon-zl-4.png', 'title': '超期未整改', 'num': 0}, + {'item': AppItem.riskAcceptance, 'icon': 'assets/icon-apps/icon-yh-1.png', 'title': '隐患验收', 'num': 0}, + {'item': AppItem.acceptedRisk, 'icon': 'assets/icon-apps/icon-zl-1.png', 'title': '已验收隐患', 'num': 0}, + ], + }, + + { + 'title': '监测预警', + 'list': [ + {'item': AppItem.aiAlarm, 'icon': 'assets/icon-apps/icon-pc-1.png', 'title': 'AI报警', 'num': 0}, + // {'item': AppItem.supervisionRecord, 'icon': 'assets/icon-apps/icon-zl-2.png', 'title': '隐患记录', 'num': 0}, + ], + }, ]; return Scaffold( @@ -128,7 +145,7 @@ class ApplicationPage extends StatelessWidget { if (index == 0) { return ClipRRect( child: Image.asset( - 'assets/images/apps-banner.jpg', + 'assets/images/apps-banner.png', fit: BoxFit.cover, ), ); diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index b51770e..85467b5 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -333,13 +333,13 @@ class _HomePageState extends State { if (index == 1) { pushPage(DangerPage(), context); } else if (index == 2) { - pushPage(DangerWaitListPage(DangerType.wait), context); + pushPage(DangerWaitListPage(DangerType.wait,2), context); } else if (index == 3) { - pushPage(DangerWaitListPage(DangerType.expired), context); + pushPage(DangerWaitListPage(DangerType.expired,3), context); } else if (index == 4) { - pushPage(DangerWaitListPage(DangerType.waitAcceptance), context); + pushPage(DangerWaitListPage(DangerType.waitAcceptance,4), context); } else if (index == 5) { - pushPage(DangerWaitListPage(DangerType.acceptance), context); + pushPage(DangerWaitListPage(DangerType.acceptance,5), context); } }, child: Container( diff --git a/lib/pages/home/work/ai_alarm_page.dart b/lib/pages/home/work/ai_alarm_page.dart new file mode 100644 index 0000000..0e1a551 --- /dev/null +++ b/lib/pages/home/work/ai_alarm_page.dart @@ -0,0 +1,188 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:qhd_prevention/customWidget/danner_repain_item.dart'; +import 'package:qhd_prevention/customWidget/department_picker.dart'; +import 'package:qhd_prevention/customWidget/search_bar_widget.dart'; +import 'package:qhd_prevention/pages/home/scan_page.dart'; +import 'package:qhd_prevention/pages/home/work/risk_list_page.dart'; +import 'package:qhd_prevention/pages/my_appbar.dart'; +import 'package:qhd_prevention/tools/SmallWidget.dart'; +import 'package:qhd_prevention/tools/tools.dart'; + +import '../../../http/ApiService.dart'; + +class AiAlarmPage extends StatefulWidget { + const AiAlarmPage({super.key}); + + @override + _AiAlarmPageState createState() => _AiAlarmPageState(); +} + +class _AiAlarmPageState extends State + with SingleTickerProviderStateMixin { + + late List _list = []; + int pageNum = 1; + + // 模拟数据 + final List _notifications = List.generate(10, (i) { + bool read = i % 3 == 0; + String title = '测试数据标题标题 ${i + 1}'; + String time = '2025-06-${10 + i} 12:3${i}'; + return NotificationItem(title, time); + }); + final List data = [ + Category( + id: '1', + title: '分类一', + children: [ + Category(id: '1-1', title: '子项 1-1'), + Category(id: '1-2', title: '子项 1-2'), + ], + ), + Category(id: '2', title: '分类二'), + Category( + id: '3', + title: '分类三', + children: [ + Category( + id: '3-1', + title: '子项 3-1', + children: [Category(id: '3-1-1', title: '子项 3-1-1')], + ), + ], + ), + ]; + final TextEditingController _searchController = TextEditingController(); + + @override + void initState() { + super.initState(); + _getAiAlarmList(""); + } + + @override + void dispose() { + + super.dispose(); + } + + void _handleItemTap(NotificationItem item, int index) { + print("点击了是: ${item.title}"); + pushPage(RiskListPage(), context); + } + + // 显示分类选择器 + void showCategoryPicker() { + showModalBottomSheet( + context: context, + isScrollControlled: true, + barrierColor: Colors.black54, + backgroundColor: Colors.transparent, + builder: + (ctx) => DepartmentPicker( + data: data, + onSelected: (selectedId) { + setState(() {}); + }, + ), + ); + } + + Future _getAiAlarmList(String keyWord) async { + // LoadingDialogHelper.show(context); + try { + final result = await ApiService.getAiAlarmList("-1", pageNum.toString(),keyWord); + if (result['result'] == 'success') { + final List newList = result['varList'] ?? []; + setState(() { + _list.addAll(newList); + }); + } + } catch (e) { + print('加载出错: $e'); + } + + } + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: MyAppbar( + title: "AI报警", + ), + body: SafeArea( + child: Column( + children: [ + // Search bar + Padding( + padding: const EdgeInsets.all(10), + child: SearchBarWidget( + showResetButton: true, + onInputTap: () { + showCategoryPicker(); + }, + hintText: "", + isClickableOnly: true, + onSearch: (text) { + // print('----------'); + _getAiAlarmList(text); + }, + controller: _searchController, + ), + ), + + // List + Expanded( + child: _list.isEmpty + ? Center(child: Text('暂无数据')) + : ListView.separated( + itemCount: _notifications.length, + separatorBuilder: (_, __) => const SizedBox(), + itemBuilder: (context, index) { + // NotificationItem item = _notifications[index]; + // return GestureDetector( + // onTap: () => _handleItemTap(item, index), + // child: DannerRepainItem( + // title: '测试--------new', + // details: [ + // '清单类型:测试', + // '排查周期:测试', + // '包含检查项:3', + // '负责人:是测试', + // '起始时间:2025-6-20', + // '', + // '测试一下是否跳过时间', + // ], + // showBottomTags: true, + // bottomTags: [ + // riskTagText(1, "重大风险:0"), + // riskTagText(2, "较大:3"), + // riskTagText(3, "一般:1"), + // riskTagText(4, "低:0"), + // ], + // ), + // ); + }, + ), + ), + ], + ), + ), + ); + } + + +} + + + +// 模拟数据模版 +class NotificationItem { + final String title; + final String time; + + NotificationItem(this.title, this.time); +} diff --git a/lib/pages/home/work/danger_wait_list_page.dart b/lib/pages/home/work/danger_wait_list_page.dart index f7a7f1c..62054ae 100644 --- a/lib/pages/home/work/danger_wait_list_page.dart +++ b/lib/pages/home/work/danger_wait_list_page.dart @@ -5,6 +5,7 @@ import 'package:qhd_prevention/pages/home/work/danger_repair_page.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; import 'package:qhd_prevention/tools/h_colors.dart'; import 'package:qhd_prevention/tools/tools.dart'; +import '../../app/application_page.dart'; import '/customWidget/search_bar_widget.dart'; enum DangerType { @@ -21,8 +22,10 @@ enum DangerType { const DangerType(this.displayName, this.detailTitle); } class DangerWaitListPage extends StatefulWidget { - const DangerWaitListPage(this.dangerType,{super.key}); + const DangerWaitListPage(this.dangerType, this.appItem,{super.key}); final DangerType dangerType; + final int appItem; + @override State createState() => _DangerWaitListPageState(); } @@ -47,9 +50,34 @@ class _DangerWaitListPageState extends State { final TextEditingController _searchController = TextEditingController(); // 隐患等级文本 - final List _levelTexts = ["较大隐患","一般隐患"]; + final List _levelTexts = ["重大隐患","一般隐患"]; final GlobalKey _scaffoldKey = GlobalKey(); + @override + void initState() { + super.initState(); + + switch(widget.appItem ){ + case 1: + + break; + case 2: + + break; + case 3: + + break; + case 4: + + break; + case 5: + + break; + + } + + } + @override Widget build(BuildContext context) { // 取屏幕宽度 @@ -136,15 +164,15 @@ class _DangerWaitListPageState extends State { overflow: TextOverflow.ellipsis, ), SizedBox(height: 5), - Text( - item['label1'] ?? '', - style: TextStyle(fontSize: 14, color: Colors.grey), - ), - SizedBox(height: 5), - Text( - item['label2'] ?? '', - style: TextStyle(fontSize: 14, color: Colors.grey), - ), + // Text( + // item['label1'] ?? '', + // style: TextStyle(fontSize: 14, color: Colors.grey), + // ), + // SizedBox(height: 5), + // Text( + // item['label2'] ?? '', + // style: TextStyle(fontSize: 14, color: Colors.grey), + // ), SizedBox(height: 5), Text( item['label2'] ?? '', diff --git a/lib/pages/mine/mine_duty_management.dart b/lib/pages/mine/mine_duty_management.dart index b6b511e..8770294 100644 --- a/lib/pages/mine/mine_duty_management.dart +++ b/lib/pages/mine/mine_duty_management.dart @@ -283,42 +283,7 @@ class _MineDutyManagementPageState extends State { final raw = await ApiService.getDutyManagement(showCount,currentPage); - // print(raw); - // setState(() { - // workInfos = [ - // { - // "icon": "assets/icon-apps/jobico1.png", - // "index": 1, - // "detail": "待排查", - // "num": (hidCount['dpc'] ?? 0).toString(), - // }, - // { - // "icon": "assets/icon-apps/jobico2.png", - // "index": 2, - // "detail": "待整改", - // "num": (hidCount['dzg'] ?? 0).toString(), - // }, - // { - // "icon": "assets/icon-apps/jobico3.png", - // "index": 3, - // "detail": "已超期", - // "num": (hidCount['ycq'] ?? 0).toString(), - // }, - // { - // "icon": "assets/icon-apps/jobico4.png", - // "index": 4, - // "detail": "待验收", - // "num": (hidCount['dys'] ?? 0).toString(), - // }, - // { - // "icon": "assets/icon-apps/jobico5.png", - // "index": 5, - // "detail": "已验收", - // "num": (hidCount['yys'] ?? 0).toString(), - // }, - // ]; - // - // }); + } catch (e) { // 出错时可以 Toast 或者在页面上显示错误状态 diff --git a/lib/pages/mine/mine_feedback_page.dart b/lib/pages/mine/mine_feedback_page.dart index 75744fe..81d4ddf 100644 --- a/lib/pages/mine/mine_feedback_page.dart +++ b/lib/pages/mine/mine_feedback_page.dart @@ -5,6 +5,8 @@ import 'dart:io'; import '../../../../../customWidget/photo_picker_row.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; +import '../../http/ApiService.dart'; + // feedback_type.dart enum FeedbackType { systemError, @@ -42,7 +44,7 @@ class _FeedbackPageState extends State { FeedbackType? _selectedType = FeedbackType.other; // 上传的图片 - List _images = []; + List _images = []; // 获取反馈类型名称 String _getTypeName(FeedbackType type) { @@ -60,31 +62,25 @@ class _FeedbackPageState extends State { } } - // 选择图片 - Future _pickImage() async { - if (_images.length >= 4) return; - - final picker = ImagePicker(); - try { - final pickedFile = await picker.pickImage(source: ImageSource.gallery); - if (pickedFile != null) { - setState(() { - _images.add(File(pickedFile.path)); - }); - } - } catch (e) { - ScaffoldMessenger.of( - context, - ).showSnackBar(const SnackBar(content: Text('无法访问相册,请检查权限设置'))); + // 获取反馈类型名称 + String _getTypeNum(FeedbackType type) { + switch (type) { + case FeedbackType.systemError: + return '1'; + case FeedbackType.uiOptimization: + return '2'; + case FeedbackType.designIssue: + return '3'; + case FeedbackType.performanceIssue: + return '4'; + case FeedbackType.other: + return '9'; } } - // 删除图片 - void _removeImage(int index) { - setState(() { - _images.removeAt(index); - }); - } + + + @override Widget build(BuildContext context) { @@ -287,27 +283,84 @@ class _FeedbackPageState extends State { // 提交反馈 void _submitFeedback() { - if (_formKey.currentState!.validate()) { - // 模拟提交过程 - showDialog( - context: context, - barrierDismissible: false, - builder: (context) => const Center(child: CircularProgressIndicator()), - ); - Future.delayed(const Duration(seconds: 2), () { - Navigator.pop(context); // 关闭加载对话框 - ScaffoldMessenger.of( - context, - ).showSnackBar(const SnackBar(content: Text('反馈提交成功!'))); + final title = _titleController.text.trim(); + final text = _descriptionController.text.trim(); - // 重置表单 - _formKey.currentState!.reset(); - setState(() { - _images.clear(); - _selectedType = FeedbackType.other; - }); - }); + if (title.isEmpty ) { + _showMessage('请填写标题'); + return; + } + + if (text.isEmpty ) { + _showMessage('请填写问题和意见'); + return; + } + + if (_images.isEmpty) { + _showMessage('请上传隐患图片'); + return; + } + + String imagePaths=""; + for(int i=0;i<_images.length;i++){ + if(0==i){ + imagePaths=_images[i]; + }else { + imagePaths = "$imagePaths,${_images[i]}"; + } + } + + String num=_getTypeNum(_selectedType!); + + _setFeedBack(title,text,imagePaths,num); + + // if (_formKey.currentState!.validate()) { + // // 模拟提交过程 + // showDialog( + // context: context, + // barrierDismissible: false, + // builder: (context) => const Center(child: CircularProgressIndicator()), + // ); + // + // Future.delayed(const Duration(seconds: 2), () { + // Navigator.pop(context); // 关闭加载对话框 + // ScaffoldMessenger.of( + // context, + // ).showSnackBar(const SnackBar(content: Text('反馈提交成功!'))); + // + // // 重置表单 + // _formKey.currentState!.reset(); + // setState(() { + // _images.clear(); + // _selectedType = FeedbackType.other; + // }); + // }); + // } + } + + + Future _setFeedBack(String title, String text, String imagePaths, String num) async { + try { + + final raw = await ApiService.setFeedBack(title,text,num,imagePaths); + + if (raw['result'] == 'success') { + + Navigator.pop(context); // 关闭加载对话框 + _showMessage('反馈提交成功'); + + }else{ + _showMessage('反馈提交失败'); + } + + } catch (e) { + // 出错时可以 Toast 或者在页面上显示错误状态 + print('加载首页数据失败:$e'); } } + + void _showMessage(String msg) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg))); + } } diff --git a/lib/pages/notif/notif_detail_page.dart b/lib/pages/notif/notif_detail_page.dart index 6e950a1..db28d8d 100644 --- a/lib/pages/notif/notif_detail_page.dart +++ b/lib/pages/notif/notif_detail_page.dart @@ -1,8 +1,76 @@ import 'package:flutter/material.dart'; +import 'package:flutter_html/flutter_html.dart'; +import 'package:qhd_prevention/pages/mine/webViewPage.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; +import 'package:webview_flutter/webview_flutter.dart'; -class NotifDetailPage extends StatelessWidget { - const NotifDetailPage({super.key}); +import '../../http/ApiService.dart'; + + +class NotifDetailPage extends StatefulWidget { + const NotifDetailPage(this.item, this.selectedTab, {super.key,required this.onClose}); + + final Function(String) onClose; // 回调函数 + final dynamic item; + final int selectedTab; + + @override + State createState() => _NotifDetailPageState(item,selectedTab,onClose); +} + +class _NotifDetailPageState extends State { + _NotifDetailPageState(this.item, this.selectedTab,this.onClose); + + final Function(String) onClose; // 回调函数 + final dynamic item; + final int selectedTab; + String title=""; + String time=""; + String text=""; + + @override + void initState() { + super.initState(); + if(0==selectedTab){ + _getNotifDetail(); + }else{ + _getNotifEnterpriseDetail(); + } + } + + Future _getNotifDetail() async { + // LoadingDialogHelper.show(context); + try { + final result = await ApiService.getNotifDetail(item['NOTICE_ID']); + if (result['result'] == 'success') { + final dynamic newList = result['pd'] ; + setState(() { + title= newList['SYNOPSIS']; + time= newList['CREATTIME']; + text= newList['CONTENT']; + }); + } + } catch (e) { + print('加载出错: $e'); + } + } + + Future _getNotifEnterpriseDetail() async { + // LoadingDialogHelper.show(context); + try { + final result = await ApiService.getNotifEnterpriseDetail(item['NOTICECORPUSERID_ID']); + if (result['result'] == 'success') { + final dynamic newList = result['pd'] ; + setState(() { + title= newList['SYNOPSIS']; + time= newList['CREATTIME']; + text= newList['CONTENT']; + }); + } + } catch (e) { + print('加载出错: $e'); + } + } @override Widget build(BuildContext context) { @@ -13,19 +81,41 @@ class NotifDetailPage extends StatelessWidget { width: double.infinity, // 铺满父容器 color: Colors.white, padding: const EdgeInsets.all(15), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, // 左对齐 - children: const [ - Text("通知标题"), - SizedBox(height: 8), - Text("2025-1-1 01:01:01"), - SizedBox(height: 16), - Text("通知详情"), - ], + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, // 左对齐 + children: [ + Padding( + padding: EdgeInsets.only(left: 10,right: 10), + child: Text(title,style: TextStyle(color: Colors.black,fontSize: 16,fontWeight: FontWeight.bold),), + ), + + SizedBox(height: 8), + Padding( + padding: EdgeInsets.only(left: 10,right: 10), + child: Text(time,), + ), + SizedBox(height: 8), + Html( + data: text, + ), + // Text(item['CONTENT'],), + ], + ), ), + ), ), ); } + + @override + void dispose() { + // TODO: implement dispose + super.dispose(); + onClose('关闭详情'); // 触发回调 + } + + } diff --git a/lib/pages/notif/notif_page.dart b/lib/pages/notif/notif_page.dart index 0a1bfbe..7848030 100644 --- a/lib/pages/notif/notif_page.dart +++ b/lib/pages/notif/notif_page.dart @@ -3,6 +3,8 @@ import 'package:qhd_prevention/customWidget/search_bar_widget.dart'; import 'package:qhd_prevention/pages/notif/notif_detail_page.dart'; import 'package:qhd_prevention/tools/tools.dart'; +import '../../http/ApiService.dart'; + class NotifPage extends StatefulWidget { const NotifPage({Key? key}) : super(key: key); @@ -10,9 +12,14 @@ class NotifPage extends StatefulWidget { _NotifPageState createState() => _NotifPageState(); } -class _NotifPageState extends State with SingleTickerProviderStateMixin { +class _NotifPageState extends State + with SingleTickerProviderStateMixin { + + final TextEditingController searchController = TextEditingController(); + late List _list = []; late TabController _tabController; int _selectedTab = 0; + int pageNum = 1; // 模拟数据 final List> _notifications = List.generate(10, (i) { @@ -29,12 +36,85 @@ class _NotifPageState extends State with SingleTickerProviderStateMix super.initState(); _tabController = TabController(length: 2, vsync: this); _tabController.addListener(() { - if (!_tabController.indexIsChanging) { + // if (!_tabController.indexIsChanging) { + // setState(() => _selectedTab = _tabController.index); + // } + + if (_tabController.indexIsChanging) { setState(() => _selectedTab = _tabController.index); + print('切换到标签:${_tabController.index}'); + reRefreshData(); } + }); + + _getNotifList(""); } + void reRefreshData(){ + pageNum=1; + _list.clear(); + searchController.text=""; + if(0==_selectedTab){ + _getNotifList(""); + }else{ + _getNotifEnterprise(""); + } + } + + Future _getNotifList(String keyWord) async { + // LoadingDialogHelper.show(context); + try { + final result = await ApiService.getNotifList("-1", pageNum.toString(),keyWord); + if (result['result'] == 'success') { + final List newList = result['varList'] ?? []; + setState(() { + _list.addAll(newList); + }); + } + } catch (e) { + print('加载出错: $e'); + } finally { + LoadingDialogHelper.hide(context); + } + } + + Future _getNotifEnterprise(String keyWord) async { + // LoadingDialogHelper.show(context); + try { + final result = await ApiService.getNotifEnterprise("-1", pageNum.toString(),keyWord); + if (result['result'] == 'success') { + final List newList = result['varList'] ?? []; + setState(() { + _list.addAll(newList); + }); + } + } catch (e) { + print('加载出错: $e'); + } finally { + LoadingDialogHelper.hide(context); + } + } + + Future _deleteNotif(String id) async { + // LoadingDialogHelper.show(context); + try { + final result = await ApiService.deleteNotif(id); + if (result['result'] == 'success') { + setState(() { + reRefreshData(); + + }); + } + } catch (e) { + print('加载出错: $e'); + } finally { + LoadingDialogHelper.hide(context); + } + } + + + @override void dispose() { _tabController.dispose(); @@ -43,7 +123,7 @@ class _NotifPageState extends State with SingleTickerProviderStateMix @override Widget build(BuildContext context) { - final TextEditingController searchController = TextEditingController(); + return GestureDetector( onTap: () { @@ -52,111 +132,161 @@ class _NotifPageState extends State with SingleTickerProviderStateMix behavior: HitTestBehavior.opaque, child: Scaffold( body: SafeArea( - child:Column( - children: [ - // Tab bar - TabBar( - controller: _tabController, - labelStyle: TextStyle(fontSize: 16), - indicator: UnderlineTabIndicator( - borderSide: BorderSide(width: 3.0, color: Colors.blue), - insets: EdgeInsets.symmetric(horizontal: 100.0), - ), - labelColor: Colors.blue, - unselectedLabelColor: Colors.grey, - tabs: const [ - Tab(text: '政府公告'), - Tab(text: '企业公告'), - ], + child: Column( + children: [ + // Tab bar + TabBar( + controller: _tabController, + labelStyle: TextStyle(fontSize: 16), + indicator: UnderlineTabIndicator( + borderSide: BorderSide(width: 3.0, color: Colors.blue), + insets: EdgeInsets.symmetric(horizontal: 100.0), ), + labelColor: Colors.blue, + unselectedLabelColor: Colors.grey, + tabs: const [Tab(text: '政府公告'), Tab(text: '企业公告')], + ), - // Search bar - Padding( - padding: const EdgeInsets.all(10), - child: SearchBarWidget( - controller: searchController, - onSearch: (keyword) { - print("用户输入的是: $keyword"); - // TODO: 执行搜索 - }, - ) - ), + // Search bar + Padding( + padding: const EdgeInsets.all(10), + child: SearchBarWidget( + key: Key("searchBody"), + controller: searchController, + onSearch: (keyword) { + print("用户输入的是: $keyword"); + // TODO: 执行搜索 + // String word="整改"; + pageNum=1; + _list.clear(); + if(0==_selectedTab){ + _getNotifList(keyword); + }else{ + _getNotifEnterprise(keyword); + } - // List - Expanded( - child: ListView.separated( - itemCount: _notifications.length, - separatorBuilder: (_, __) => const Divider(height: 1), - itemBuilder: (context, index) { - final item = _notifications[index]; - return _itemCell(item); - }, - ), + }, ), - ], - ) + ), + + // List + Expanded( + child: + _list.isEmpty + ? Center(child: Text('暂无数据')) + : ListView.builder( + itemCount: _list.length, + itemBuilder: (context, index) { + return _itemCell(_list[index]); + }, + ), + ), + ], + ), ), ), ); } Widget _itemCell(final item) { - return ListTile( - onTap: () { - pushPage(NotifDetailPage(), context); - }, - contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), - title: Padding( - padding: const EdgeInsets.only(bottom: 20), // 减小底部间距 - child: Text( - item['title'], - style: const TextStyle(fontSize: 14), - ), - ), - - subtitle: Text( - item['time'], - style: TextStyle(fontSize: 13), - ), - - trailing: Container( - constraints: const BoxConstraints(minHeight: 100), // 确保最小高度 - - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, // 关键修改:使用最小尺寸 - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text( - item['read'] ? '已读' : '未读', - style: TextStyle( - fontSize: 12, // 稍微减小字体大小 - color: item['read'] ? Colors.grey : Colors.red, - ), - ), - SizedBox(height: 15,), - - if (item['read']) - SizedBox( - height: 24, // 固定按钮高度 - child: TextButton( - onPressed: () {}, - child: const Text( - '删除', - style: TextStyle(fontSize: 13, color: Colors.white), - ), - style: TextButton.styleFrom( - padding: const EdgeInsets.symmetric(horizontal: 12), - backgroundColor: Colors.red, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - ), + return Column( + children: [ + ListTile( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => NotifDetailPage( + item,_selectedTab, + onClose: (result) { + print('详情页面已关闭,返回结果: $result'); + reRefreshData(); + }, ), ), - ], + ); + + // pushPage(NotifDetailPage(item,_selectedTab), context); + }, + contentPadding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 10, + ), + title: Padding( + padding: const EdgeInsets.only(bottom: 20), // 减小底部间距 + child: Text(item['SYNOPSIS'], style: const TextStyle(fontSize: 14)), + ), + + subtitle: Text(item['CREATTIME'], style: TextStyle(fontSize: 13)), + + trailing: Container( + constraints: const BoxConstraints(minHeight: 100), // 确保最小高度 + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, // 关键修改:使用最小尺寸 + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + if (0 != _selectedTab) + Text( + item['TYPE'] == 1 ? '已读' : '未读', + style: TextStyle( + fontSize: 12, // 稍微减小字体大小 + color: item['TYPE'] == 1 ? Colors.grey : Colors.red, + ), + ), + SizedBox(height: 15), + + if (0 != _selectedTab && item['TYPE'] == 1) + SizedBox( + height: 24, // 固定按钮高度 + child: TextButton( + onPressed: () async{ + // 显示确认对话框 + bool? confirm = await showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text("确认删除"), + content: Text("确定要删除这条通知吗?"), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context, false), + // onPressed: () => Navigator.pop(context, false), + child: Text("取消"), + ), + TextButton( + onPressed: () => Navigator.pop(context, true), + // onPressed: () => Navigator.pop(context, true), + child: Text("确定", style: TextStyle(color: Colors.red)), + ), + ], + ), + ); + if (confirm == true) { + _deleteNotif(item['NOTICECORPUSERID_ID']); + } + + }, + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 12), + backgroundColor: Colors.red, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: Text( '删除', style: TextStyle(fontSize: 13, color: Colors.white),), + + ), + ), + ], + ), + ), ), - ), + Divider(height: 1, color: Colors.black12), + ], ); } } + + + + diff --git a/pubspec.lock b/pubspec.lock index 9325767..acada0f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: args sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.7.0" asn1lib: @@ -21,16 +21,16 @@ packages: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.12.0" + version: "2.13.0" boolean_selector: dependency: transitive description: name: boolean_selector sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" camera: @@ -78,7 +78,7 @@ packages: description: name: characters sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" clock: @@ -86,7 +86,7 @@ packages: description: name: clock sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" collection: @@ -94,7 +94,7 @@ packages: description: name: collection sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.19.1" connectivity_plus: @@ -102,7 +102,7 @@ packages: description: name: connectivity_plus sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.4" connectivity_plus_platform_interface: @@ -110,7 +110,7 @@ packages: description: name: connectivity_plus_platform_interface sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" convert: @@ -126,7 +126,7 @@ packages: description: name: cross_file sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.4+2" crypto: @@ -134,7 +134,7 @@ packages: description: name: crypto sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.6" csslib: @@ -142,7 +142,7 @@ packages: description: name: csslib sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" cupertino_icons: @@ -150,7 +150,7 @@ packages: description: name: cupertino_icons sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.8" dbus: @@ -158,7 +158,7 @@ packages: description: name: dbus sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.11" dio: @@ -190,7 +190,7 @@ packages: description: name: extended_image sha256: f6cbb1d798f51262ed1a3d93b4f1f2aa0d76128df39af18ecb77fa740f88b2e0 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "10.0.1" extended_image_library: @@ -198,23 +198,23 @@ packages: description: name: extended_image_library sha256: "1f9a24d3a00c2633891c6a7b5cab2807999eb2d5b597e5133b63f49d113811fe" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: name: ffi sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" file: @@ -222,7 +222,7 @@ packages: description: name: file sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" file_selector_linux: @@ -230,7 +230,7 @@ packages: description: name: file_selector_linux sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.3+2" file_selector_macos: @@ -238,7 +238,7 @@ packages: description: name: file_selector_macos sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.4+3" file_selector_platform_interface: @@ -246,7 +246,7 @@ packages: description: name: file_selector_platform_interface sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.2" file_selector_windows: @@ -254,7 +254,7 @@ packages: description: name: file_selector_windows sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.3+4" flutter: @@ -262,12 +262,20 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_html: + dependency: "direct main" + description: + name: flutter_html + sha256: "38a2fd702ffdf3243fb7441ab58aa1bc7e6922d95a50db76534de8260638558d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.0" flutter_lints: dependency: "direct dev" description: name: flutter_lints sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.0" flutter_plugin_android_lifecycle: @@ -275,7 +283,7 @@ packages: description: name: flutter_plugin_android_lifecycle sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.28" flutter_test: @@ -301,7 +309,7 @@ packages: description: name: html sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.15.6" http: @@ -309,7 +317,7 @@ packages: description: name: http sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" http_client_helper: @@ -317,7 +325,7 @@ packages: description: name: http_client_helper sha256: "8a9127650734da86b5c73760de2b404494c968a3fd55602045ffec789dac3cb1" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" http_parser: @@ -325,7 +333,7 @@ packages: description: name: http_parser sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.2" image_picker: @@ -333,7 +341,7 @@ packages: description: name: image_picker sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" image_picker_android: @@ -341,7 +349,7 @@ packages: description: name: image_picker_android sha256: "317a5d961cec5b34e777b9252393f2afbd23084aa6e60fcf601dcf6341b9ebeb" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.8.12+23" image_picker_for_web: @@ -349,7 +357,7 @@ packages: description: name: image_picker_for_web sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.6" image_picker_ios: @@ -357,7 +365,7 @@ packages: description: name: image_picker_ios sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.8.12+2" image_picker_linux: @@ -365,7 +373,7 @@ packages: description: name: image_picker_linux sha256: "34a65f6740df08bbbeb0a1abd8e6d32107941fd4868f67a507b25601651022c9" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1+2" image_picker_macos: @@ -373,7 +381,7 @@ packages: description: name: image_picker_macos sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1+2" image_picker_platform_interface: @@ -381,7 +389,7 @@ packages: description: name: image_picker_platform_interface sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.10.1" image_picker_windows: @@ -389,7 +397,7 @@ packages: description: name: image_picker_windows sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1+1" intl: @@ -397,7 +405,7 @@ packages: description: name: intl sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.20.2" js: @@ -405,23 +413,23 @@ packages: description: name: js sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.2" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + url: "https://pub.flutter-io.cn" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.9" leak_tracker_testing: @@ -429,7 +437,7 @@ packages: description: name: leak_tracker_testing sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" lints: @@ -437,15 +445,23 @@ packages: description: name: lints sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" + list_counter: + dependency: transitive + description: + name: list_counter + sha256: c447ae3dfcd1c55f0152867090e67e219d42fe6d4f2807db4bbe8b8d69912237 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.2" matcher: dependency: transitive description: name: matcher sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.17" material_color_utilities: @@ -453,7 +469,7 @@ packages: description: name: material_color_utilities sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.11.1" meta: @@ -461,7 +477,7 @@ packages: description: name: meta sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.16.0" mime: @@ -469,7 +485,7 @@ packages: description: name: mime sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" mobile_scanner: @@ -477,7 +493,7 @@ packages: description: name: mobile_scanner sha256: "54005bdea7052d792d35b4fef0f84ec5ddc3a844b250ecd48dc192fb9b4ebc95" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" nested: @@ -485,7 +501,7 @@ packages: description: name: nested sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" nm: @@ -493,7 +509,7 @@ packages: description: name: nm sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.0" package_info_plus: @@ -501,7 +517,7 @@ packages: description: name: package_info_plus sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "8.3.0" package_info_plus_platform_interface: @@ -509,7 +525,7 @@ packages: description: name: package_info_plus_platform_interface sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.0" path: @@ -517,7 +533,7 @@ packages: description: name: path sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.1" path_provider: @@ -525,7 +541,7 @@ packages: description: name: path_provider sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" path_provider_android: @@ -533,7 +549,7 @@ packages: description: name: path_provider_android sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.17" path_provider_foundation: @@ -541,7 +557,7 @@ packages: description: name: path_provider_foundation sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" path_provider_linux: @@ -549,7 +565,7 @@ packages: description: name: path_provider_linux sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" path_provider_platform_interface: @@ -557,7 +573,7 @@ packages: description: name: path_provider_platform_interface sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" path_provider_windows: @@ -565,7 +581,7 @@ packages: description: name: path_provider_windows sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" petitparser: @@ -573,7 +589,7 @@ packages: description: name: petitparser sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.0" photo_manager: @@ -581,7 +597,7 @@ packages: description: name: photo_manager sha256: a0d9a7a9bc35eda02d33766412bde6d883a8b0acb86bbe37dac5f691a0894e8a - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.7.1" photo_manager_image_provider: @@ -589,7 +605,7 @@ packages: description: name: photo_manager_image_provider sha256: b6015b67b32f345f57cf32c126f871bced2501236c405aafaefa885f7c821e4f - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" photo_view: @@ -597,7 +613,7 @@ packages: description: name: photo_view sha256: "1fc3d970a91295fbd1364296575f854c9863f225505c28c46e0a03e48960c75e" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.15.0" platform: @@ -605,7 +621,7 @@ packages: description: name: platform sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.6" plugin_platform_interface: @@ -613,7 +629,7 @@ packages: description: name: plugin_platform_interface sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.8" pointycastle: @@ -629,7 +645,7 @@ packages: description: name: provider sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.5" shared_preferences: @@ -637,7 +653,7 @@ packages: description: name: shared_preferences sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.3" shared_preferences_android: @@ -645,7 +661,7 @@ packages: description: name: shared_preferences_android sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.10" shared_preferences_foundation: @@ -653,7 +669,7 @@ packages: description: name: shared_preferences_foundation sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.4" shared_preferences_linux: @@ -661,7 +677,7 @@ packages: description: name: shared_preferences_linux sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" shared_preferences_platform_interface: @@ -669,7 +685,7 @@ packages: description: name: shared_preferences_platform_interface sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" shared_preferences_web: @@ -677,7 +693,7 @@ packages: description: name: shared_preferences_web sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.3" shared_preferences_windows: @@ -685,7 +701,7 @@ packages: description: name: shared_preferences_windows sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" simple_gesture_detector: @@ -693,7 +709,7 @@ packages: description: name: simple_gesture_detector sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1" sky_engine: @@ -706,7 +722,7 @@ packages: description: name: source_span sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.1" stack_trace: @@ -714,7 +730,7 @@ packages: description: name: stack_trace sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.12.1" stream_channel: @@ -722,7 +738,7 @@ packages: description: name: stream_channel sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" stream_transform: @@ -738,7 +754,7 @@ packages: description: name: string_scanner sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" table_calendar: @@ -746,7 +762,7 @@ packages: description: name: table_calendar sha256: "0c0c6219878b363a2d5f40c7afb159d845f253d061dc3c822aa0d5fe0f721982" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.0" term_glyph: @@ -754,7 +770,7 @@ packages: description: name: term_glyph sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.2" test_api: @@ -762,7 +778,7 @@ packages: description: name: test_api sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.4" typed_data: @@ -770,7 +786,7 @@ packages: description: name: typed_data sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" vector_math: @@ -778,7 +794,7 @@ packages: description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" video_player: @@ -786,7 +802,7 @@ packages: description: name: video_player sha256: "0d55b1f1a31e5ad4c4967bfaa8ade0240b07d20ee4af1dfef5f531056512961a" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.10.0" video_player_android: @@ -794,7 +810,7 @@ packages: description: name: video_player_android sha256: "4a5135754a62dbc827a64a42ef1f8ed72c962e191c97e2d48744225c2b9ebb73" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.7" video_player_avfoundation: @@ -802,7 +818,7 @@ packages: description: name: video_player_avfoundation sha256: "9fedd55023249f3a02738c195c906b4e530956191febf0838e37d0dac912f953" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.0" video_player_platform_interface: @@ -810,7 +826,7 @@ packages: description: name: video_player_platform_interface sha256: cf2a1d29a284db648fd66cbd18aacc157f9862d77d2cc790f6f9678a46c1db5a - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.4.0" video_player_web: @@ -818,7 +834,7 @@ packages: description: name: video_player_web sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" visibility_detector: @@ -826,23 +842,23 @@ packages: description: name: visibility_detector sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.0+2" vm_service: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 + url: "https://pub.flutter-io.cn" source: hosted - version: "14.3.1" + version: "15.0.0" web: dependency: transitive description: name: web sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" webview_flutter: @@ -850,39 +866,39 @@ packages: description: name: webview_flutter sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "4.13.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: f6e6afef6e234801da77170f7a1847ded8450778caf2fe13979d140484be3678 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: "769f34fc9855f7d7789b786b79b7c37a60e92ff08f71e3a429208d7f5b81d944" + url: "https://pub.flutter-io.cn" source: hosted - version: "4.7.0" + version: "4.8.0" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.13.1" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: "71523b9048cf510cfa1fd4e0a3fa5e476a66e0884d5df51d59d5023dba237107" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.22.0" + version: "3.22.1" wechat_assets_picker: dependency: "direct main" description: name: wechat_assets_picker sha256: cafe3d32564ed3cacf9822f251941f7b44fe9885c17c8de4fca7e939a459e1ef - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "9.5.1" wechat_picker_library: @@ -890,23 +906,23 @@ packages: description: name: wechat_picker_library sha256: a42e09cb85b15fc9410f6a69671371cc60aa99c4a1f7967f6593a7f665f6f47a - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" win32: dependency: transitive description: name: win32 - sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03" + url: "https://pub.flutter-io.cn" source: hosted - version: "5.13.0" + version: "5.14.0" xdg_directories: dependency: transitive description: name: xdg_directories sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" xml: @@ -914,9 +930,9 @@ packages: description: name: xml sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.5.0" sdks: - dart: ">=3.7.0 <4.0.0" + dart: ">=3.8.0 <4.0.0" flutter: ">=3.29.0" diff --git a/pubspec.yaml b/pubspec.yaml index 3401787..cb3609f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,10 +57,10 @@ dependencies: #RSA 加密库 encrypt: ^5.0.3 pointycastle: ^3.6.2 - #网页页面加载 - webview_flutter: ^4.4.0 - path_provider: ^2.0.1 + camera: ^0.11.2 + #富文本查看 + flutter_html: ^3.0.0 dev_dependencies: