Showing
17 changed files
with
1052 additions
and
252 deletions
| @@ -220,6 +220,8 @@ class _HrvTrendSection extends StatefulWidget { | @@ -220,6 +220,8 @@ class _HrvTrendSection extends StatefulWidget { | ||
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | class _HrvTrendSectionState extends State<_HrvTrendSection> { | 222 | class _HrvTrendSectionState extends State<_HrvTrendSection> { |
| 223 | + static const _hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 224 | + | ||
| 223 | late final HrvReportLogic _logic; | 225 | late final HrvReportLogic _logic; |
| 224 | late final Worker _periodWorker; | 226 | late final Worker _periodWorker; |
| 225 | late final Worker _dateWorker; | 227 | late final Worker _dateWorker; |
| @@ -260,14 +262,27 @@ class _HrvTrendSectionState extends State<_HrvTrendSection> { | @@ -260,14 +262,27 @@ class _HrvTrendSectionState extends State<_HrvTrendSection> { | ||
| 260 | Future<void> _syncExternalQuery() async { | 262 | Future<void> _syncExternalQuery() async { |
| 261 | _syncingExternalQuery = true; | 263 | _syncingExternalQuery = true; |
| 262 | _logic.targetUserId.value = widget.query.targetUserId; | 264 | _logic.targetUserId.value = widget.query.targetUserId; |
| 265 | + _logHrvTrend( | ||
| 266 | + 'section_syncExternalQuery_start period=${widget.query.period.name} ' | ||
| 267 | + 'date=${widget.query.date} targetUserId=${widget.query.targetUserId} ' | ||
| 268 | + 'isVip=${widget.isVip}', | ||
| 269 | + ); | ||
| 263 | try { | 270 | try { |
| 264 | if (widget.isVip) { | 271 | if (widget.isVip) { |
| 265 | - await _logic.selectQuery(widget.query.period, widget.query.date); | 272 | + await _logic.selectQuery( |
| 273 | + widget.query.period, | ||
| 274 | + widget.query.date, | ||
| 275 | + forceRefresh: false, | ||
| 276 | + ); | ||
| 266 | } else { | 277 | } else { |
| 267 | _logic.initializeQuery(widget.query.period, widget.query.date); | 278 | _logic.initializeQuery(widget.query.period, widget.query.date); |
| 268 | } | 279 | } |
| 269 | } finally { | 280 | } finally { |
| 270 | _syncingExternalQuery = false; | 281 | _syncingExternalQuery = false; |
| 282 | + _logHrvTrend( | ||
| 283 | + 'section_syncExternalQuery_finish period=${widget.query.period.name} ' | ||
| 284 | + 'date=${widget.query.date}', | ||
| 285 | + ); | ||
| 271 | } | 286 | } |
| 272 | } | 287 | } |
| 273 | 288 | ||
| @@ -281,6 +296,11 @@ class _HrvTrendSectionState extends State<_HrvTrendSection> { | @@ -281,6 +296,11 @@ class _HrvTrendSectionState extends State<_HrvTrendSection> { | ||
| 281 | Future.microtask(() { | 296 | Future.microtask(() { |
| 282 | _queryNotificationScheduled = false; | 297 | _queryNotificationScheduled = false; |
| 283 | if (!mounted || _syncingExternalQuery || !widget.isSelected) return; | 298 | if (!mounted || _syncingExternalQuery || !widget.isSelected) return; |
| 299 | + _logHrvTrend( | ||
| 300 | + 'section_notifyParentQueryChanged ' | ||
| 301 | + 'period=${_logic.selectedPeriod.value.name} ' | ||
| 302 | + 'date=${_logic.selectedDate.value}', | ||
| 303 | + ); | ||
| 284 | widget.onQueryChanged( | 304 | widget.onQueryChanged( |
| 285 | _logic.selectedPeriod.value, | 305 | _logic.selectedPeriod.value, |
| 286 | _logic.selectedDate.value, | 306 | _logic.selectedDate.value, |
| @@ -288,6 +308,10 @@ class _HrvTrendSectionState extends State<_HrvTrendSection> { | @@ -288,6 +308,10 @@ class _HrvTrendSectionState extends State<_HrvTrendSection> { | ||
| 288 | }); | 308 | }); |
| 289 | } | 309 | } |
| 290 | 310 | ||
| 311 | + void _logHrvTrend(String message) { | ||
| 312 | + debugPrint('$_hrvTrendLogMarker $message'); | ||
| 313 | + } | ||
| 314 | + | ||
| 291 | @override | 315 | @override |
| 292 | void dispose() { | 316 | void dispose() { |
| 293 | _periodWorker.dispose(); | 317 | _periodWorker.dispose(); |
| 1 | +import 'package:flutter/foundation.dart'; | ||
| 1 | import 'package:get/get.dart'; | 2 | import 'package:get/get.dart'; |
| 3 | + | ||
| 2 | import 'trend_period_controller.dart'; | 4 | import 'trend_period_controller.dart'; |
| 3 | 5 | ||
| 4 | /// HRV 心率变异性 专属 Controller | 6 | /// HRV 心率变异性 专属 Controller |
| @@ -11,29 +13,35 @@ class HrvController extends TrendPeriodController { | @@ -11,29 +13,35 @@ class HrvController extends TrendPeriodController { | ||
| 11 | 13 | ||
| 12 | @override | 14 | @override |
| 13 | void loadData() { | 15 | void loadData() { |
| 16 | + final stopwatch = Stopwatch()..start(); | ||
| 17 | + _log('legacy_load_start period=${currentPeriod.value.name} ' | ||
| 18 | + 'offset=${dateOffset.value}'); | ||
| 14 | isLoading.value = true; | 19 | isLoading.value = true; |
| 15 | - | ||
| 16 | - // 模拟 API 延迟加载 | ||
| 17 | - Future.delayed(const Duration(milliseconds: 300), () { | ||
| 18 | - final offset = dateOffset.value; | ||
| 19 | - | ||
| 20 | - // 依据时间范围偏移动态渲染不同数据,模拟真实 API 拉取效果 | ||
| 21 | - averageHrv.value = '${46 + offset}'; | ||
| 22 | - changeHrv.value = offset >= 0 ? '+3' : '${offset * 2}'; | ||
| 23 | - | ||
| 24 | - chartData.value = [ | ||
| 25 | - 42.0 + offset, | ||
| 26 | - 48.0 - offset, | ||
| 27 | - 55.0 + offset * 2, | ||
| 28 | - 46.0 - offset, | ||
| 29 | - 52.0 + offset, | ||
| 30 | - 58.0 + offset * 3, | ||
| 31 | - 50.0 - offset * 2, | ||
| 32 | - ].map((e) => e.clamp(20.0, 80.0)).toList(); | ||
| 33 | - | ||
| 34 | - chartLabels.value = ['一', '二', '三', '四', '五', '六', '日']; | ||
| 35 | - | ||
| 36 | - isLoading.value = false; | ||
| 37 | - }); | 20 | + |
| 21 | + final offset = dateOffset.value; | ||
| 22 | + | ||
| 23 | + // 依据时间范围偏移动态渲染不同数据,模拟真实 API 拉取效果 | ||
| 24 | + averageHrv.value = '${46 + offset}'; | ||
| 25 | + changeHrv.value = offset >= 0 ? '+3' : '${offset * 2}'; | ||
| 26 | + | ||
| 27 | + chartData.value = [ | ||
| 28 | + 42.0 + offset, | ||
| 29 | + 48.0 - offset, | ||
| 30 | + 55.0 + offset * 2, | ||
| 31 | + 46.0 - offset, | ||
| 32 | + 52.0 + offset, | ||
| 33 | + 58.0 + offset * 3, | ||
| 34 | + 50.0 - offset * 2, | ||
| 35 | + ].map((e) => e.clamp(20.0, 80.0)).toList(); | ||
| 36 | + | ||
| 37 | + chartLabels.value = ['一', '二', '三', '四', '五', '六', '日']; | ||
| 38 | + | ||
| 39 | + isLoading.value = false; | ||
| 40 | + _log('legacy_load_finish period=${currentPeriod.value.name} ' | ||
| 41 | + 'count=${chartData.length} elapsedMs=${stopwatch.elapsedMilliseconds}'); | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + void _log(String message) { | ||
| 45 | + debugPrint('[OHOS_HRV_TREND_PROFILE] $message'); | ||
| 38 | } | 46 | } |
| 39 | } | 47 | } |
| @@ -5,6 +5,7 @@ import 'package:doublefeel_flutter/data/datasource/health/health_datasource.dart | @@ -5,6 +5,7 @@ import 'package:doublefeel_flutter/data/datasource/health/health_datasource.dart | ||
| 5 | import 'package:doublefeel_flutter/data/datasource/health/health_datasource_wrapper.dart'; | 5 | import 'package:doublefeel_flutter/data/datasource/health/health_datasource_wrapper.dart'; |
| 6 | import 'package:doublefeel_flutter/data/datasource/health/health_local_datasource.dart'; | 6 | import 'package:doublefeel_flutter/data/datasource/health/health_local_datasource.dart'; |
| 7 | import 'package:doublefeel_flutter/data/datasource/health/health_remote_datasource.dart'; | 7 | import 'package:doublefeel_flutter/data/datasource/health/health_remote_datasource.dart'; |
| 8 | +import 'package:flutter/foundation.dart'; | ||
| 8 | import 'package:get/get.dart'; | 9 | import 'package:get/get.dart'; |
| 9 | 10 | ||
| 10 | import '../../report_common/controllers/report_period_logic.dart'; | 11 | import '../../report_common/controllers/report_period_logic.dart'; |
| @@ -31,6 +32,7 @@ class HrvReportLogic extends ReportPeriodLogic { | @@ -31,6 +32,7 @@ class HrvReportLogic extends ReportPeriodLogic { | ||
| 31 | final yearlyReport = Rxn<YearlyHrvReport>(); | 32 | final yearlyReport = Rxn<YearlyHrvReport>(); |
| 32 | final HrvReportRepository repository; | 33 | final HrvReportRepository repository; |
| 33 | final _myUserId = Get.find<UserStateService>().userId; | 34 | final _myUserId = Get.find<UserStateService>().userId; |
| 35 | + static const _logMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 34 | bool get isMySelf => | 36 | bool get isMySelf => |
| 35 | targetUserId.value == null || _myUserId == targetUserId.value; | 37 | targetUserId.value == null || _myUserId == targetUserId.value; |
| 36 | 38 | ||
| @@ -49,27 +51,53 @@ class HrvReportLogic extends ReportPeriodLogic { | @@ -49,27 +51,53 @@ class HrvReportLogic extends ReportPeriodLogic { | ||
| 49 | 51 | ||
| 50 | @override | 52 | @override |
| 51 | Future<void> loadReport() async { | 53 | Future<void> loadReport() async { |
| 54 | + final stopwatch = Stopwatch()..start(); | ||
| 55 | + final period = selectedPeriod.value; | ||
| 56 | + final date = selectedDate.value; | ||
| 57 | + _log( | ||
| 58 | + 'logic_load_start period=${period.name} date=$date ' | ||
| 59 | + 'targetUserId=${targetUserId.value} isMySelf=$isMySelf', | ||
| 60 | + ); | ||
| 52 | isLoading.value = !isMySelf; | 61 | isLoading.value = !isMySelf; |
| 53 | 62 | ||
| 54 | try { | 63 | try { |
| 55 | - if (selectedPeriod.value == ReportPeriod.year) { | 64 | + if (period == ReportPeriod.year) { |
| 56 | yearlyReport.value = await repository.getYearlyReport( | 65 | yearlyReport.value = await repository.getYearlyReport( |
| 57 | - selectedDate.value.year, | 66 | + date.year, |
| 58 | targetUserId: targetUserId.value, | 67 | targetUserId: targetUserId.value, |
| 59 | ); | 68 | ); |
| 60 | - } else if (selectedPeriod.value == ReportPeriod.month) { | 69 | + _log( |
| 70 | + 'logic_assign_finish period=${period.name} ' | ||
| 71 | + 'days=${yearlyReport.value?.days.length ?? 0} ' | ||
| 72 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 73 | + ); | ||
| 74 | + } else if (period == ReportPeriod.month) { | ||
| 61 | monthlyReport.value = await repository.getMonthlyReport( | 75 | monthlyReport.value = await repository.getMonthlyReport( |
| 62 | monthStart, | 76 | monthStart, |
| 63 | targetUserId: targetUserId.value, | 77 | targetUserId: targetUserId.value, |
| 64 | ); | 78 | ); |
| 79 | + _log( | ||
| 80 | + 'logic_assign_finish period=${period.name} ' | ||
| 81 | + 'days=${monthlyReport.value?.days.length ?? 0} ' | ||
| 82 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 83 | + ); | ||
| 65 | } else { | 84 | } else { |
| 66 | weeklyReport.value = await repository.getWeeklyReport( | 85 | weeklyReport.value = await repository.getWeeklyReport( |
| 67 | weekStart, | 86 | weekStart, |
| 68 | targetUserId: targetUserId.value, | 87 | targetUserId: targetUserId.value, |
| 69 | ); | 88 | ); |
| 89 | + _log( | ||
| 90 | + 'logic_assign_finish period=${period.name} ' | ||
| 91 | + 'days=${weeklyReport.value?.days.length ?? 0} ' | ||
| 92 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 93 | + ); | ||
| 70 | } | 94 | } |
| 71 | } finally { | 95 | } finally { |
| 72 | isLoading.value = false; | 96 | isLoading.value = false; |
| 97 | + _log( | ||
| 98 | + 'logic_load_finish period=$period date=$date ' | ||
| 99 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 100 | + ); | ||
| 73 | } | 101 | } |
| 74 | } | 102 | } |
| 75 | 103 | ||
| @@ -78,4 +106,8 @@ class HrvReportLogic extends ReportPeriodLogic { | @@ -78,4 +106,8 @@ class HrvReportLogic extends ReportPeriodLogic { | ||
| 78 | targetUserId.value = userId; | 106 | targetUserId.value = userId; |
| 79 | return loadReport(); | 107 | return loadReport(); |
| 80 | } | 108 | } |
| 109 | + | ||
| 110 | + void _log(String message) { | ||
| 111 | + debugPrint('$_logMarker $message'); | ||
| 112 | + } | ||
| 81 | } | 113 | } |
| 1 | import 'package:doublefeel_flutter/core/result/app_result.dart'; | 1 | import 'package:doublefeel_flutter/core/result/app_result.dart'; |
| 2 | import 'package:doublefeel_flutter/data/datasource/health/health_datasource.dart'; | 2 | import 'package:doublefeel_flutter/data/datasource/health/health_datasource.dart'; |
| 3 | import 'package:doublefeel_flutter/data/models/health/hrv/hrv_statistics_data.dart'; | 3 | import 'package:doublefeel_flutter/data/models/health/hrv/hrv_statistics_data.dart'; |
| 4 | +import 'package:flutter/foundation.dart'; | ||
| 4 | 5 | ||
| 5 | import '../models/hrv_report_models.dart'; | 6 | import '../models/hrv_report_models.dart'; |
| 6 | 7 | ||
| @@ -27,6 +28,7 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | @@ -27,6 +28,7 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | ||
| 27 | static const _weekDateRangeType = 0; | 28 | static const _weekDateRangeType = 0; |
| 28 | static const _monthDateRangeType = 1; | 29 | static const _monthDateRangeType = 1; |
| 29 | static const _yearDateRangeType = 2; | 30 | static const _yearDateRangeType = 2; |
| 31 | + static const _logMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 30 | 32 | ||
| 31 | final HealthDataSource _healthDataSource; | 33 | final HealthDataSource _healthDataSource; |
| 32 | 34 | ||
| @@ -36,15 +38,27 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | @@ -36,15 +38,27 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | ||
| 36 | int? targetUserId, | 38 | int? targetUserId, |
| 37 | }) async { | 39 | }) async { |
| 38 | final start = DateTime(weekStart.year, weekStart.month, weekStart.day); | 40 | final start = DateTime(weekStart.year, weekStart.month, weekStart.day); |
| 41 | + final stopwatch = Stopwatch()..start(); | ||
| 42 | + _log( | ||
| 43 | + 'datasource_week_start weekStart=$start ' | ||
| 44 | + 'targetUserId=$targetUserId', | ||
| 45 | + ); | ||
| 39 | final result = await _healthDataSource.getHrvStatistics( | 46 | final result = await _healthDataSource.getHrvStatistics( |
| 40 | _weekDateRangeType, | 47 | _weekDateRangeType, |
| 41 | _dateKey(start), | 48 | _dateKey(start), |
| 42 | queryUserId: targetUserId, | 49 | queryUserId: targetUserId, |
| 43 | ); | 50 | ); |
| 44 | - return switch (result) { | 51 | + final fetchElapsedMs = stopwatch.elapsedMilliseconds; |
| 52 | + final report = switch (result) { | ||
| 45 | AppSuccess(:final data) => _weeklyReportFromStatistics(start, data), | 53 | AppSuccess(:final data) => _weeklyReportFromStatistics(start, data), |
| 46 | AppFailure() => WeeklyHrvReport.empty(start), | 54 | AppFailure() => WeeklyHrvReport.empty(start), |
| 47 | }; | 55 | }; |
| 56 | + _log( | ||
| 57 | + 'datasource_week_finish success=${result is AppSuccess} ' | ||
| 58 | + 'days=${report.days.length} fetchElapsedMs=$fetchElapsedMs ' | ||
| 59 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 60 | + ); | ||
| 61 | + return report; | ||
| 48 | } | 62 | } |
| 49 | 63 | ||
| 50 | @override | 64 | @override |
| @@ -53,15 +67,27 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | @@ -53,15 +67,27 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | ||
| 53 | int? targetUserId, | 67 | int? targetUserId, |
| 54 | }) async { | 68 | }) async { |
| 55 | final start = DateTime(monthStart.year, monthStart.month); | 69 | final start = DateTime(monthStart.year, monthStart.month); |
| 70 | + final stopwatch = Stopwatch()..start(); | ||
| 71 | + _log( | ||
| 72 | + 'datasource_month_start monthStart=$start ' | ||
| 73 | + 'targetUserId=$targetUserId', | ||
| 74 | + ); | ||
| 56 | final result = await _healthDataSource.getHrvStatistics( | 75 | final result = await _healthDataSource.getHrvStatistics( |
| 57 | _monthDateRangeType, | 76 | _monthDateRangeType, |
| 58 | _dateKey(start), | 77 | _dateKey(start), |
| 59 | queryUserId: targetUserId, | 78 | queryUserId: targetUserId, |
| 60 | ); | 79 | ); |
| 61 | - return switch (result) { | 80 | + final fetchElapsedMs = stopwatch.elapsedMilliseconds; |
| 81 | + final report = switch (result) { | ||
| 62 | AppSuccess(:final data) => _monthlyReportFromStatistics(start, data), | 82 | AppSuccess(:final data) => _monthlyReportFromStatistics(start, data), |
| 63 | AppFailure() => MonthlyHrvReport.empty(start), | 83 | AppFailure() => MonthlyHrvReport.empty(start), |
| 64 | }; | 84 | }; |
| 85 | + _log( | ||
| 86 | + 'datasource_month_finish success=${result is AppSuccess} ' | ||
| 87 | + 'days=${report.days.length} fetchElapsedMs=$fetchElapsedMs ' | ||
| 88 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 89 | + ); | ||
| 90 | + return report; | ||
| 65 | } | 91 | } |
| 66 | 92 | ||
| 67 | @override | 93 | @override |
| @@ -70,15 +96,28 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | @@ -70,15 +96,28 @@ class ApiHrvReportDataSource implements HrvReportDataSource { | ||
| 70 | int? targetUserId, | 96 | int? targetUserId, |
| 71 | }) async { | 97 | }) async { |
| 72 | final start = DateTime(year); | 98 | final start = DateTime(year); |
| 99 | + final stopwatch = Stopwatch()..start(); | ||
| 100 | + _log('datasource_year_start year=$year targetUserId=$targetUserId'); | ||
| 73 | final result = await _healthDataSource.getHrvStatistics( | 101 | final result = await _healthDataSource.getHrvStatistics( |
| 74 | _yearDateRangeType, | 102 | _yearDateRangeType, |
| 75 | _dateKey(start), | 103 | _dateKey(start), |
| 76 | queryUserId: targetUserId, | 104 | queryUserId: targetUserId, |
| 77 | ); | 105 | ); |
| 78 | - return switch (result) { | 106 | + final fetchElapsedMs = stopwatch.elapsedMilliseconds; |
| 107 | + final report = switch (result) { | ||
| 79 | AppSuccess(:final data) => _yearlyReportFromStatistics(year, data), | 108 | AppSuccess(:final data) => _yearlyReportFromStatistics(year, data), |
| 80 | AppFailure() => YearlyHrvReport.empty(year), | 109 | AppFailure() => YearlyHrvReport.empty(year), |
| 81 | }; | 110 | }; |
| 111 | + _log( | ||
| 112 | + 'datasource_year_finish success=${result is AppSuccess} ' | ||
| 113 | + 'days=${report.days.length} fetchElapsedMs=$fetchElapsedMs ' | ||
| 114 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 115 | + ); | ||
| 116 | + return report; | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + static void _log(String message) { | ||
| 120 | + debugPrint('$_logMarker $message'); | ||
| 82 | } | 121 | } |
| 83 | 122 | ||
| 84 | WeeklyHrvReport _weeklyReportFromStatistics( | 123 | WeeklyHrvReport _weeklyReportFromStatistics( |
| 1 | +import 'package:flutter/foundation.dart'; | ||
| 2 | + | ||
| 1 | import '../models/hrv_report_models.dart'; | 3 | import '../models/hrv_report_models.dart'; |
| 2 | import 'hrv_report_datasource.dart'; | 4 | import 'hrv_report_datasource.dart'; |
| 3 | 5 | ||
| @@ -22,34 +24,67 @@ class HrvReportRepositoryImpl implements HrvReportRepository { | @@ -22,34 +24,67 @@ class HrvReportRepositoryImpl implements HrvReportRepository { | ||
| 22 | const HrvReportRepositoryImpl({required this.dataSource}); | 24 | const HrvReportRepositoryImpl({required this.dataSource}); |
| 23 | 25 | ||
| 24 | final HrvReportDataSource dataSource; | 26 | final HrvReportDataSource dataSource; |
| 27 | + static const _logMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 25 | 28 | ||
| 26 | @override | 29 | @override |
| 27 | Future<WeeklyHrvReport> getWeeklyReport( | 30 | Future<WeeklyHrvReport> getWeeklyReport( |
| 28 | DateTime weekStart, { | 31 | DateTime weekStart, { |
| 29 | int? targetUserId, | 32 | int? targetUserId, |
| 30 | - }) { | ||
| 31 | - return dataSource.fetchWeeklyReport( | 33 | + }) async { |
| 34 | + final stopwatch = Stopwatch()..start(); | ||
| 35 | + _log( | ||
| 36 | + 'repository_week_start weekStart=$weekStart targetUserId=$targetUserId'); | ||
| 37 | + final report = await dataSource.fetchWeeklyReport( | ||
| 32 | weekStart, | 38 | weekStart, |
| 33 | targetUserId: targetUserId, | 39 | targetUserId: targetUserId, |
| 34 | ); | 40 | ); |
| 41 | + _log( | ||
| 42 | + 'repository_week_finish days=${report.days.length} ' | ||
| 43 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 44 | + ); | ||
| 45 | + return report; | ||
| 35 | } | 46 | } |
| 36 | 47 | ||
| 37 | @override | 48 | @override |
| 38 | Future<MonthlyHrvReport> getMonthlyReport( | 49 | Future<MonthlyHrvReport> getMonthlyReport( |
| 39 | DateTime monthStart, { | 50 | DateTime monthStart, { |
| 40 | int? targetUserId, | 51 | int? targetUserId, |
| 41 | - }) { | ||
| 42 | - return dataSource.fetchMonthlyReport( | 52 | + }) async { |
| 53 | + final stopwatch = Stopwatch()..start(); | ||
| 54 | + _log( | ||
| 55 | + 'repository_month_start monthStart=$monthStart ' | ||
| 56 | + 'targetUserId=$targetUserId', | ||
| 57 | + ); | ||
| 58 | + final report = await dataSource.fetchMonthlyReport( | ||
| 43 | monthStart, | 59 | monthStart, |
| 44 | targetUserId: targetUserId, | 60 | targetUserId: targetUserId, |
| 45 | ); | 61 | ); |
| 62 | + _log( | ||
| 63 | + 'repository_month_finish days=${report.days.length} ' | ||
| 64 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 65 | + ); | ||
| 66 | + return report; | ||
| 46 | } | 67 | } |
| 47 | 68 | ||
| 48 | @override | 69 | @override |
| 49 | Future<YearlyHrvReport> getYearlyReport( | 70 | Future<YearlyHrvReport> getYearlyReport( |
| 50 | int year, { | 71 | int year, { |
| 51 | int? targetUserId, | 72 | int? targetUserId, |
| 52 | - }) { | ||
| 53 | - return dataSource.fetchYearlyReport(year, targetUserId: targetUserId); | 73 | + }) async { |
| 74 | + final stopwatch = Stopwatch()..start(); | ||
| 75 | + _log('repository_year_start year=$year targetUserId=$targetUserId'); | ||
| 76 | + final report = await dataSource.fetchYearlyReport( | ||
| 77 | + year, | ||
| 78 | + targetUserId: targetUserId, | ||
| 79 | + ); | ||
| 80 | + _log( | ||
| 81 | + 'repository_year_finish days=${report.days.length} ' | ||
| 82 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 83 | + ); | ||
| 84 | + return report; | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + static void _log(String message) { | ||
| 88 | + debugPrint('$_logMarker $message'); | ||
| 54 | } | 89 | } |
| 55 | } | 90 | } |
| @@ -217,6 +217,11 @@ class _HrvPeriodBar extends StatelessWidget { | @@ -217,6 +217,11 @@ class _HrvPeriodBar extends StatelessWidget { | ||
| 217 | child: GestureDetector( | 217 | child: GestureDetector( |
| 218 | behavior: HitTestBehavior.opaque, | 218 | behavior: HitTestBehavior.opaque, |
| 219 | onTap: () { | 219 | onTap: () { |
| 220 | + debugPrint( | ||
| 221 | + '[OHOS_HRV_TREND_PROFILE] period_tab_tap ' | ||
| 222 | + 'from=${selectedPeriod.name} to=${period.name} ' | ||
| 223 | + 'locked=${lockedPeriods.contains(period)}', | ||
| 224 | + ); | ||
| 220 | if (lockedPeriods.contains(period)) { | 225 | if (lockedPeriods.contains(period)) { |
| 221 | onLockedPeriodTap(period); | 226 | onLockedPeriodTap(period); |
| 222 | } else { | 227 | } else { |
| @@ -140,17 +140,31 @@ abstract class ReportPeriodLogic { | @@ -140,17 +140,31 @@ abstract class ReportPeriodLogic { | ||
| 140 | Future<void> selectPeriod( | 140 | Future<void> selectPeriod( |
| 141 | ReportPeriod period, { | 141 | ReportPeriod period, { |
| 142 | bool? forceRefresh, | 142 | bool? forceRefresh, |
| 143 | - }) { | 143 | + }) async { |
| 144 | + final stopwatch = Stopwatch()..start(); | ||
| 144 | final nextPeriod = normalizePeriod(period); | 145 | final nextPeriod = normalizePeriod(period); |
| 145 | final shouldRefresh = forceRefresh ?? this.forceRefresh; | 146 | final shouldRefresh = forceRefresh ?? this.forceRefresh; |
| 147 | + _logTrendProfile( | ||
| 148 | + 'selectPeriod_start from=${selectedPeriod.value.name} ' | ||
| 149 | + 'to=${nextPeriod.name} selectedDate=${selectedDate.value} ' | ||
| 150 | + 'forceRefresh=$shouldRefresh', | ||
| 151 | + ); | ||
| 146 | if (!shouldRefresh && selectedPeriod.value == nextPeriod) { | 152 | if (!shouldRefresh && selectedPeriod.value == nextPeriod) { |
| 147 | - return Future.value(); | 153 | + _logTrendProfile( |
| 154 | + 'selectPeriod_skip_same period=${nextPeriod.name} ' | ||
| 155 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 156 | + ); | ||
| 157 | + return; | ||
| 148 | } | 158 | } |
| 149 | final nextDate = _dateForPeriodTransition(nextPeriod); | 159 | final nextDate = _dateForPeriodTransition(nextPeriod); |
| 150 | selectedPeriod.value = nextPeriod; | 160 | selectedPeriod.value = nextPeriod; |
| 151 | selectedDate.value = nextDate; | 161 | selectedDate.value = nextDate; |
| 152 | _setAnchorFor(nextPeriod, nextDate); | 162 | _setAnchorFor(nextPeriod, nextDate); |
| 153 | - return loadReport(); | 163 | + await loadReport(); |
| 164 | + _logTrendProfile( | ||
| 165 | + 'selectPeriod_finish period=${nextPeriod.name} nextDate=$nextDate ' | ||
| 166 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 167 | + ); | ||
| 154 | } | 168 | } |
| 155 | 169 | ||
| 156 | Future<void> selectDate( | 170 | Future<void> selectDate( |
| @@ -327,5 +341,8 @@ abstract class ReportPeriodLogic { | @@ -327,5 +341,8 @@ abstract class ReportPeriodLogic { | ||
| 327 | final normalized = DateTime(date.year, date.month, date.day); | 341 | final normalized = DateTime(date.year, date.month, date.day); |
| 328 | return normalized.subtract(Duration(days: normalized.weekday - 1)); | 342 | return normalized.subtract(Duration(days: normalized.weekday - 1)); |
| 329 | } | 343 | } |
| 344 | +} | ||
| 330 | 345 | ||
| 346 | +void _logTrendProfile(String message) { | ||
| 347 | + debugPrint('[OHOS_HRV_TREND_PROFILE] $message'); | ||
| 331 | } | 348 | } |
| @@ -179,6 +179,19 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | @@ -179,6 +179,19 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | ||
| 179 | ); | 179 | ); |
| 180 | } | 180 | } |
| 181 | 181 | ||
| 182 | + Future<OhosHealthRawDataCalculationSyncSnapshot> | ||
| 183 | + syncCalculationRawDataSnapshot({ | ||
| 184 | + int? startTime, | ||
| 185 | + int? endTime, | ||
| 186 | + List<int>? dataTypes, | ||
| 187 | + }) { | ||
| 188 | + return _syncService.syncCalculationRawDataSnapshot( | ||
| 189 | + startTime: startTime, | ||
| 190 | + endTime: endTime, | ||
| 191 | + dataTypes: dataTypes, | ||
| 192 | + ); | ||
| 193 | + } | ||
| 194 | + | ||
| 182 | Future<OhosHealthRawDataSyncResult> syncRawData({ | 195 | Future<OhosHealthRawDataSyncResult> syncRawData({ |
| 183 | required int dataType, | 196 | required int dataType, |
| 184 | int? startTime, | 197 | int? startTime, |
| @@ -237,6 +250,26 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | @@ -237,6 +250,26 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | ||
| 237 | .toList(growable: false); | 250 | .toList(growable: false); |
| 238 | } | 251 | } |
| 239 | 252 | ||
| 253 | + List<HealthKitRawDataPoint> getRawDataFromSnapshot({ | ||
| 254 | + required OhosHealthRawDataMemorySnapshot snapshot, | ||
| 255 | + required int dataType, | ||
| 256 | + required int startTime, | ||
| 257 | + required int endTime, | ||
| 258 | + }) { | ||
| 259 | + return snapshot | ||
| 260 | + .query(dataType: dataType, startTime: startTime, endTime: endTime) | ||
| 261 | + .map( | ||
| 262 | + (item) => HealthKitRawDataPoint( | ||
| 263 | + dataType: dataType, | ||
| 264 | + startTime: item.dataTime, | ||
| 265 | + endTime: item.dataTime, | ||
| 266 | + value: _doublePayload(item.payload, 'value'), | ||
| 267 | + isMotionLike: _boolPayload(item.payload, 'is_motion_like'), | ||
| 268 | + ), | ||
| 269 | + ) | ||
| 270 | + .toList(growable: false); | ||
| 271 | + } | ||
| 272 | + | ||
| 240 | @override | 273 | @override |
| 241 | Future<List<HealthKitRawSleepDataPoint>> getRawSleepData( | 274 | Future<List<HealthKitRawSleepDataPoint>> getRawSleepData( |
| 242 | int startTime, | 275 | int startTime, |
| @@ -262,6 +295,21 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | @@ -262,6 +295,21 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | ||
| 262 | ]; | 295 | ]; |
| 263 | } | 296 | } |
| 264 | 297 | ||
| 298 | + List<HealthKitRawDataPoint> getRawSleepIntervalsFromSnapshot({ | ||
| 299 | + required OhosHealthRawDataMemorySnapshot snapshot, | ||
| 300 | + required int startTime, | ||
| 301 | + required int endTime, | ||
| 302 | + }) { | ||
| 303 | + return snapshot | ||
| 304 | + .query( | ||
| 305 | + dataType: OhosHealthRawDataType.sleepAnalysis, | ||
| 306 | + startTime: startTime, | ||
| 307 | + endTime: endTime, | ||
| 308 | + ) | ||
| 309 | + .map(_sleepPointFromItem) | ||
| 310 | + .toList(growable: false); | ||
| 311 | + } | ||
| 312 | + | ||
| 265 | @override | 313 | @override |
| 266 | Future<List<HealthKitRawActivityDataPoint>> getRawActivityData( | 314 | Future<List<HealthKitRawActivityDataPoint>> getRawActivityData( |
| 267 | int startTime, | 315 | int startTime, |
| @@ -342,6 +390,21 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | @@ -342,6 +390,21 @@ class OhosHealthRawDataSource implements HealthRawDataSource { | ||
| 342 | return items.map(_workoutPointFromItem).toList(growable: false); | 390 | return items.map(_workoutPointFromItem).toList(growable: false); |
| 343 | } | 391 | } |
| 344 | 392 | ||
| 393 | + List<HealthKitRawWorkoutDataPoint> getRawWorkoutDataFromSnapshot({ | ||
| 394 | + required OhosHealthRawDataMemorySnapshot snapshot, | ||
| 395 | + required int startTime, | ||
| 396 | + required int endTime, | ||
| 397 | + }) { | ||
| 398 | + return snapshot | ||
| 399 | + .query( | ||
| 400 | + dataType: OhosHealthRawDataType.workout, | ||
| 401 | + startTime: startTime, | ||
| 402 | + endTime: endTime, | ||
| 403 | + ) | ||
| 404 | + .map(_workoutPointFromItem) | ||
| 405 | + .toList(growable: false); | ||
| 406 | + } | ||
| 407 | + | ||
| 345 | HealthKitRawDataPoint _sleepPointFromItem(OhosHealthRawDataItem item) { | 408 | HealthKitRawDataPoint _sleepPointFromItem(OhosHealthRawDataItem item) { |
| 346 | return HealthKitRawDataPoint( | 409 | return HealthKitRawDataPoint( |
| 347 | dataType: item.dataType, | 410 | dataType: item.dataType, |
| @@ -2084,6 +2084,7 @@ class HealthRawStressLocalStore { | @@ -2084,6 +2084,7 @@ class HealthRawStressLocalStore { | ||
| 2084 | static const realtimeStressResultsTable = 'realtime_stress_results'; | 2084 | static const realtimeStressResultsTable = 'realtime_stress_results'; |
| 2085 | static const dailyStressResultsTable = 'daily_stress_results'; | 2085 | static const dailyStressResultsTable = 'daily_stress_results'; |
| 2086 | static const sleepResultsTable = 'sleep_results'; | 2086 | static const sleepResultsTable = 'sleep_results'; |
| 2087 | + static const hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 2087 | 2088 | ||
| 2088 | final Directory? _rootDirectory; | 2089 | final Directory? _rootDirectory; |
| 2089 | final DatabaseFactory? _databaseFactory; | 2090 | final DatabaseFactory? _databaseFactory; |
| @@ -2217,6 +2218,7 @@ class HealthRawStressLocalStore { | @@ -2217,6 +2218,7 @@ class HealthRawStressLocalStore { | ||
| 2217 | required int startTime, | 2218 | required int startTime, |
| 2218 | required int endTime, | 2219 | required int endTime, |
| 2219 | }) async { | 2220 | }) async { |
| 2221 | + final stopwatch = Stopwatch()..start(); | ||
| 2220 | final db = await _database(userId); | 2222 | final db = await _database(userId); |
| 2221 | final rows = await db.query( | 2223 | final rows = await db.query( |
| 2222 | hrvResultsTable, | 2224 | hrvResultsTable, |
| @@ -2224,7 +2226,13 @@ class HealthRawStressLocalStore { | @@ -2224,7 +2226,13 @@ class HealthRawStressLocalStore { | ||
| 2224 | whereArgs: [startTime, endTime], | 2226 | whereArgs: [startTime, endTime], |
| 2225 | orderBy: 'raw_end_time ASC', | 2227 | orderBy: 'raw_end_time ASC', |
| 2226 | ); | 2228 | ); |
| 2227 | - return rows.map(HealthRawHrvStressPoint.fromDb).toList(); | 2229 | + final points = rows.map(HealthRawHrvStressPoint.fromDb).toList(); |
| 2230 | + _logHrvTrend( | ||
| 2231 | + 'result_db_query_hrv_finish userId=$userId ' | ||
| 2232 | + 'startTime=$startTime endTime=$endTime rows=${rows.length} ' | ||
| 2233 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 2234 | + ); | ||
| 2235 | + return points; | ||
| 2228 | } | 2236 | } |
| 2229 | 2237 | ||
| 2230 | Future<List<HealthRawHrvStressPoint>> queryPendingHrvStressPoints({ | 2238 | Future<List<HealthRawHrvStressPoint>> queryPendingHrvStressPoints({ |
| @@ -2275,6 +2283,7 @@ class HealthRawStressLocalStore { | @@ -2275,6 +2283,7 @@ class HealthRawStressLocalStore { | ||
| 2275 | required int startDate, | 2283 | required int startDate, |
| 2276 | required int endDate, | 2284 | required int endDate, |
| 2277 | }) async { | 2285 | }) async { |
| 2286 | + final stopwatch = Stopwatch()..start(); | ||
| 2278 | final db = await _database(userId); | 2287 | final db = await _database(userId); |
| 2279 | final rows = await db.query( | 2288 | final rows = await db.query( |
| 2280 | dailyStressResultsTable, | 2289 | dailyStressResultsTable, |
| @@ -2282,7 +2291,13 @@ class HealthRawStressLocalStore { | @@ -2282,7 +2291,13 @@ class HealthRawStressLocalStore { | ||
| 2282 | whereArgs: [startDate, endDate], | 2291 | whereArgs: [startDate, endDate], |
| 2283 | orderBy: 'date ASC', | 2292 | orderBy: 'date ASC', |
| 2284 | ); | 2293 | ); |
| 2285 | - return rows.map(HealthRawDailyStressPoint.fromDb).toList(); | 2294 | + final points = rows.map(HealthRawDailyStressPoint.fromDb).toList(); |
| 2295 | + _logHrvTrend( | ||
| 2296 | + 'result_db_query_daily_stress_finish userId=$userId ' | ||
| 2297 | + 'startDate=$startDate endDate=$endDate rows=${rows.length} ' | ||
| 2298 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 2299 | + ); | ||
| 2300 | + return points; | ||
| 2286 | } | 2301 | } |
| 2287 | 2302 | ||
| 2288 | Future<List<HealthRawDailyStressPoint>> queryPendingDailyStressPoints({ | 2303 | Future<List<HealthRawDailyStressPoint>> queryPendingDailyStressPoints({ |
| @@ -3250,6 +3265,16 @@ CREATE TABLE IF NOT EXISTS $sleepResultsTable ( | @@ -3250,6 +3265,16 @@ CREATE TABLE IF NOT EXISTS $sleepResultsTable ( | ||
| 3250 | message.contains('code 2067'); | 3265 | message.contains('code 2067'); |
| 3251 | } | 3266 | } |
| 3252 | 3267 | ||
| 3268 | + void _logHrvTrend(String message) { | ||
| 3269 | + final taggedMessage = '$hrvTrendLogMarker $message'; | ||
| 3270 | + debugPrint(taggedMessage); | ||
| 3271 | + try { | ||
| 3272 | + AppLogger.i(taggedMessage); | ||
| 3273 | + } catch (_) { | ||
| 3274 | + // AppLogger may not be initialized in isolated test/bootstrap contexts. | ||
| 3275 | + } | ||
| 3276 | + } | ||
| 3277 | + | ||
| 3253 | int _currentUnixSeconds() { | 3278 | int _currentUnixSeconds() { |
| 3254 | return DateTime.now().millisecondsSinceEpoch ~/ 1000; | 3279 | return DateTime.now().millisecondsSinceEpoch ~/ 1000; |
| 3255 | } | 3280 | } |
| @@ -33,6 +33,8 @@ class OHOSHealthRawDataCoreService { | @@ -33,6 +33,8 @@ class OHOSHealthRawDataCoreService { | ||
| 33 | static const String _dailyStressLogMarker = '[OHOS_DAILY_STRESS_CALC]'; | 33 | static const String _dailyStressLogMarker = '[OHOS_DAILY_STRESS_CALC]'; |
| 34 | static const String _sleepCalcLogMarker = '[OHOS_SLEEP_CALC]'; | 34 | static const String _sleepCalcLogMarker = '[OHOS_SLEEP_CALC]'; |
| 35 | static const String _profileLogMarker = '[OHOS_HEALTH_RAW_PROFILE]'; | 35 | static const String _profileLogMarker = '[OHOS_HEALTH_RAW_PROFILE]'; |
| 36 | + static const String _timingLogMarker = '[OHOS_HEALTH_TIMING]'; | ||
| 37 | + static const String _hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 36 | 38 | ||
| 37 | OHOSHealthRawDataCoreService({ | 39 | OHOSHealthRawDataCoreService({ |
| 38 | HealthRawDataSource? rawDataSource, | 40 | HealthRawDataSource? rawDataSource, |
| @@ -261,15 +263,22 @@ class OHOSHealthRawDataCoreService { | @@ -261,15 +263,22 @@ class OHOSHealthRawDataCoreService { | ||
| 261 | final willSyncRawData = | 263 | final willSyncRawData = |
| 262 | hasAuthorization && _rawDataSource is OhosHealthRawDataSource; | 264 | hasAuthorization && _rawDataSource is OhosHealthRawDataSource; |
| 263 | final syncStartTime = willSyncRawData ? DateTime.now() : null; | 265 | final syncStartTime = willSyncRawData ? DateTime.now() : null; |
| 264 | - final syncResults = await _syncCalculationRawDataSafely( | 266 | + final syncSnapshot = await _syncCalculationRawDataSafely( |
| 265 | hasAuthorization: hasAuthorization, | 267 | hasAuthorization: hasAuthorization, |
| 266 | startTime: forceStartTime, | 268 | startTime: forceStartTime, |
| 267 | endTime: effectiveEndTime, | 269 | endTime: effectiveEndTime, |
| 268 | ); | 270 | ); |
| 271 | + final syncResults = | ||
| 272 | + syncSnapshot?.results ?? const <OhosHealthRawDataSyncResult>[]; | ||
| 269 | final syncElapsed = syncStartTime == null | 273 | final syncElapsed = syncStartTime == null |
| 270 | ? Duration.zero | 274 | ? Duration.zero |
| 271 | : DateTime.now().difference(syncStartTime); | 275 | : DateTime.now().difference(syncStartTime); |
| 272 | - final syncedRawStartTime = _earliestStoredTime(syncResults); | 276 | + _logInfo( |
| 277 | + '$_timingLogMarker fetch_all_finish userId=$userId ' | ||
| 278 | + 'elapsedMs=${syncElapsed.inMilliseconds}', | ||
| 279 | + ); | ||
| 280 | + final syncedRawStartTime = syncSnapshot?.rawData.earliestTime() ?? | ||
| 281 | + _earliestStoredTime(syncResults); | ||
| 273 | _logInfo( | 282 | _logInfo( |
| 274 | 'calculate_sync_finish startTime=$requestedStartTime ' | 283 | 'calculate_sync_finish startTime=$requestedStartTime ' |
| 275 | 'endTime=$effectiveEndTime syncedRawStartTime=$syncedRawStartTime ' | 284 | 'endTime=$effectiveEndTime syncedRawStartTime=$syncedRawStartTime ' |
| @@ -298,6 +307,7 @@ class OHOSHealthRawDataCoreService { | @@ -298,6 +307,7 @@ class OHOSHealthRawDataCoreService { | ||
| 298 | effectiveEndTime: effectiveEndTime, | 307 | effectiveEndTime: effectiveEndTime, |
| 299 | earliestStartTime: earliestStartTime, | 308 | earliestStartTime: earliestStartTime, |
| 300 | syncedRawStartTime: syncedRawStartTime, | 309 | syncedRawStartTime: syncedRawStartTime, |
| 310 | + rawDataSnapshot: syncSnapshot?.rawData, | ||
| 301 | readChunkDays: readChunkDays, | 311 | readChunkDays: readChunkDays, |
| 302 | ); | 312 | ); |
| 303 | } catch (error) { | 313 | } catch (error) { |
| @@ -323,6 +333,10 @@ class OHOSHealthRawDataCoreService { | @@ -323,6 +333,10 @@ class OHOSHealthRawDataCoreService { | ||
| 323 | 'sleep=${storedResult.result.sleepResults.length} ' | 333 | 'sleep=${storedResult.result.sleepResults.length} ' |
| 324 | 'elapsedMs=${calculationElapsed.inMilliseconds}', | 334 | 'elapsedMs=${calculationElapsed.inMilliseconds}', |
| 325 | ); | 335 | ); |
| 336 | + _logInfo( | ||
| 337 | + '$_timingLogMarker calculate_finish userId=$userId ' | ||
| 338 | + 'elapsedMs=${calculationElapsed.inMilliseconds}', | ||
| 339 | + ); | ||
| 326 | final uploadScheduleStopwatch = Stopwatch()..start(); | 340 | final uploadScheduleStopwatch = Stopwatch()..start(); |
| 327 | _scheduleResultUpload(); | 341 | _scheduleResultUpload(); |
| 328 | _profileLog( | 342 | _profileLog( |
| @@ -339,7 +353,7 @@ class OHOSHealthRawDataCoreService { | @@ -339,7 +353,7 @@ class OHOSHealthRawDataCoreService { | ||
| 339 | 'core_localNotification_finish userId=$userId ' | 353 | 'core_localNotification_finish userId=$userId ' |
| 340 | 'elapsedMs=${notificationStopwatch.elapsedMilliseconds}', | 354 | 'elapsedMs=${notificationStopwatch.elapsedMilliseconds}', |
| 341 | ); | 355 | ); |
| 342 | - if (_hasStoredRawData(syncResults) || | 356 | + if (_hasFetchedRawData(syncResults) || |
| 343 | _hasCalculatedResult(storedResult.result)) { | 357 | _hasCalculatedResult(storedResult.result)) { |
| 344 | _showDebugTimingToast( | 358 | _showDebugTimingToast( |
| 345 | syncElapsed: syncElapsed, | 359 | syncElapsed: syncElapsed, |
| @@ -372,6 +386,7 @@ class OHOSHealthRawDataCoreService { | @@ -372,6 +386,7 @@ class OHOSHealthRawDataCoreService { | ||
| 372 | required int effectiveEndTime, | 386 | required int effectiveEndTime, |
| 373 | required int earliestStartTime, | 387 | required int earliestStartTime, |
| 374 | required int? syncedRawStartTime, | 388 | required int? syncedRawStartTime, |
| 389 | + required OhosHealthRawDataMemorySnapshot? rawDataSnapshot, | ||
| 375 | required int readChunkDays, | 390 | required int readChunkDays, |
| 376 | }) async { | 391 | }) async { |
| 377 | final totalStopwatch = Stopwatch()..start(); | 392 | final totalStopwatch = Stopwatch()..start(); |
| @@ -486,10 +501,11 @@ class OHOSHealthRawDataCoreService { | @@ -486,10 +501,11 @@ class OHOSHealthRawDataCoreService { | ||
| 486 | ); | 501 | ); |
| 487 | 502 | ||
| 488 | final hrvFetchStopwatch = Stopwatch()..start(); | 503 | final hrvFetchStopwatch = Stopwatch()..start(); |
| 489 | - final hrvPoints = await _fetchRawDataInChunks( | 504 | + final hrvPoints = await _fetchRawDataForCalculation( |
| 490 | HealthDataUploadType.hrv.type, | 505 | HealthDataUploadType.hrv.type, |
| 491 | hrvStartTime, | 506 | hrvStartTime, |
| 492 | effectiveEndTime, | 507 | effectiveEndTime, |
| 508 | + rawDataSnapshot: rawDataSnapshot, | ||
| 493 | readChunkDays: readChunkDays, | 509 | readChunkDays: readChunkDays, |
| 494 | ); | 510 | ); |
| 495 | _profileLog( | 511 | _profileLog( |
| @@ -500,10 +516,11 @@ class OHOSHealthRawDataCoreService { | @@ -500,10 +516,11 @@ class OHOSHealthRawDataCoreService { | ||
| 500 | 'elapsedMs=${hrvFetchStopwatch.elapsedMilliseconds}', | 516 | 'elapsedMs=${hrvFetchStopwatch.elapsedMilliseconds}', |
| 501 | ); | 517 | ); |
| 502 | final heartRateFetchStopwatch = Stopwatch()..start(); | 518 | final heartRateFetchStopwatch = Stopwatch()..start(); |
| 503 | - final heartRatePoints = await _fetchRawDataInChunks( | 519 | + final heartRatePoints = await _fetchRawDataForCalculation( |
| 504 | HealthDataUploadType.heartRate.type, | 520 | HealthDataUploadType.heartRate.type, |
| 505 | heartRateStartTime, | 521 | heartRateStartTime, |
| 506 | effectiveEndTime, | 522 | effectiveEndTime, |
| 523 | + rawDataSnapshot: rawDataSnapshot, | ||
| 507 | readChunkDays: readChunkDays, | 524 | readChunkDays: readChunkDays, |
| 508 | ); | 525 | ); |
| 509 | _profileLog( | 526 | _profileLog( |
| @@ -514,10 +531,11 @@ class OHOSHealthRawDataCoreService { | @@ -514,10 +531,11 @@ class OHOSHealthRawDataCoreService { | ||
| 514 | 'elapsedMs=${heartRateFetchStopwatch.elapsedMilliseconds}', | 531 | 'elapsedMs=${heartRateFetchStopwatch.elapsedMilliseconds}', |
| 515 | ); | 532 | ); |
| 516 | final restingHeartRateFetchStopwatch = Stopwatch()..start(); | 533 | final restingHeartRateFetchStopwatch = Stopwatch()..start(); |
| 517 | - final restingHeartRatePoints = await _fetchRawDataInChunks( | 534 | + final restingHeartRatePoints = await _fetchRawDataForCalculation( |
| 518 | HealthDataUploadType.restingHeartRate.type, | 535 | HealthDataUploadType.restingHeartRate.type, |
| 519 | heartRateStartTime, | 536 | heartRateStartTime, |
| 520 | effectiveEndTime, | 537 | effectiveEndTime, |
| 538 | + rawDataSnapshot: rawDataSnapshot, | ||
| 521 | readChunkDays: readChunkDays, | 539 | readChunkDays: readChunkDays, |
| 522 | ); | 540 | ); |
| 523 | _profileLog( | 541 | _profileLog( |
| @@ -529,9 +547,10 @@ class OHOSHealthRawDataCoreService { | @@ -529,9 +547,10 @@ class OHOSHealthRawDataCoreService { | ||
| 529 | 'elapsedMs=${restingHeartRateFetchStopwatch.elapsedMilliseconds}', | 547 | 'elapsedMs=${restingHeartRateFetchStopwatch.elapsedMilliseconds}', |
| 530 | ); | 548 | ); |
| 531 | final sleepFetchStopwatch = Stopwatch()..start(); | 549 | final sleepFetchStopwatch = Stopwatch()..start(); |
| 532 | - final sleepIntervals = await _fetchSleepIntervalsInChunks( | 550 | + final sleepIntervals = await _fetchSleepIntervalsForCalculation( |
| 533 | sleepStartTime, | 551 | sleepStartTime, |
| 534 | effectiveEndTime, | 552 | effectiveEndTime, |
| 553 | + rawDataSnapshot: rawDataSnapshot, | ||
| 535 | readChunkDays: readChunkDays, | 554 | readChunkDays: readChunkDays, |
| 536 | ); | 555 | ); |
| 537 | _profileLog( | 556 | _profileLog( |
| @@ -541,9 +560,10 @@ class OHOSHealthRawDataCoreService { | @@ -541,9 +560,10 @@ class OHOSHealthRawDataCoreService { | ||
| 541 | 'elapsedMs=${sleepFetchStopwatch.elapsedMilliseconds}', | 560 | 'elapsedMs=${sleepFetchStopwatch.elapsedMilliseconds}', |
| 542 | ); | 561 | ); |
| 543 | final workoutFetchStopwatch = Stopwatch()..start(); | 562 | final workoutFetchStopwatch = Stopwatch()..start(); |
| 544 | - final workoutIntervals = await _fetchWorkoutIntervalsInChunks( | 563 | + final workoutIntervals = await _fetchWorkoutIntervalsForCalculation( |
| 545 | heartRateStartTime, | 564 | heartRateStartTime, |
| 546 | effectiveEndTime, | 565 | effectiveEndTime, |
| 566 | + rawDataSnapshot: rawDataSnapshot, | ||
| 547 | readChunkDays: readChunkDays, | 567 | readChunkDays: readChunkDays, |
| 548 | ); | 568 | ); |
| 549 | _profileLog( | 569 | _profileLog( |
| @@ -808,12 +828,19 @@ class OHOSHealthRawDataCoreService { | @@ -808,12 +828,19 @@ class OHOSHealthRawDataCoreService { | ||
| 808 | Future<List<HealthRawHrvStressPoint>> queryHrvStressPoints({ | 828 | Future<List<HealthRawHrvStressPoint>> queryHrvStressPoints({ |
| 809 | required int startTime, | 829 | required int startTime, |
| 810 | required int endTime, | 830 | required int endTime, |
| 811 | - }) { | ||
| 812 | - return _localStore.queryHrvStressPoints( | 831 | + }) async { |
| 832 | + final stopwatch = Stopwatch()..start(); | ||
| 833 | + final points = await _localStore.queryHrvStressPoints( | ||
| 813 | userId: _userId, | 834 | userId: _userId, |
| 814 | startTime: startTime, | 835 | startTime: startTime, |
| 815 | endTime: endTime, | 836 | endTime: endTime, |
| 816 | ); | 837 | ); |
| 838 | + _logInfo( | ||
| 839 | + '$_hrvTrendLogMarker core_query_hrv_results_finish ' | ||
| 840 | + 'userId=$_userId startTime=$startTime endTime=$endTime ' | ||
| 841 | + 'count=${points.length} elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 842 | + ); | ||
| 843 | + return points; | ||
| 817 | } | 844 | } |
| 818 | 845 | ||
| 819 | Future<List<HealthRawRealtimeStressPoint>> queryRealtimeStressPoints({ | 846 | Future<List<HealthRawRealtimeStressPoint>> queryRealtimeStressPoints({ |
| @@ -834,12 +861,19 @@ class OHOSHealthRawDataCoreService { | @@ -834,12 +861,19 @@ class OHOSHealthRawDataCoreService { | ||
| 834 | Future<List<HealthRawDailyStressPoint>> queryDailyStressPoints({ | 861 | Future<List<HealthRawDailyStressPoint>> queryDailyStressPoints({ |
| 835 | required int startDate, | 862 | required int startDate, |
| 836 | required int endDate, | 863 | required int endDate, |
| 837 | - }) { | ||
| 838 | - return _localStore.queryDailyStressPoints( | 864 | + }) async { |
| 865 | + final stopwatch = Stopwatch()..start(); | ||
| 866 | + final points = await _localStore.queryDailyStressPoints( | ||
| 839 | userId: _userId, | 867 | userId: _userId, |
| 840 | startDate: startDate, | 868 | startDate: startDate, |
| 841 | endDate: endDate, | 869 | endDate: endDate, |
| 842 | ); | 870 | ); |
| 871 | + _logInfo( | ||
| 872 | + '$_hrvTrendLogMarker core_query_daily_stress_finish ' | ||
| 873 | + 'userId=$_userId startDate=$startDate endDate=$endDate ' | ||
| 874 | + 'count=${points.length} elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 875 | + ); | ||
| 876 | + return points; | ||
| 843 | } | 877 | } |
| 844 | 878 | ||
| 845 | Future<List<HealthRawSleepResult>> querySleepResults({ | 879 | Future<List<HealthRawSleepResult>> querySleepResults({ |
| @@ -859,12 +893,20 @@ class OHOSHealthRawDataCoreService { | @@ -859,12 +893,20 @@ class OHOSHealthRawDataCoreService { | ||
| 859 | required int endTime, | 893 | required int endTime, |
| 860 | int readChunkDays = defaultReadChunkDays, | 894 | int readChunkDays = defaultReadChunkDays, |
| 861 | }) async { | 895 | }) async { |
| 862 | - return _fetchRawDataInChunks( | 896 | + final stopwatch = Stopwatch()..start(); |
| 897 | + final points = await _fetchRawDataInChunks( | ||
| 863 | dataType, | 898 | dataType, |
| 864 | startTime, | 899 | startTime, |
| 865 | endTime, | 900 | endTime, |
| 866 | readChunkDays: readChunkDays, | 901 | readChunkDays: readChunkDays, |
| 867 | ); | 902 | ); |
| 903 | + _logInfo( | ||
| 904 | + '$_hrvTrendLogMarker core_query_raw_data_finish ' | ||
| 905 | + 'userId=$_userId dataType=$dataType startTime=$startTime ' | ||
| 906 | + 'endTime=$endTime readChunkDays=$readChunkDays ' | ||
| 907 | + 'count=${points.length} elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 908 | + ); | ||
| 909 | + return points; | ||
| 868 | } | 910 | } |
| 869 | 911 | ||
| 870 | Future<List<HealthKitRawDataPoint>> queryRawSleepIntervals({ | 912 | Future<List<HealthKitRawDataPoint>> queryRawSleepIntervals({ |
| @@ -1189,21 +1231,23 @@ class OHOSHealthRawDataCoreService { | @@ -1189,21 +1231,23 @@ class OHOSHealthRawDataCoreService { | ||
| 1189 | } | 1231 | } |
| 1190 | } | 1232 | } |
| 1191 | 1233 | ||
| 1192 | - Future<List<OhosHealthRawDataSyncResult>> _syncCalculationRawDataIfNeeded({ | 1234 | + Future<OhosHealthRawDataCalculationSyncSnapshot?> |
| 1235 | + _syncCalculationRawDataIfNeeded({ | ||
| 1193 | required int? startTime, | 1236 | required int? startTime, |
| 1194 | required int endTime, | 1237 | required int endTime, |
| 1195 | }) async { | 1238 | }) async { |
| 1196 | final rawDataSource = _rawDataSource; | 1239 | final rawDataSource = _rawDataSource; |
| 1197 | if (rawDataSource is! OhosHealthRawDataSource) { | 1240 | if (rawDataSource is! OhosHealthRawDataSource) { |
| 1198 | - return const <OhosHealthRawDataSyncResult>[]; | 1241 | + return null; |
| 1199 | } | 1242 | } |
| 1200 | - return rawDataSource.syncCalculationRawData( | 1243 | + return rawDataSource.syncCalculationRawDataSnapshot( |
| 1201 | startTime: startTime, | 1244 | startTime: startTime, |
| 1202 | endTime: endTime, | 1245 | endTime: endTime, |
| 1203 | ); | 1246 | ); |
| 1204 | } | 1247 | } |
| 1205 | 1248 | ||
| 1206 | - Future<List<OhosHealthRawDataSyncResult>> _syncCalculationRawDataSafely({ | 1249 | + Future<OhosHealthRawDataCalculationSyncSnapshot?> |
| 1250 | + _syncCalculationRawDataSafely({ | ||
| 1207 | required bool hasAuthorization, | 1251 | required bool hasAuthorization, |
| 1208 | required int? startTime, | 1252 | required int? startTime, |
| 1209 | required int endTime, | 1253 | required int endTime, |
| @@ -1213,7 +1257,7 @@ class OHOSHealthRawDataCoreService { | @@ -1213,7 +1257,7 @@ class OHOSHealthRawDataCoreService { | ||
| 1213 | '$_calculateLogMarker sync_skipped reason=no_health_privacy_permission ' | 1257 | '$_calculateLogMarker sync_skipped reason=no_health_privacy_permission ' |
| 1214 | 'startTime=$startTime endTime=$endTime', | 1258 | 'startTime=$startTime endTime=$endTime', |
| 1215 | ); | 1259 | ); |
| 1216 | - return const <OhosHealthRawDataSyncResult>[]; | 1260 | + return null; |
| 1217 | } | 1261 | } |
| 1218 | try { | 1262 | try { |
| 1219 | return await _syncCalculationRawDataIfNeeded( | 1263 | return await _syncCalculationRawDataIfNeeded( |
| @@ -1573,6 +1617,35 @@ class OHOSHealthRawDataCoreService { | @@ -1573,6 +1617,35 @@ class OHOSHealthRawDataCoreService { | ||
| 1573 | return points; | 1617 | return points; |
| 1574 | } | 1618 | } |
| 1575 | 1619 | ||
| 1620 | + Future<List<HealthKitRawDataPoint>> _fetchRawDataForCalculation( | ||
| 1621 | + int dataType, | ||
| 1622 | + int startTime, | ||
| 1623 | + int endTime, { | ||
| 1624 | + required OhosHealthRawDataMemorySnapshot? rawDataSnapshot, | ||
| 1625 | + required int readChunkDays, | ||
| 1626 | + }) async { | ||
| 1627 | + final rawDataSource = _rawDataSource; | ||
| 1628 | + if (rawDataSnapshot != null && rawDataSource is OhosHealthRawDataSource) { | ||
| 1629 | + final points = rawDataSource.getRawDataFromSnapshot( | ||
| 1630 | + snapshot: rawDataSnapshot, | ||
| 1631 | + dataType: dataType, | ||
| 1632 | + startTime: startTime, | ||
| 1633 | + endTime: endTime, | ||
| 1634 | + )..sort((a, b) => a.endTime.compareTo(b.endTime)); | ||
| 1635 | + _logInfo( | ||
| 1636 | + '$_calculateLogMarker raw_snapshot_hit dataType=$dataType ' | ||
| 1637 | + 'startTime=$startTime endTime=$endTime count=${points.length}', | ||
| 1638 | + ); | ||
| 1639 | + return points; | ||
| 1640 | + } | ||
| 1641 | + return _fetchRawDataInChunks( | ||
| 1642 | + dataType, | ||
| 1643 | + startTime, | ||
| 1644 | + endTime, | ||
| 1645 | + readChunkDays: readChunkDays, | ||
| 1646 | + ); | ||
| 1647 | + } | ||
| 1648 | + | ||
| 1576 | Future<List<HealthKitRawDataPoint>> _fetchSleepIntervalsInChunks( | 1649 | Future<List<HealthKitRawDataPoint>> _fetchSleepIntervalsInChunks( |
| 1577 | int startTime, | 1650 | int startTime, |
| 1578 | int endTime, { | 1651 | int endTime, { |
| @@ -1590,6 +1663,32 @@ class OHOSHealthRawDataCoreService { | @@ -1590,6 +1663,32 @@ class OHOSHealthRawDataCoreService { | ||
| 1590 | return points; | 1663 | return points; |
| 1591 | } | 1664 | } |
| 1592 | 1665 | ||
| 1666 | + Future<List<HealthKitRawDataPoint>> _fetchSleepIntervalsForCalculation( | ||
| 1667 | + int startTime, | ||
| 1668 | + int endTime, { | ||
| 1669 | + required OhosHealthRawDataMemorySnapshot? rawDataSnapshot, | ||
| 1670 | + required int readChunkDays, | ||
| 1671 | + }) async { | ||
| 1672 | + final rawDataSource = _rawDataSource; | ||
| 1673 | + if (rawDataSnapshot != null && rawDataSource is OhosHealthRawDataSource) { | ||
| 1674 | + final points = rawDataSource.getRawSleepIntervalsFromSnapshot( | ||
| 1675 | + snapshot: rawDataSnapshot, | ||
| 1676 | + startTime: startTime, | ||
| 1677 | + endTime: endTime, | ||
| 1678 | + )..sort((a, b) => a.endTime.compareTo(b.endTime)); | ||
| 1679 | + _logInfo( | ||
| 1680 | + '$_calculateLogMarker sleep_snapshot_hit ' | ||
| 1681 | + 'startTime=$startTime endTime=$endTime count=${points.length}', | ||
| 1682 | + ); | ||
| 1683 | + return points; | ||
| 1684 | + } | ||
| 1685 | + return _fetchSleepIntervalsInChunks( | ||
| 1686 | + startTime, | ||
| 1687 | + endTime, | ||
| 1688 | + readChunkDays: readChunkDays, | ||
| 1689 | + ); | ||
| 1690 | + } | ||
| 1691 | + | ||
| 1593 | Future<List<HealthKitRawWorkoutDataPoint>> _fetchWorkoutIntervalsInChunks( | 1692 | Future<List<HealthKitRawWorkoutDataPoint>> _fetchWorkoutIntervalsInChunks( |
| 1594 | int startTime, | 1693 | int startTime, |
| 1595 | int endTime, { | 1694 | int endTime, { |
| @@ -1607,6 +1706,33 @@ class OHOSHealthRawDataCoreService { | @@ -1607,6 +1706,33 @@ class OHOSHealthRawDataCoreService { | ||
| 1607 | return points; | 1706 | return points; |
| 1608 | } | 1707 | } |
| 1609 | 1708 | ||
| 1709 | + Future<List<HealthKitRawWorkoutDataPoint>> | ||
| 1710 | + _fetchWorkoutIntervalsForCalculation( | ||
| 1711 | + int startTime, | ||
| 1712 | + int endTime, { | ||
| 1713 | + required OhosHealthRawDataMemorySnapshot? rawDataSnapshot, | ||
| 1714 | + required int readChunkDays, | ||
| 1715 | + }) async { | ||
| 1716 | + final rawDataSource = _rawDataSource; | ||
| 1717 | + if (rawDataSnapshot != null && rawDataSource is OhosHealthRawDataSource) { | ||
| 1718 | + final points = rawDataSource.getRawWorkoutDataFromSnapshot( | ||
| 1719 | + snapshot: rawDataSnapshot, | ||
| 1720 | + startTime: startTime, | ||
| 1721 | + endTime: endTime, | ||
| 1722 | + )..sort((a, b) => a.endTime.compareTo(b.endTime)); | ||
| 1723 | + _logInfo( | ||
| 1724 | + '$_calculateLogMarker workout_snapshot_hit ' | ||
| 1725 | + 'startTime=$startTime endTime=$endTime count=${points.length}', | ||
| 1726 | + ); | ||
| 1727 | + return points; | ||
| 1728 | + } | ||
| 1729 | + return _fetchWorkoutIntervalsInChunks( | ||
| 1730 | + startTime, | ||
| 1731 | + endTime, | ||
| 1732 | + readChunkDays: readChunkDays, | ||
| 1733 | + ); | ||
| 1734 | + } | ||
| 1735 | + | ||
| 1610 | static int? _minNullable(int? a, int? b) { | 1736 | static int? _minNullable(int? a, int? b) { |
| 1611 | if (a == null) return b; | 1737 | if (a == null) return b; |
| 1612 | if (b == null) return a; | 1738 | if (b == null) return a; |
| @@ -1628,13 +1754,15 @@ class OHOSHealthRawDataCoreService { | @@ -1628,13 +1754,15 @@ class OHOSHealthRawDataCoreService { | ||
| 1628 | }) { | 1754 | }) { |
| 1629 | if (!_isDebug) return; | 1755 | if (!_isDebug) return; |
| 1630 | _toastSink?.call( | 1756 | _toastSink?.call( |
| 1631 | - '【测试】本轮同步耗时${_elapsedSecondsText(syncElapsed)} s、' | 1757 | + '【测试】获取数据耗时${_elapsedSecondsText(syncElapsed)} s、' |
| 1632 | '计算耗时${_elapsedSecondsText(calculationElapsed)} s', | 1758 | '计算耗时${_elapsedSecondsText(calculationElapsed)} s', |
| 1633 | ); | 1759 | ); |
| 1634 | } | 1760 | } |
| 1635 | 1761 | ||
| 1636 | - bool _hasStoredRawData(List<OhosHealthRawDataSyncResult> syncResults) { | ||
| 1637 | - return syncResults.any((result) => result.storedCount > 0); | 1762 | + bool _hasFetchedRawData(List<OhosHealthRawDataSyncResult> syncResults) { |
| 1763 | + return syncResults.any( | ||
| 1764 | + (result) => result.fetchedCount > 0 || result.storedCount > 0, | ||
| 1765 | + ); | ||
| 1638 | } | 1766 | } |
| 1639 | 1767 | ||
| 1640 | bool _hasCalculatedResult(HealthRawStressCalculationResult result) { | 1768 | bool _hasCalculatedResult(HealthRawStressCalculationResult result) { |
| @@ -24,6 +24,7 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | @@ -24,6 +24,7 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | ||
| 24 | static const sleepDataTable = 'ohos_sleep_data'; | 24 | static const sleepDataTable = 'ohos_sleep_data'; |
| 25 | static const activityGoalTable = 'ohos_activity_goal'; | 25 | static const activityGoalTable = 'ohos_activity_goal'; |
| 26 | static const logMarker = '[OHOS_RAW_DATA_DB]'; | 26 | static const logMarker = '[OHOS_RAW_DATA_DB]'; |
| 27 | + static const hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 27 | 28 | ||
| 28 | final int Function()? _userIdProvider; | 29 | final int Function()? _userIdProvider; |
| 29 | final Directory? _rootDirectory; | 30 | final Directory? _rootDirectory; |
| @@ -282,6 +283,7 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | @@ -282,6 +283,7 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | ||
| 282 | required int startTime, | 283 | required int startTime, |
| 283 | required int endTime, | 284 | required int endTime, |
| 284 | }) async { | 285 | }) async { |
| 286 | + final stopwatch = Stopwatch()..start(); | ||
| 285 | final db = await _database(_userId); | 287 | final db = await _database(_userId); |
| 286 | if (dataType == OhosHealthRawDataType.sleepAnalysis) { | 288 | if (dataType == OhosHealthRawDataType.sleepAnalysis) { |
| 287 | final rows = await db.query( | 289 | final rows = await db.query( |
| @@ -290,7 +292,13 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | @@ -290,7 +292,13 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | ||
| 290 | whereArgs: [startTime, endTime], | 292 | whereArgs: [startTime, endTime], |
| 291 | orderBy: 'from_time ASC', | 293 | orderBy: 'from_time ASC', |
| 292 | ); | 294 | ); |
| 293 | - return rows.map(_sleepItemFromRow).toList(growable: false); | 295 | + final items = rows.map(_sleepItemFromRow).toList(growable: false); |
| 296 | + _log( | ||
| 297 | + '$hrvTrendLogMarker raw_db_query_finish dataType=$dataType ' | ||
| 298 | + 'startTime=$startTime endTime=$endTime rows=${rows.length} ' | ||
| 299 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 300 | + ); | ||
| 301 | + return items; | ||
| 294 | } | 302 | } |
| 295 | if (dataType == OhosHealthRawDataType.workout) { | 303 | if (dataType == OhosHealthRawDataType.workout) { |
| 296 | final table = _rawDataTable(dataType); | 304 | final table = _rawDataTable(dataType); |
| @@ -301,9 +309,15 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | @@ -301,9 +309,15 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | ||
| 301 | whereArgs: [startTime, endTime], | 309 | whereArgs: [startTime, endTime], |
| 302 | orderBy: 'from_time ASC', | 310 | orderBy: 'from_time ASC', |
| 303 | ); | 311 | ); |
| 304 | - return rows | 312 | + final items = rows |
| 305 | .map((row) => _intervalItemFromRow(row, dataType)) | 313 | .map((row) => _intervalItemFromRow(row, dataType)) |
| 306 | .toList(growable: false); | 314 | .toList(growable: false); |
| 315 | + _log( | ||
| 316 | + '$hrvTrendLogMarker raw_db_query_finish dataType=$dataType ' | ||
| 317 | + 'table=$table startTime=$startTime endTime=$endTime ' | ||
| 318 | + 'rows=${rows.length} elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 319 | + ); | ||
| 320 | + return items; | ||
| 307 | } | 321 | } |
| 308 | 322 | ||
| 309 | final storedDataType = _storedHealthDataType(dataType); | 323 | final storedDataType = _storedHealthDataType(dataType); |
| @@ -315,9 +329,16 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | @@ -315,9 +329,16 @@ class OhosHealthRawDataSqliteStore implements OhosHealthRawDataLocalStore { | ||
| 315 | whereArgs: [startTime, endTime], | 329 | whereArgs: [startTime, endTime], |
| 316 | orderBy: 'time ASC', | 330 | orderBy: 'time ASC', |
| 317 | ); | 331 | ); |
| 318 | - return rows | 332 | + final items = rows |
| 319 | .map((row) => _rawItemFromRow(row, storedDataType)) | 333 | .map((row) => _rawItemFromRow(row, storedDataType)) |
| 320 | .toList(growable: false); | 334 | .toList(growable: false); |
| 335 | + _log( | ||
| 336 | + '$hrvTrendLogMarker raw_db_query_finish dataType=$dataType ' | ||
| 337 | + 'storedDataType=$storedDataType table=$table startTime=$startTime ' | ||
| 338 | + 'endTime=$endTime rows=${rows.length} ' | ||
| 339 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 340 | + ); | ||
| 341 | + return items; | ||
| 321 | } | 342 | } |
| 322 | 343 | ||
| 323 | @override | 344 | @override |
lib/core/services/raw_data_service/platform_ohos/ohos_health_raw_data_memory_snapshot.dart
0 → 100644
| 1 | +part of 'ohos_health_raw_data_sync_service.dart'; | ||
| 2 | + | ||
| 3 | +class OhosHealthRawDataMemorySnapshot { | ||
| 4 | + OhosHealthRawDataMemorySnapshot({ | ||
| 5 | + required Iterable<OhosHealthRawDataSyncResult> results, | ||
| 6 | + }) { | ||
| 7 | + for (final result in results) { | ||
| 8 | + for (final item in result.rawItems) { | ||
| 9 | + _itemCount += 1; | ||
| 10 | + _add(result.dataType, item); | ||
| 11 | + if (item.dataType != result.dataType) { | ||
| 12 | + _add(item.dataType, item); | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + for (final items in _itemsByDataType.values) { | ||
| 17 | + items.sort((a, b) => _itemEndTime(a).compareTo(_itemEndTime(b))); | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + final Map<int, List<OhosHealthRawDataItem>> _itemsByDataType = | ||
| 22 | + <int, List<OhosHealthRawDataItem>>{}; | ||
| 23 | + var _itemCount = 0; | ||
| 24 | + | ||
| 25 | + void _add(int dataType, OhosHealthRawDataItem item) { | ||
| 26 | + _itemsByDataType | ||
| 27 | + .putIfAbsent(dataType, () => <OhosHealthRawDataItem>[]) | ||
| 28 | + .add(item); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + bool get isEmpty => _itemsByDataType.values.every((items) => items.isEmpty); | ||
| 32 | + | ||
| 33 | + int get length => _itemCount; | ||
| 34 | + | ||
| 35 | + List<OhosHealthRawDataItem> query({ | ||
| 36 | + required int dataType, | ||
| 37 | + required int startTime, | ||
| 38 | + required int endTime, | ||
| 39 | + }) { | ||
| 40 | + final items = _itemsByDataType[dataType]; | ||
| 41 | + if (items == null || items.isEmpty) return const <OhosHealthRawDataItem>[]; | ||
| 42 | + return items | ||
| 43 | + .where( | ||
| 44 | + (item) => | ||
| 45 | + _itemEndTime(item) >= startTime && | ||
| 46 | + _itemStartTime(item) <= endTime, | ||
| 47 | + ) | ||
| 48 | + .toList(growable: false); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + int? earliestTime() { | ||
| 52 | + int? earliest; | ||
| 53 | + for (final items in _itemsByDataType.values) { | ||
| 54 | + for (final item in items) { | ||
| 55 | + final time = _dedupeKeyTime(item); | ||
| 56 | + earliest = earliest == null ? time : math.min(earliest, time); | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + return earliest; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + static int _itemStartTime(OhosHealthRawDataItem item) { | ||
| 63 | + return _numPayload(item.payload, 'from_time') ?? | ||
| 64 | + _numPayload(item.payload, 'start_time') ?? | ||
| 65 | + item.dataTime; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + static int _itemEndTime(OhosHealthRawDataItem item) { | ||
| 69 | + return _numPayload(item.payload, 'to_time') ?? | ||
| 70 | + _numPayload(item.payload, 'end_time') ?? | ||
| 71 | + _numPayload(item.payload, 'time') ?? | ||
| 72 | + item.dataTime; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + static int _dedupeKeyTime(OhosHealthRawDataItem item) { | ||
| 76 | + return _numPayload(item.payload, 'from_time') ?? | ||
| 77 | + _numPayload(item.payload, 'start_time') ?? | ||
| 78 | + _numPayload(item.payload, 'time') ?? | ||
| 79 | + item.dataTime; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + static int? _numPayload(Map<String, Object?> payload, String key) { | ||
| 83 | + final value = payload[key]; | ||
| 84 | + return value is num ? value.toInt() : null; | ||
| 85 | + } | ||
| 86 | +} | ||
| 87 | + | ||
| 88 | +class OhosHealthRawDataCalculationSyncSnapshot { | ||
| 89 | + const OhosHealthRawDataCalculationSyncSnapshot({ | ||
| 90 | + required this.results, | ||
| 91 | + required this.rawData, | ||
| 92 | + this.activityGoal, | ||
| 93 | + this.storeFuture, | ||
| 94 | + }); | ||
| 95 | + | ||
| 96 | + final List<OhosHealthRawDataSyncResult> results; | ||
| 97 | + final OhosHealthRawDataMemorySnapshot rawData; | ||
| 98 | + final V2ActivityTarget? activityGoal; | ||
| 99 | + final Future<void>? storeFuture; | ||
| 100 | +} |
| @@ -16,6 +16,8 @@ import 'package:flutter/foundation.dart'; | @@ -16,6 +16,8 @@ import 'package:flutter/foundation.dart'; | ||
| 16 | import 'huawei_health_data_type.dart'; | 16 | import 'huawei_health_data_type.dart'; |
| 17 | import 'ohos_health_raw_data_events.dart'; | 17 | import 'ohos_health_raw_data_events.dart'; |
| 18 | 18 | ||
| 19 | +part 'ohos_health_raw_data_memory_snapshot.dart'; | ||
| 20 | + | ||
| 19 | class OhosHealthRawDataType { | 21 | class OhosHealthRawDataType { |
| 20 | const OhosHealthRawDataType._(); | 22 | const OhosHealthRawDataType._(); |
| 21 | 23 | ||
| @@ -44,6 +46,8 @@ class OhosHealthRawDataSyncService { | @@ -44,6 +46,8 @@ class OhosHealthRawDataSyncService { | ||
| 44 | static const int defaultMaxConcurrentFetches = 10; | 46 | static const int defaultMaxConcurrentFetches = 10; |
| 45 | static const String logMarker = '[OHOS_HEALTH_RAW_SYNC]'; | 47 | static const String logMarker = '[OHOS_HEALTH_RAW_SYNC]'; |
| 46 | static const String profileLogMarker = '[OHOS_HEALTH_RAW_PROFILE]'; | 48 | static const String profileLogMarker = '[OHOS_HEALTH_RAW_PROFILE]'; |
| 49 | + static const String timingLogMarker = '[OHOS_HEALTH_TIMING]'; | ||
| 50 | + static const String hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 47 | static final List<int> calculationDataTypes = List<int>.unmodifiable( | 51 | static final List<int> calculationDataTypes = List<int>.unmodifiable( |
| 48 | <int>[ | 52 | <int>[ |
| 49 | for (final type in HuaweiHealthDataType.values) type.dataType, | 53 | for (final type in HuaweiHealthDataType.values) type.dataType, |
| @@ -257,6 +261,130 @@ class OhosHealthRawDataSyncService { | @@ -257,6 +261,130 @@ class OhosHealthRawDataSyncService { | ||
| 257 | return results; | 261 | return results; |
| 258 | } | 262 | } |
| 259 | 263 | ||
| 264 | + Future<OhosHealthRawDataCalculationSyncSnapshot> | ||
| 265 | + syncCalculationRawDataSnapshot({ | ||
| 266 | + int? startTime, | ||
| 267 | + int? endTime, | ||
| 268 | + List<int>? dataTypes, | ||
| 269 | + }) async { | ||
| 270 | + final totalStopwatch = Stopwatch()..start(); | ||
| 271 | + final resolvedEndTime = endTime ?? _unixSeconds(_nowProvider()); | ||
| 272 | + final earliestStartTime = _twoMonthLookbackStart(resolvedEndTime); | ||
| 273 | + final eventStartTime = startTime == null | ||
| 274 | + ? earliestStartTime | ||
| 275 | + : math.max(startTime, earliestStartTime); | ||
| 276 | + final resolvedDataTypes = dataTypes ?? calculationDataTypes; | ||
| 277 | + _log( | ||
| 278 | + 'calculation_sync_snapshot_start ' | ||
| 279 | + 'dataTypes=${resolvedDataTypes.join(',')} ' | ||
| 280 | + 'startTime=${startTime ?? ''} endTime=$resolvedEndTime', | ||
| 281 | + ); | ||
| 282 | + _publishSyncEvent( | ||
| 283 | + type: OhosHealthRawDataPipelineEventType.syncStarted, | ||
| 284 | + flow: 'syncCalculationRawDataSnapshot', | ||
| 285 | + dataTypes: resolvedDataTypes, | ||
| 286 | + startTime: eventStartTime, | ||
| 287 | + endTime: resolvedEndTime, | ||
| 288 | + ); | ||
| 289 | + try { | ||
| 290 | + final activityGoalFuture = _fetchActivityGoalForCalculationSync(); | ||
| 291 | + final rawSyncFuture = Future.wait( | ||
| 292 | + resolvedDataTypes.map( | ||
| 293 | + (dataType) => _syncRawDataForCalculationSnapshot( | ||
| 294 | + dataType: dataType, | ||
| 295 | + startTime: startTime, | ||
| 296 | + endTime: resolvedEndTime, | ||
| 297 | + ), | ||
| 298 | + ), | ||
| 299 | + eagerError: true, | ||
| 300 | + ); | ||
| 301 | + final fetched = await Future.wait<Object?>( | ||
| 302 | + <Future<Object?>>[ | ||
| 303 | + activityGoalFuture, | ||
| 304 | + rawSyncFuture, | ||
| 305 | + ], | ||
| 306 | + eagerError: true, | ||
| 307 | + ); | ||
| 308 | + final activityGoal = fetched[0] as V2ActivityTarget?; | ||
| 309 | + final results = fetched[1] as List<OhosHealthRawDataSyncResult>; | ||
| 310 | + final rawData = OhosHealthRawDataMemorySnapshot( | ||
| 311 | + results: results, | ||
| 312 | + ); | ||
| 313 | + final pageCount = results.fold<int>( | ||
| 314 | + 0, | ||
| 315 | + (sum, result) => sum + result.pageCount, | ||
| 316 | + ); | ||
| 317 | + final fetchedCount = results.fold<int>( | ||
| 318 | + 0, | ||
| 319 | + (sum, result) => sum + result.fetchedCount, | ||
| 320 | + ); | ||
| 321 | + final storeFuture = _storeCalculationSnapshotInBackground( | ||
| 322 | + results: results, | ||
| 323 | + activityGoal: activityGoal, | ||
| 324 | + ); | ||
| 325 | + unawaited( | ||
| 326 | + storeFuture.catchError((Object error, StackTrace stackTrace) { | ||
| 327 | + _log( | ||
| 328 | + '$timingLogMarker db_store_failed ' | ||
| 329 | + 'dataTypes=${resolvedDataTypes.join(',')} ' | ||
| 330 | + 'error=${_describeError(error)} stackTrace=$stackTrace', | ||
| 331 | + ); | ||
| 332 | + }), | ||
| 333 | + ); | ||
| 334 | + _log( | ||
| 335 | + 'calculation_sync_snapshot_finish ' | ||
| 336 | + 'dataTypes=${resolvedDataTypes.join(',')} ' | ||
| 337 | + 'pageCount=$pageCount fetchedCount=$fetchedCount ' | ||
| 338 | + 'snapshotCount=${rawData.length}', | ||
| 339 | + ); | ||
| 340 | + _log( | ||
| 341 | + '$timingLogMarker fetch_all_finish ' | ||
| 342 | + 'dataTypes=${resolvedDataTypes.join(',')} ' | ||
| 343 | + 'pageCount=$pageCount fetchedCount=$fetchedCount ' | ||
| 344 | + 'elapsedMs=${totalStopwatch.elapsedMilliseconds}', | ||
| 345 | + ); | ||
| 346 | + _publishSyncEvent( | ||
| 347 | + type: OhosHealthRawDataPipelineEventType.syncSucceeded, | ||
| 348 | + flow: 'syncCalculationRawDataSnapshot', | ||
| 349 | + dataTypes: resolvedDataTypes, | ||
| 350 | + startTime: eventStartTime, | ||
| 351 | + endTime: resolvedEndTime, | ||
| 352 | + elapsedMs: totalStopwatch.elapsedMilliseconds, | ||
| 353 | + pageCount: pageCount, | ||
| 354 | + storedCount: 0, | ||
| 355 | + ); | ||
| 356 | + return OhosHealthRawDataCalculationSyncSnapshot( | ||
| 357 | + results: results, | ||
| 358 | + rawData: rawData, | ||
| 359 | + activityGoal: activityGoal, | ||
| 360 | + storeFuture: storeFuture, | ||
| 361 | + ); | ||
| 362 | + } catch (error, stackTrace) { | ||
| 363 | + _log( | ||
| 364 | + 'calculation_sync_snapshot_failed ' | ||
| 365 | + 'dataTypes=${resolvedDataTypes.join(',')} ' | ||
| 366 | + 'startTime=${startTime ?? ''} endTime=$resolvedEndTime ' | ||
| 367 | + 'error=${_describeError(error)} stackTrace=$stackTrace', | ||
| 368 | + ); | ||
| 369 | + _profileLog( | ||
| 370 | + 'calculationSync_fetchAll_failed ' | ||
| 371 | + 'dataTypes=${resolvedDataTypes.join(',')} ' | ||
| 372 | + 'elapsedMs=${totalStopwatch.elapsedMilliseconds} ' | ||
| 373 | + 'error=${_describeError(error)}', | ||
| 374 | + ); | ||
| 375 | + _publishSyncEvent( | ||
| 376 | + type: OhosHealthRawDataPipelineEventType.syncFailed, | ||
| 377 | + flow: 'syncCalculationRawDataSnapshot', | ||
| 378 | + dataTypes: resolvedDataTypes, | ||
| 379 | + startTime: eventStartTime, | ||
| 380 | + endTime: resolvedEndTime, | ||
| 381 | + elapsedMs: totalStopwatch.elapsedMilliseconds, | ||
| 382 | + error: _describeError(error), | ||
| 383 | + ); | ||
| 384 | + rethrow; | ||
| 385 | + } | ||
| 386 | + } | ||
| 387 | + | ||
| 260 | Future<V2ActivityTarget?> _fetchActivityGoalForCalculationSync() async { | 388 | Future<V2ActivityTarget?> _fetchActivityGoalForCalculationSync() async { |
| 261 | final stopwatch = Stopwatch()..start(); | 389 | final stopwatch = Stopwatch()..start(); |
| 262 | try { | 390 | try { |
| @@ -339,16 +467,66 @@ class OhosHealthRawDataSyncService { | @@ -339,16 +467,66 @@ class OhosHealthRawDataSyncService { | ||
| 339 | } | 467 | } |
| 340 | } | 468 | } |
| 341 | 469 | ||
| 470 | + Future<OhosHealthRawDataSyncResult> _syncRawDataForCalculationSnapshot({ | ||
| 471 | + required int dataType, | ||
| 472 | + required int? startTime, | ||
| 473 | + required int endTime, | ||
| 474 | + }) async { | ||
| 475 | + final stopwatch = Stopwatch()..start(); | ||
| 476 | + final resolvedStartTime = await _resolveStartTime( | ||
| 477 | + dataType: dataType, | ||
| 478 | + requestedStartTime: startTime, | ||
| 479 | + endTime: endTime, | ||
| 480 | + ); | ||
| 481 | + if (endTime < resolvedStartTime) { | ||
| 482 | + throw ArgumentError.value(endTime, 'endTime'); | ||
| 483 | + } | ||
| 484 | + _profileLog( | ||
| 485 | + 'fetchRawDataSnapshot_resolved dataType=$dataType ' | ||
| 486 | + 'requestedStartTime=${startTime ?? ''} startTime=$resolvedStartTime ' | ||
| 487 | + 'endTime=$endTime resolveElapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 488 | + ); | ||
| 489 | + try { | ||
| 490 | + final result = await _syncResolvedRawData( | ||
| 491 | + dataType: dataType, | ||
| 492 | + startTime: resolvedStartTime, | ||
| 493 | + endTime: endTime, | ||
| 494 | + storeRawData: false, | ||
| 495 | + ); | ||
| 496 | + _profileLog( | ||
| 497 | + 'fetchRawDataSnapshot_finish dataType=$dataType ' | ||
| 498 | + 'segments=${result.segmentCount} pageCount=${result.pageCount} ' | ||
| 499 | + 'fetchedCount=${result.fetchedCount} ' | ||
| 500 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 501 | + ); | ||
| 502 | + return result; | ||
| 503 | + } catch (error) { | ||
| 504 | + _profileLog( | ||
| 505 | + 'fetchRawDataSnapshot_failed dataType=$dataType ' | ||
| 506 | + 'elapsedMs=${stopwatch.elapsedMilliseconds} ' | ||
| 507 | + 'error=${_describeError(error)}', | ||
| 508 | + ); | ||
| 509 | + rethrow; | ||
| 510 | + } | ||
| 511 | + } | ||
| 512 | + | ||
| 342 | Future<List<OhosHealthRawDataItem>> queryRawData({ | 513 | Future<List<OhosHealthRawDataItem>> queryRawData({ |
| 343 | required int dataType, | 514 | required int dataType, |
| 344 | required int startTime, | 515 | required int startTime, |
| 345 | required int endTime, | 516 | required int endTime, |
| 346 | - }) { | ||
| 347 | - return _localStore.queryRawData( | 517 | + }) async { |
| 518 | + final stopwatch = Stopwatch()..start(); | ||
| 519 | + final items = await _localStore.queryRawData( | ||
| 348 | dataType: dataType, | 520 | dataType: dataType, |
| 349 | startTime: startTime, | 521 | startTime: startTime, |
| 350 | endTime: endTime, | 522 | endTime: endTime, |
| 351 | ); | 523 | ); |
| 524 | + _log( | ||
| 525 | + '$hrvTrendLogMarker sync_query_raw_finish ' | ||
| 526 | + 'dataType=$dataType startTime=$startTime endTime=$endTime ' | ||
| 527 | + 'count=${items.length} elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 528 | + ); | ||
| 529 | + return items; | ||
| 352 | } | 530 | } |
| 353 | 531 | ||
| 354 | Future<V2ActivityTarget?> getActivityGoal({bool refresh = true}) async { | 532 | Future<V2ActivityTarget?> getActivityGoal({bool refresh = true}) async { |
| @@ -385,6 +563,7 @@ class OhosHealthRawDataSyncService { | @@ -385,6 +563,7 @@ class OhosHealthRawDataSyncService { | ||
| 385 | required int startTime, | 563 | required int startTime, |
| 386 | required int endTime, | 564 | required int endTime, |
| 387 | Future<void>? storeGate, | 565 | Future<void>? storeGate, |
| 566 | + bool storeRawData = true, | ||
| 388 | }) async { | 567 | }) async { |
| 389 | final stopwatch = Stopwatch()..start(); | 568 | final stopwatch = Stopwatch()..start(); |
| 390 | final fetchRanges = _splitIntoFetchRanges( | 569 | final fetchRanges = _splitIntoFetchRanges( |
| @@ -415,6 +594,7 @@ class OhosHealthRawDataSyncService { | @@ -415,6 +594,7 @@ class OhosHealthRawDataSyncService { | ||
| 415 | var fetchedItems = 0; | 594 | var fetchedItems = 0; |
| 416 | var storedCount = 0; | 595 | var storedCount = 0; |
| 417 | int? earliestStoredTime; | 596 | int? earliestStoredTime; |
| 597 | + final rawItems = <OhosHealthRawDataItem>[]; | ||
| 418 | try { | 598 | try { |
| 419 | while (pending.isNotEmpty) { | 599 | while (pending.isNotEmpty) { |
| 420 | final outcome = await Future.any(pending); | 600 | final outcome = await Future.any(pending); |
| @@ -428,34 +608,37 @@ class OhosHealthRawDataSyncService { | @@ -428,34 +608,37 @@ class OhosHealthRawDataSyncService { | ||
| 428 | final page = segment.page; | 608 | final page = segment.page; |
| 429 | pageCount += 1; | 609 | pageCount += 1; |
| 430 | fetchedItems += page.items.length; | 610 | fetchedItems += page.items.length; |
| 611 | + rawItems.addAll(page.items); | ||
| 431 | if (page.items.isNotEmpty) { | 612 | if (page.items.isNotEmpty) { |
| 432 | - if (storeGate != null) await storeGate; | ||
| 433 | - final pageStoreStopwatch = Stopwatch()..start(); | ||
| 434 | - final pageStoredCount = await _localStore.upsertRawDataBatch( | ||
| 435 | - dataType: dataType, | ||
| 436 | - items: page.items, | ||
| 437 | - ); | ||
| 438 | - storedCount += pageStoredCount; | ||
| 439 | - if (pageStoredCount > 0) { | ||
| 440 | - for (final item in page.items) { | ||
| 441 | - final keyTime = _dedupeKeyTime(dataType: dataType, item: item); | ||
| 442 | - earliestStoredTime = earliestStoredTime == null | ||
| 443 | - ? keyTime | ||
| 444 | - : math.min(earliestStoredTime, keyTime); | 613 | + if (storeRawData) { |
| 614 | + if (storeGate != null) await storeGate; | ||
| 615 | + final pageStoreStopwatch = Stopwatch()..start(); | ||
| 616 | + final pageStoredCount = await _localStore.upsertRawDataBatch( | ||
| 617 | + dataType: dataType, | ||
| 618 | + items: page.items, | ||
| 619 | + ); | ||
| 620 | + storedCount += pageStoredCount; | ||
| 621 | + if (pageStoredCount > 0) { | ||
| 622 | + for (final item in page.items) { | ||
| 623 | + final keyTime = _dedupeKeyTime(dataType: dataType, item: item); | ||
| 624 | + earliestStoredTime = earliestStoredTime == null | ||
| 625 | + ? keyTime | ||
| 626 | + : math.min(earliestStoredTime, keyTime); | ||
| 627 | + } | ||
| 445 | } | 628 | } |
| 629 | + _profileLog( | ||
| 630 | + 'page_store_finish dataType=$dataType ' | ||
| 631 | + 'segment=${segment.segmentIndex + 1}/${fetchRanges.length} ' | ||
| 632 | + 'fetchedItems=${page.items.length} storedItems=$pageStoredCount ' | ||
| 633 | + 'elapsedMs=${pageStoreStopwatch.elapsedMilliseconds}', | ||
| 634 | + ); | ||
| 635 | + _log( | ||
| 636 | + 'page_stored dataType=$dataType ' | ||
| 637 | + 'segment=${segment.segmentIndex + 1}/${fetchRanges.length} ' | ||
| 638 | + 'fetchedItems=${page.items.length} ' | ||
| 639 | + 'storedItems=$pageStoredCount totalStored=$storedCount', | ||
| 640 | + ); | ||
| 446 | } | 641 | } |
| 447 | - _profileLog( | ||
| 448 | - 'page_store_finish dataType=$dataType ' | ||
| 449 | - 'segment=${segment.segmentIndex + 1}/${fetchRanges.length} ' | ||
| 450 | - 'fetchedItems=${page.items.length} storedItems=$pageStoredCount ' | ||
| 451 | - 'elapsedMs=${pageStoreStopwatch.elapsedMilliseconds}', | ||
| 452 | - ); | ||
| 453 | - _log( | ||
| 454 | - 'page_stored dataType=$dataType ' | ||
| 455 | - 'segment=${segment.segmentIndex + 1}/${fetchRanges.length} ' | ||
| 456 | - 'fetchedItems=${page.items.length} ' | ||
| 457 | - 'storedItems=$pageStoredCount totalStored=$storedCount', | ||
| 458 | - ); | ||
| 459 | } | 642 | } |
| 460 | 643 | ||
| 461 | _log( | 644 | _log( |
| @@ -500,6 +683,43 @@ class OhosHealthRawDataSyncService { | @@ -500,6 +683,43 @@ class OhosHealthRawDataSyncService { | ||
| 500 | pageCount: pageCount, | 683 | pageCount: pageCount, |
| 501 | storedCount: storedCount, | 684 | storedCount: storedCount, |
| 502 | earliestStoredTime: earliestStoredTime, | 685 | earliestStoredTime: earliestStoredTime, |
| 686 | + fetchedCount: fetchedItems, | ||
| 687 | + rawItems: List<OhosHealthRawDataItem>.unmodifiable(rawItems), | ||
| 688 | + ); | ||
| 689 | + } | ||
| 690 | + | ||
| 691 | + Future<void> _storeCalculationSnapshotInBackground({ | ||
| 692 | + required List<OhosHealthRawDataSyncResult> results, | ||
| 693 | + required V2ActivityTarget? activityGoal, | ||
| 694 | + }) async { | ||
| 695 | + final stopwatch = Stopwatch()..start(); | ||
| 696 | + var storedCount = 0; | ||
| 697 | + if (activityGoal != null) { | ||
| 698 | + final goalStopwatch = Stopwatch()..start(); | ||
| 699 | + await _localStore.upsertActivityGoal(activityGoal); | ||
| 700 | + _log( | ||
| 701 | + '$timingLogMarker db_store_activity_goal_finish ' | ||
| 702 | + 'elapsedMs=${goalStopwatch.elapsedMilliseconds}', | ||
| 703 | + ); | ||
| 704 | + } | ||
| 705 | + for (final result in results) { | ||
| 706 | + if (result.rawItems.isEmpty) continue; | ||
| 707 | + final typeStopwatch = Stopwatch()..start(); | ||
| 708 | + final count = await _localStore.upsertRawDataBatch( | ||
| 709 | + dataType: result.dataType, | ||
| 710 | + items: result.rawItems, | ||
| 711 | + ); | ||
| 712 | + storedCount += count; | ||
| 713 | + _log( | ||
| 714 | + '$timingLogMarker db_store_type_finish ' | ||
| 715 | + 'dataType=${result.dataType} fetched=${result.rawItems.length} ' | ||
| 716 | + 'stored=$count elapsedMs=${typeStopwatch.elapsedMilliseconds}', | ||
| 717 | + ); | ||
| 718 | + } | ||
| 719 | + _log( | ||
| 720 | + '$timingLogMarker db_store_finish ' | ||
| 721 | + 'dataTypes=${results.map((result) => result.dataType).join(',')} ' | ||
| 722 | + 'storedCount=$storedCount elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 503 | ); | 723 | ); |
| 504 | } | 724 | } |
| 505 | 725 | ||
| @@ -1022,6 +1242,8 @@ class OhosHealthRawDataSyncResult { | @@ -1022,6 +1242,8 @@ class OhosHealthRawDataSyncResult { | ||
| 1022 | required this.pageCount, | 1242 | required this.pageCount, |
| 1023 | required this.storedCount, | 1243 | required this.storedCount, |
| 1024 | this.earliestStoredTime, | 1244 | this.earliestStoredTime, |
| 1245 | + this.fetchedCount = 0, | ||
| 1246 | + this.rawItems = const <OhosHealthRawDataItem>[], | ||
| 1025 | }); | 1247 | }); |
| 1026 | 1248 | ||
| 1027 | final int dataType; | 1249 | final int dataType; |
| @@ -1031,6 +1253,8 @@ class OhosHealthRawDataSyncResult { | @@ -1031,6 +1253,8 @@ class OhosHealthRawDataSyncResult { | ||
| 1031 | final int pageCount; | 1253 | final int pageCount; |
| 1032 | final int storedCount; | 1254 | final int storedCount; |
| 1033 | final int? earliestStoredTime; | 1255 | final int? earliestStoredTime; |
| 1256 | + final int fetchedCount; | ||
| 1257 | + final List<OhosHealthRawDataItem> rawItems; | ||
| 1034 | 1258 | ||
| 1035 | @override | 1259 | @override |
| 1036 | String toString() { | 1260 | String toString() { |
| @@ -1041,6 +1265,7 @@ class OhosHealthRawDataSyncResult { | @@ -1041,6 +1265,7 @@ class OhosHealthRawDataSyncResult { | ||
| 1041 | 'segmentCount=$segmentCount, ' | 1265 | 'segmentCount=$segmentCount, ' |
| 1042 | 'pageCount=$pageCount, ' | 1266 | 'pageCount=$pageCount, ' |
| 1043 | 'storedCount=$storedCount, ' | 1267 | 'storedCount=$storedCount, ' |
| 1268 | + 'fetchedCount=$fetchedCount, ' | ||
| 1044 | 'earliestStoredTime=$earliestStoredTime' | 1269 | 'earliestStoredTime=$earliestStoredTime' |
| 1045 | ')'; | 1270 | ')'; |
| 1046 | } | 1271 | } |
| @@ -4,6 +4,7 @@ import 'package:doublefeel_flutter/data/models/health/activity/activity_burn_sta | @@ -4,6 +4,7 @@ import 'package:doublefeel_flutter/data/models/health/activity/activity_burn_sta | ||
| 4 | import 'package:doublefeel_flutter/data/models/health/health_v2_models.dart'; | 4 | import 'package:doublefeel_flutter/data/models/health/health_v2_models.dart'; |
| 5 | import 'package:doublefeel_flutter/data/models/health/hrv/hrv_statistics_data.dart'; | 5 | import 'package:doublefeel_flutter/data/models/health/hrv/hrv_statistics_data.dart'; |
| 6 | import 'package:doublefeel_flutter/data/models/health/sleep/sleep_statistics_data.dart'; | 6 | import 'package:doublefeel_flutter/data/models/health/sleep/sleep_statistics_data.dart'; |
| 7 | +import 'package:flutter/foundation.dart'; | ||
| 7 | import 'package:get/get_core/src/get_main.dart'; | 8 | import 'package:get/get_core/src/get_main.dart'; |
| 8 | import 'package:get/get_instance/src/extension_instance.dart'; | 9 | import 'package:get/get_instance/src/extension_instance.dart'; |
| 9 | 10 | ||
| @@ -19,6 +20,7 @@ class HealthDataSourceWrapper implements HealthDataSource { | @@ -19,6 +20,7 @@ class HealthDataSourceWrapper implements HealthDataSource { | ||
| 19 | final HealthDataSource remoteDataSource; | 20 | final HealthDataSource remoteDataSource; |
| 20 | final HealthDataSource localDataSource; | 21 | final HealthDataSource localDataSource; |
| 21 | final _myUserId = Get.find<UserStateService>().userId; | 22 | final _myUserId = Get.find<UserStateService>().userId; |
| 23 | + static const _hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 22 | 24 | ||
| 23 | @override | 25 | @override |
| 24 | Future<AppResult<SleepStatisticsData>> getSleepStatistics( | 26 | Future<AppResult<SleepStatisticsData>> getSleepStatistics( |
| @@ -60,17 +62,31 @@ class HealthDataSourceWrapper implements HealthDataSource { | @@ -60,17 +62,31 @@ class HealthDataSourceWrapper implements HealthDataSource { | ||
| 60 | int dateRangeType, | 62 | int dateRangeType, |
| 61 | int startDate, { | 63 | int startDate, { |
| 62 | int? queryUserId, | 64 | int? queryUserId, |
| 63 | - }) { | 65 | + }) async { |
| 66 | + final stopwatch = Stopwatch()..start(); | ||
| 64 | HealthDataSource dataSource = remoteDataSource; | 67 | HealthDataSource dataSource = remoteDataSource; |
| 65 | if (queryUserId == null || _myUserId == queryUserId) { | 68 | if (queryUserId == null || _myUserId == queryUserId) { |
| 66 | dataSource = localDataSource; | 69 | dataSource = localDataSource; |
| 67 | } | 70 | } |
| 71 | + final sourceName = | ||
| 72 | + identical(dataSource, localDataSource) ? 'local' : 'remote'; | ||
| 73 | + _logHrvTrend( | ||
| 74 | + 'wrapper_getHrvStatistics_start source=$sourceName ' | ||
| 75 | + 'dateRangeType=$dateRangeType startDate=$startDate ' | ||
| 76 | + 'queryUserId=$queryUserId myUserId=$_myUserId', | ||
| 77 | + ); | ||
| 68 | 78 | ||
| 69 | - return dataSource.getHrvStatistics( | 79 | + final result = await dataSource.getHrvStatistics( |
| 70 | dateRangeType, | 80 | dateRangeType, |
| 71 | startDate, | 81 | startDate, |
| 72 | queryUserId: queryUserId, | 82 | queryUserId: queryUserId, |
| 73 | ); | 83 | ); |
| 84 | + _logHrvTrend( | ||
| 85 | + 'wrapper_getHrvStatistics_finish source=$sourceName ' | ||
| 86 | + 'success=${result is AppSuccess} ' | ||
| 87 | + 'elapsedMs=${stopwatch.elapsedMilliseconds}', | ||
| 88 | + ); | ||
| 89 | + return result; | ||
| 74 | } | 90 | } |
| 75 | 91 | ||
| 76 | @override | 92 | @override |
| @@ -143,4 +159,8 @@ class HealthDataSourceWrapper implements HealthDataSource { | @@ -143,4 +159,8 @@ class HealthDataSourceWrapper implements HealthDataSource { | ||
| 143 | 159 | ||
| 144 | return dataSource.getV2StressScore(queryUserId, intDate); | 160 | return dataSource.getV2StressScore(queryUserId, intDate); |
| 145 | } | 161 | } |
| 162 | + | ||
| 163 | + void _logHrvTrend(String message) { | ||
| 164 | + debugPrint('$_hrvTrendLogMarker $message'); | ||
| 165 | + } | ||
| 146 | } | 166 | } |
| @@ -23,6 +23,7 @@ class LocalHealthDataSource implements HealthDataSource { | @@ -23,6 +23,7 @@ class LocalHealthDataSource implements HealthDataSource { | ||
| 23 | static const int _ohosDefaultStandGoal = 12; | 23 | static const int _ohosDefaultStandGoal = 12; |
| 24 | static const int _ohosDefaultExerciseGoalSeconds = 30 * 60; | 24 | static const int _ohosDefaultExerciseGoalSeconds = 30 * 60; |
| 25 | static const int _ohosDefaultSleepTargetSeconds = 8 * 60 * 60; | 25 | static const int _ohosDefaultSleepTargetSeconds = 8 * 60 * 60; |
| 26 | + static const String _hrvTrendLogMarker = '[OHOS_HRV_TREND_PROFILE]'; | ||
| 26 | 27 | ||
| 27 | @override | 28 | @override |
| 28 | Future<AppResult<SleepStatisticsData>> getSleepStatistics( | 29 | Future<AppResult<SleepStatisticsData>> getSleepStatistics( |
| @@ -130,7 +131,12 @@ class LocalHealthDataSource implements HealthDataSource { | @@ -130,7 +131,12 @@ class LocalHealthDataSource implements HealthDataSource { | ||
| 130 | int startDate, { | 131 | int startDate, { |
| 131 | int? queryUserId, | 132 | int? queryUserId, |
| 132 | }) async { | 133 | }) async { |
| 134 | + final totalStopwatch = Stopwatch()..start(); | ||
| 133 | try { | 135 | try { |
| 136 | + _hrvTrendLog( | ||
| 137 | + 'local_statistics_start dateRangeType=$dateRangeType ' | ||
| 138 | + 'startDate=$startDate queryUserId=$queryUserId', | ||
| 139 | + ); | ||
| 134 | final days = LocalHealthDataConvert.rangeDays(dateRangeType, startDate); | 140 | final days = LocalHealthDataConvert.rangeDays(dateRangeType, startDate); |
| 135 | if (days.isEmpty) return AppSuccess(HrvStatisticsDataV2()); | 141 | if (days.isEmpty) return AppSuccess(HrvStatisticsDataV2()); |
| 136 | 142 | ||
| @@ -138,36 +144,84 @@ class LocalHealthDataSource implements HealthDataSource { | @@ -138,36 +144,84 @@ class LocalHealthDataSource implements HealthDataSource { | ||
| 138 | dateRangeType, | 144 | dateRangeType, |
| 139 | startDate, | 145 | startDate, |
| 140 | ); | 146 | ); |
| 147 | + _hrvTrendLog( | ||
| 148 | + 'local_statistics_range_finish dateRangeType=$dateRangeType ' | ||
| 149 | + 'days=${days.length} previousDays=${previousDays.length} ' | ||
| 150 | + 'elapsedMs=${totalStopwatch.elapsedMilliseconds}', | ||
| 151 | + ); | ||
| 152 | + final hrvQueryStart = LocalHealthDataConvert.unixSeconds(days.first); | ||
| 153 | + final hrvQueryEnd = LocalHealthDataConvert.unixSeconds( | ||
| 154 | + days.last.add(const Duration(days: 1)), | ||
| 155 | + ); | ||
| 156 | + final dailyQueryStart = LocalHealthDataConvert.dateKey( | ||
| 157 | + previousDays.isEmpty ? days.first : previousDays.first, | ||
| 158 | + ); | ||
| 159 | + final dailyQueryEnd = LocalHealthDataConvert.dateKey(days.last); | ||
| 160 | + | ||
| 161 | + final hrvStopwatch = Stopwatch()..start(); | ||
| 141 | final hrvPoints = await coreService.queryHrvStressPoints( | 162 | final hrvPoints = await coreService.queryHrvStressPoints( |
| 142 | - startTime: LocalHealthDataConvert.unixSeconds(days.first), | ||
| 143 | - endTime: LocalHealthDataConvert.unixSeconds( | ||
| 144 | - days.last.add(const Duration(days: 1)), | ||
| 145 | - ), | 163 | + startTime: hrvQueryStart, |
| 164 | + endTime: hrvQueryEnd, | ||
| 165 | + ); | ||
| 166 | + _hrvTrendLog( | ||
| 167 | + 'local_query_hrv_results_finish startTime=$hrvQueryStart ' | ||
| 168 | + 'endTime=$hrvQueryEnd count=${hrvPoints.length} ' | ||
| 169 | + 'elapsedMs=${hrvStopwatch.elapsedMilliseconds}', | ||
| 146 | ); | 170 | ); |
| 171 | + | ||
| 172 | + final dailyStopwatch = Stopwatch()..start(); | ||
| 147 | final dailyStressPoints = await coreService.queryDailyStressPoints( | 173 | final dailyStressPoints = await coreService.queryDailyStressPoints( |
| 148 | - startDate: LocalHealthDataConvert.dateKey( | ||
| 149 | - previousDays.isEmpty ? days.first : previousDays.first), | ||
| 150 | - endDate: LocalHealthDataConvert.dateKey(days.last), | 174 | + startDate: dailyQueryStart, |
| 175 | + endDate: dailyQueryEnd, | ||
| 151 | ); | 176 | ); |
| 177 | + _hrvTrendLog( | ||
| 178 | + 'local_query_daily_stress_finish startDate=$dailyQueryStart ' | ||
| 179 | + 'endDate=$dailyQueryEnd count=${dailyStressPoints.length} ' | ||
| 180 | + 'elapsedMs=${dailyStopwatch.elapsedMilliseconds}', | ||
| 181 | + ); | ||
| 182 | + | ||
| 183 | + final restingHrStopwatch = Stopwatch()..start(); | ||
| 152 | final restingHeartRate = await coreService.queryRawDataPoints( | 184 | final restingHeartRate = await coreService.queryRawDataPoints( |
| 153 | dataType: HealthDataUploadType.restingHeartRate.type, | 185 | dataType: HealthDataUploadType.restingHeartRate.type, |
| 154 | - startTime: LocalHealthDataConvert.unixSeconds(days.first), | ||
| 155 | - endTime: LocalHealthDataConvert.unixSeconds( | ||
| 156 | - days.last.add(const Duration(days: 1)), | ||
| 157 | - ), | 186 | + startTime: hrvQueryStart, |
| 187 | + endTime: hrvQueryEnd, | ||
| 188 | + ); | ||
| 189 | + _hrvTrendLog( | ||
| 190 | + 'local_query_resting_hr_finish dataType=' | ||
| 191 | + '${HealthDataUploadType.restingHeartRate.type} ' | ||
| 192 | + 'startTime=$hrvQueryStart endTime=$hrvQueryEnd ' | ||
| 193 | + 'count=${restingHeartRate.length} ' | ||
| 194 | + 'elapsedMs=${restingHrStopwatch.elapsedMilliseconds}', | ||
| 158 | ); | 195 | ); |
| 159 | 196 | ||
| 197 | + final convertStopwatch = Stopwatch()..start(); | ||
| 198 | + final statistics = LocalHealthDataConvert.hrvStatistics( | ||
| 199 | + dateRangeType: dateRangeType, | ||
| 200 | + days: days, | ||
| 201 | + previousDays: previousDays, | ||
| 202 | + hrvPoints: hrvPoints, | ||
| 203 | + dailyStressPoints: dailyStressPoints, | ||
| 204 | + restingHeartRate: restingHeartRate, | ||
| 205 | + ); | ||
| 206 | + _hrvTrendLog( | ||
| 207 | + 'local_convert_finish trendCount=' | ||
| 208 | + '${statistics.hrvTrendList?.length ?? 0} ' | ||
| 209 | + 'distributionCount=${statistics.hrvDistributionList?.length ?? 0} ' | ||
| 210 | + 'elapsedMs=${convertStopwatch.elapsedMilliseconds}', | ||
| 211 | + ); | ||
| 212 | + _hrvTrendLog( | ||
| 213 | + 'local_statistics_finish dateRangeType=$dateRangeType ' | ||
| 214 | + 'elapsedMs=${totalStopwatch.elapsedMilliseconds}', | ||
| 215 | + ); | ||
| 160 | return AppSuccess( | 216 | return AppSuccess( |
| 161 | - LocalHealthDataConvert.hrvStatistics( | ||
| 162 | - dateRangeType: dateRangeType, | ||
| 163 | - days: days, | ||
| 164 | - previousDays: previousDays, | ||
| 165 | - hrvPoints: hrvPoints, | ||
| 166 | - dailyStressPoints: dailyStressPoints, | ||
| 167 | - restingHeartRate: restingHeartRate, | ||
| 168 | - ), | 217 | + statistics, |
| 169 | ); | 218 | ); |
| 170 | } catch (error) { | 219 | } catch (error) { |
| 220 | + _hrvTrendLog( | ||
| 221 | + 'local_statistics_failed dateRangeType=$dateRangeType ' | ||
| 222 | + 'startDate=$startDate elapsedMs=${totalStopwatch.elapsedMilliseconds} ' | ||
| 223 | + 'error=$error', | ||
| 224 | + ); | ||
| 171 | return AppFailure(AppUnknownError(error)); | 225 | return AppFailure(AppUnknownError(error)); |
| 172 | } | 226 | } |
| 173 | } | 227 | } |
| @@ -433,6 +487,10 @@ class LocalHealthDataSource implements HealthDataSource { | @@ -433,6 +487,10 @@ class LocalHealthDataSource implements HealthDataSource { | ||
| 433 | 487 | ||
| 434 | bool get _isOhosPlatform => defaultTargetPlatform.name == 'ohos'; | 488 | bool get _isOhosPlatform => defaultTargetPlatform.name == 'ohos'; |
| 435 | 489 | ||
| 490 | + void _hrvTrendLog(String message) { | ||
| 491 | + debugPrint('$_hrvTrendLogMarker $message'); | ||
| 492 | + } | ||
| 493 | + | ||
| 436 | Future<List<HealthKitRawActivityDataPoint>> | 494 | Future<List<HealthKitRawActivityDataPoint>> |
| 437 | _resolveOhosActivityGoalsIfNeeded({ | 495 | _resolveOhosActivityGoalsIfNeeded({ |
| 438 | required List<HealthKitRawActivityDataPoint> activity, | 496 | required List<HealthKitRawActivityDataPoint> activity, |
| @@ -6,7 +6,7 @@ packages: | @@ -6,7 +6,7 @@ packages: | ||
| 6 | description: | 6 | description: |
| 7 | name: _fe_analyzer_shared | 7 | name: _fe_analyzer_shared |
| 8 | sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f | 8 | sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f |
| 9 | - url: "https://pub.flutter-io.cn" | 9 | + url: "https://pub.dev" |
| 10 | source: hosted | 10 | source: hosted |
| 11 | version: "85.0.0" | 11 | version: "85.0.0" |
| 12 | analyzer: | 12 | analyzer: |
| @@ -14,7 +14,7 @@ packages: | @@ -14,7 +14,7 @@ packages: | ||
| 14 | description: | 14 | description: |
| 15 | name: analyzer | 15 | name: analyzer |
| 16 | sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d" | 16 | sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d" |
| 17 | - url: "https://pub.flutter-io.cn" | 17 | + url: "https://pub.dev" |
| 18 | source: hosted | 18 | source: hosted |
| 19 | version: "7.7.1" | 19 | version: "7.7.1" |
| 20 | archive: | 20 | archive: |
| @@ -22,7 +22,7 @@ packages: | @@ -22,7 +22,7 @@ packages: | ||
| 22 | description: | 22 | description: |
| 23 | name: archive | 23 | name: archive |
| 24 | sha256: ace891da0862b0e4cabbb064ee3fd87b2728b898949fdb366d83fe98342c9f19 | 24 | sha256: ace891da0862b0e4cabbb064ee3fd87b2728b898949fdb366d83fe98342c9f19 |
| 25 | - url: "https://pub.flutter-io.cn" | 25 | + url: "https://pub.dev" |
| 26 | source: hosted | 26 | source: hosted |
| 27 | version: "4.2.0" | 27 | version: "4.2.0" |
| 28 | args: | 28 | args: |
| @@ -30,7 +30,7 @@ packages: | @@ -30,7 +30,7 @@ packages: | ||
| 30 | description: | 30 | description: |
| 31 | name: args | 31 | name: args |
| 32 | sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 | 32 | sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 |
| 33 | - url: "https://pub.flutter-io.cn" | 33 | + url: "https://pub.dev" |
| 34 | source: hosted | 34 | source: hosted |
| 35 | version: "2.7.0" | 35 | version: "2.7.0" |
| 36 | async: | 36 | async: |
| @@ -38,7 +38,7 @@ packages: | @@ -38,7 +38,7 @@ packages: | ||
| 38 | description: | 38 | description: |
| 39 | name: async | 39 | name: async |
| 40 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" | 40 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" |
| 41 | - url: "https://pub.flutter-io.cn" | 41 | + url: "https://pub.dev" |
| 42 | source: hosted | 42 | source: hosted |
| 43 | version: "2.11.0" | 43 | version: "2.11.0" |
| 44 | boolean_selector: | 44 | boolean_selector: |
| @@ -46,7 +46,7 @@ packages: | @@ -46,7 +46,7 @@ packages: | ||
| 46 | description: | 46 | description: |
| 47 | name: boolean_selector | 47 | name: boolean_selector |
| 48 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" | 48 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" |
| 49 | - url: "https://pub.flutter-io.cn" | 49 | + url: "https://pub.dev" |
| 50 | source: hosted | 50 | source: hosted |
| 51 | version: "2.1.1" | 51 | version: "2.1.1" |
| 52 | build: | 52 | build: |
| @@ -54,7 +54,7 @@ packages: | @@ -54,7 +54,7 @@ packages: | ||
| 54 | description: | 54 | description: |
| 55 | name: build | 55 | name: build |
| 56 | sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 | 56 | sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 |
| 57 | - url: "https://pub.flutter-io.cn" | 57 | + url: "https://pub.dev" |
| 58 | source: hosted | 58 | source: hosted |
| 59 | version: "2.4.2" | 59 | version: "2.4.2" |
| 60 | build_config: | 60 | build_config: |
| @@ -62,7 +62,7 @@ packages: | @@ -62,7 +62,7 @@ packages: | ||
| 62 | description: | 62 | description: |
| 63 | name: build_config | 63 | name: build_config |
| 64 | sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" | 64 | sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" |
| 65 | - url: "https://pub.flutter-io.cn" | 65 | + url: "https://pub.dev" |
| 66 | source: hosted | 66 | source: hosted |
| 67 | version: "1.1.2" | 67 | version: "1.1.2" |
| 68 | build_daemon: | 68 | build_daemon: |
| @@ -70,7 +70,7 @@ packages: | @@ -70,7 +70,7 @@ packages: | ||
| 70 | description: | 70 | description: |
| 71 | name: build_daemon | 71 | name: build_daemon |
| 72 | sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" | 72 | sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" |
| 73 | - url: "https://pub.flutter-io.cn" | 73 | + url: "https://pub.dev" |
| 74 | source: hosted | 74 | source: hosted |
| 75 | version: "4.0.4" | 75 | version: "4.0.4" |
| 76 | build_resolvers: | 76 | build_resolvers: |
| @@ -78,7 +78,7 @@ packages: | @@ -78,7 +78,7 @@ packages: | ||
| 78 | description: | 78 | description: |
| 79 | name: build_resolvers | 79 | name: build_resolvers |
| 80 | sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 | 80 | sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 |
| 81 | - url: "https://pub.flutter-io.cn" | 81 | + url: "https://pub.dev" |
| 82 | source: hosted | 82 | source: hosted |
| 83 | version: "2.4.4" | 83 | version: "2.4.4" |
| 84 | build_runner: | 84 | build_runner: |
| @@ -86,7 +86,7 @@ packages: | @@ -86,7 +86,7 @@ packages: | ||
| 86 | description: | 86 | description: |
| 87 | name: build_runner | 87 | name: build_runner |
| 88 | sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99" | 88 | sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99" |
| 89 | - url: "https://pub.flutter-io.cn" | 89 | + url: "https://pub.dev" |
| 90 | source: hosted | 90 | source: hosted |
| 91 | version: "2.4.15" | 91 | version: "2.4.15" |
| 92 | build_runner_core: | 92 | build_runner_core: |
| @@ -94,7 +94,7 @@ packages: | @@ -94,7 +94,7 @@ packages: | ||
| 94 | description: | 94 | description: |
| 95 | name: build_runner_core | 95 | name: build_runner_core |
| 96 | sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" | 96 | sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" |
| 97 | - url: "https://pub.flutter-io.cn" | 97 | + url: "https://pub.dev" |
| 98 | source: hosted | 98 | source: hosted |
| 99 | version: "8.0.0" | 99 | version: "8.0.0" |
| 100 | built_collection: | 100 | built_collection: |
| @@ -102,7 +102,7 @@ packages: | @@ -102,7 +102,7 @@ packages: | ||
| 102 | description: | 102 | description: |
| 103 | name: built_collection | 103 | name: built_collection |
| 104 | sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" | 104 | sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" |
| 105 | - url: "https://pub.flutter-io.cn" | 105 | + url: "https://pub.dev" |
| 106 | source: hosted | 106 | source: hosted |
| 107 | version: "5.1.1" | 107 | version: "5.1.1" |
| 108 | built_value: | 108 | built_value: |
| @@ -110,7 +110,7 @@ packages: | @@ -110,7 +110,7 @@ packages: | ||
| 110 | description: | 110 | description: |
| 111 | name: built_value | 111 | name: built_value |
| 112 | sha256: f87ea98192116f7093cb214551ce1929caae0681fdba282b3d8b4462adee7bb7 | 112 | sha256: f87ea98192116f7093cb214551ce1929caae0681fdba282b3d8b4462adee7bb7 |
| 113 | - url: "https://pub.flutter-io.cn" | 113 | + url: "https://pub.dev" |
| 114 | source: hosted | 114 | source: hosted |
| 115 | version: "8.13.0" | 115 | version: "8.13.0" |
| 116 | cached_network_image: | 116 | cached_network_image: |
| @@ -118,7 +118,7 @@ packages: | @@ -118,7 +118,7 @@ packages: | ||
| 118 | description: | 118 | description: |
| 119 | name: cached_network_image | 119 | name: cached_network_image |
| 120 | sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" | 120 | sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" |
| 121 | - url: "https://pub.flutter-io.cn" | 121 | + url: "https://pub.dev" |
| 122 | source: hosted | 122 | source: hosted |
| 123 | version: "3.4.1" | 123 | version: "3.4.1" |
| 124 | cached_network_image_platform_interface: | 124 | cached_network_image_platform_interface: |
| @@ -126,7 +126,7 @@ packages: | @@ -126,7 +126,7 @@ packages: | ||
| 126 | description: | 126 | description: |
| 127 | name: cached_network_image_platform_interface | 127 | name: cached_network_image_platform_interface |
| 128 | sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" | 128 | sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" |
| 129 | - url: "https://pub.flutter-io.cn" | 129 | + url: "https://pub.dev" |
| 130 | source: hosted | 130 | source: hosted |
| 131 | version: "4.1.1" | 131 | version: "4.1.1" |
| 132 | cached_network_image_web: | 132 | cached_network_image_web: |
| @@ -134,7 +134,7 @@ packages: | @@ -134,7 +134,7 @@ packages: | ||
| 134 | description: | 134 | description: |
| 135 | name: cached_network_image_web | 135 | name: cached_network_image_web |
| 136 | sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" | 136 | sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" |
| 137 | - url: "https://pub.flutter-io.cn" | 137 | + url: "https://pub.dev" |
| 138 | source: hosted | 138 | source: hosted |
| 139 | version: "1.3.1" | 139 | version: "1.3.1" |
| 140 | characters: | 140 | characters: |
| @@ -142,7 +142,7 @@ packages: | @@ -142,7 +142,7 @@ packages: | ||
| 142 | description: | 142 | description: |
| 143 | name: characters | 143 | name: characters |
| 144 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" | 144 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" |
| 145 | - url: "https://pub.flutter-io.cn" | 145 | + url: "https://pub.dev" |
| 146 | source: hosted | 146 | source: hosted |
| 147 | version: "1.3.0" | 147 | version: "1.3.0" |
| 148 | checked_yaml: | 148 | checked_yaml: |
| @@ -150,7 +150,7 @@ packages: | @@ -150,7 +150,7 @@ packages: | ||
| 150 | description: | 150 | description: |
| 151 | name: checked_yaml | 151 | name: checked_yaml |
| 152 | sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff | 152 | sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff |
| 153 | - url: "https://pub.flutter-io.cn" | 153 | + url: "https://pub.dev" |
| 154 | source: hosted | 154 | source: hosted |
| 155 | version: "2.0.3" | 155 | version: "2.0.3" |
| 156 | clock: | 156 | clock: |
| @@ -158,7 +158,7 @@ packages: | @@ -158,7 +158,7 @@ packages: | ||
| 158 | description: | 158 | description: |
| 159 | name: clock | 159 | name: clock |
| 160 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf | 160 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf |
| 161 | - url: "https://pub.flutter-io.cn" | 161 | + url: "https://pub.dev" |
| 162 | source: hosted | 162 | source: hosted |
| 163 | version: "1.1.1" | 163 | version: "1.1.1" |
| 164 | code_builder: | 164 | code_builder: |
| @@ -166,7 +166,7 @@ packages: | @@ -166,7 +166,7 @@ packages: | ||
| 166 | description: | 166 | description: |
| 167 | name: code_builder | 167 | name: code_builder |
| 168 | sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" | 168 | sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" |
| 169 | - url: "https://pub.flutter-io.cn" | 169 | + url: "https://pub.dev" |
| 170 | source: hosted | 170 | source: hosted |
| 171 | version: "4.10.1" | 171 | version: "4.10.1" |
| 172 | collection: | 172 | collection: |
| @@ -174,7 +174,7 @@ packages: | @@ -174,7 +174,7 @@ packages: | ||
| 174 | description: | 174 | description: |
| 175 | name: collection | 175 | name: collection |
| 176 | sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf | 176 | sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf |
| 177 | - url: "https://pub.flutter-io.cn" | 177 | + url: "https://pub.dev" |
| 178 | source: hosted | 178 | source: hosted |
| 179 | version: "1.19.0" | 179 | version: "1.19.0" |
| 180 | convert: | 180 | convert: |
| @@ -182,7 +182,7 @@ packages: | @@ -182,7 +182,7 @@ packages: | ||
| 182 | description: | 182 | description: |
| 183 | name: convert | 183 | name: convert |
| 184 | sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 | 184 | sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 |
| 185 | - url: "https://pub.flutter-io.cn" | 185 | + url: "https://pub.dev" |
| 186 | source: hosted | 186 | source: hosted |
| 187 | version: "3.1.2" | 187 | version: "3.1.2" |
| 188 | cross_file: | 188 | cross_file: |
| @@ -190,7 +190,7 @@ packages: | @@ -190,7 +190,7 @@ packages: | ||
| 190 | description: | 190 | description: |
| 191 | name: cross_file | 191 | name: cross_file |
| 192 | sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" | 192 | sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" |
| 193 | - url: "https://pub.flutter-io.cn" | 193 | + url: "https://pub.dev" |
| 194 | source: hosted | 194 | source: hosted |
| 195 | version: "0.3.4+2" | 195 | version: "0.3.4+2" |
| 196 | crypto: | 196 | crypto: |
| @@ -198,7 +198,7 @@ packages: | @@ -198,7 +198,7 @@ packages: | ||
| 198 | description: | 198 | description: |
| 199 | name: crypto | 199 | name: crypto |
| 200 | sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf | 200 | sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf |
| 201 | - url: "https://pub.flutter-io.cn" | 201 | + url: "https://pub.dev" |
| 202 | source: hosted | 202 | source: hosted |
| 203 | version: "3.0.7" | 203 | version: "3.0.7" |
| 204 | cupertino_icons: | 204 | cupertino_icons: |
| @@ -206,7 +206,7 @@ packages: | @@ -206,7 +206,7 @@ packages: | ||
| 206 | description: | 206 | description: |
| 207 | name: cupertino_icons | 207 | name: cupertino_icons |
| 208 | sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 | 208 | sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 |
| 209 | - url: "https://pub.flutter-io.cn" | 209 | + url: "https://pub.dev" |
| 210 | source: hosted | 210 | source: hosted |
| 211 | version: "1.0.8" | 211 | version: "1.0.8" |
| 212 | dart_style: | 212 | dart_style: |
| @@ -214,7 +214,7 @@ packages: | @@ -214,7 +214,7 @@ packages: | ||
| 214 | description: | 214 | description: |
| 215 | name: dart_style | 215 | name: dart_style |
| 216 | sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac" | 216 | sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac" |
| 217 | - url: "https://pub.flutter-io.cn" | 217 | + url: "https://pub.dev" |
| 218 | source: hosted | 218 | source: hosted |
| 219 | version: "3.0.1" | 219 | version: "3.0.1" |
| 220 | dio: | 220 | dio: |
| @@ -222,7 +222,7 @@ packages: | @@ -222,7 +222,7 @@ packages: | ||
| 222 | description: | 222 | description: |
| 223 | name: dio | 223 | name: dio |
| 224 | sha256: "852ec3b48cc431ac04fff978413c541502b67ffc3e26921e74e3d994694192c1" | 224 | sha256: "852ec3b48cc431ac04fff978413c541502b67ffc3e26921e74e3d994694192c1" |
| 225 | - url: "https://pub.flutter-io.cn" | 225 | + url: "https://pub.dev" |
| 226 | source: hosted | 226 | source: hosted |
| 227 | version: "5.11.1" | 227 | version: "5.11.1" |
| 228 | dio_web_adapter: | 228 | dio_web_adapter: |
| @@ -230,7 +230,7 @@ packages: | @@ -230,7 +230,7 @@ packages: | ||
| 230 | description: | 230 | description: |
| 231 | name: dio_web_adapter | 231 | name: dio_web_adapter |
| 232 | sha256: "3a1b2cd7be71086f38504956e3ebcd2837288d231ff454bafa78021244102bfc" | 232 | sha256: "3a1b2cd7be71086f38504956e3ebcd2837288d231ff454bafa78021244102bfc" |
| 233 | - url: "https://pub.flutter-io.cn" | 233 | + url: "https://pub.dev" |
| 234 | source: hosted | 234 | source: hosted |
| 235 | version: "2.2.2" | 235 | version: "2.2.2" |
| 236 | equatable: | 236 | equatable: |
| @@ -238,7 +238,7 @@ packages: | @@ -238,7 +238,7 @@ packages: | ||
| 238 | description: | 238 | description: |
| 239 | name: equatable | 239 | name: equatable |
| 240 | sha256: "3bce007a596ff8b3119c45d68aaef631272537c03d30e5d4534dd24bf4c5eaa2" | 240 | sha256: "3bce007a596ff8b3119c45d68aaef631272537c03d30e5d4534dd24bf4c5eaa2" |
| 241 | - url: "https://pub.flutter-io.cn" | 241 | + url: "https://pub.dev" |
| 242 | source: hosted | 242 | source: hosted |
| 243 | version: "2.1.0" | 243 | version: "2.1.0" |
| 244 | fake_async: | 244 | fake_async: |
| @@ -246,7 +246,7 @@ packages: | @@ -246,7 +246,7 @@ packages: | ||
| 246 | description: | 246 | description: |
| 247 | name: fake_async | 247 | name: fake_async |
| 248 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" | 248 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" |
| 249 | - url: "https://pub.flutter-io.cn" | 249 | + url: "https://pub.dev" |
| 250 | source: hosted | 250 | source: hosted |
| 251 | version: "1.3.1" | 251 | version: "1.3.1" |
| 252 | ffi: | 252 | ffi: |
| @@ -254,7 +254,7 @@ packages: | @@ -254,7 +254,7 @@ packages: | ||
| 254 | description: | 254 | description: |
| 255 | name: ffi | 255 | name: ffi |
| 256 | sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" | 256 | sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" |
| 257 | - url: "https://pub.flutter-io.cn" | 257 | + url: "https://pub.dev" |
| 258 | source: hosted | 258 | source: hosted |
| 259 | version: "2.1.3" | 259 | version: "2.1.3" |
| 260 | file: | 260 | file: |
| @@ -262,7 +262,7 @@ packages: | @@ -262,7 +262,7 @@ packages: | ||
| 262 | description: | 262 | description: |
| 263 | name: file | 263 | name: file |
| 264 | sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 | 264 | sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 |
| 265 | - url: "https://pub.flutter-io.cn" | 265 | + url: "https://pub.dev" |
| 266 | source: hosted | 266 | source: hosted |
| 267 | version: "7.0.1" | 267 | version: "7.0.1" |
| 268 | file_selector_linux: | 268 | file_selector_linux: |
| @@ -270,7 +270,7 @@ packages: | @@ -270,7 +270,7 @@ packages: | ||
| 270 | description: | 270 | description: |
| 271 | name: file_selector_linux | 271 | name: file_selector_linux |
| 272 | sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" | 272 | sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" |
| 273 | - url: "https://pub.flutter-io.cn" | 273 | + url: "https://pub.dev" |
| 274 | source: hosted | 274 | source: hosted |
| 275 | version: "0.9.3+2" | 275 | version: "0.9.3+2" |
| 276 | file_selector_macos: | 276 | file_selector_macos: |
| @@ -278,7 +278,7 @@ packages: | @@ -278,7 +278,7 @@ packages: | ||
| 278 | description: | 278 | description: |
| 279 | name: file_selector_macos | 279 | name: file_selector_macos |
| 280 | sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711" | 280 | sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711" |
| 281 | - url: "https://pub.flutter-io.cn" | 281 | + url: "https://pub.dev" |
| 282 | source: hosted | 282 | source: hosted |
| 283 | version: "0.9.4+3" | 283 | version: "0.9.4+3" |
| 284 | file_selector_platform_interface: | 284 | file_selector_platform_interface: |
| @@ -286,7 +286,7 @@ packages: | @@ -286,7 +286,7 @@ packages: | ||
| 286 | description: | 286 | description: |
| 287 | name: file_selector_platform_interface | 287 | name: file_selector_platform_interface |
| 288 | sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b | 288 | sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b |
| 289 | - url: "https://pub.flutter-io.cn" | 289 | + url: "https://pub.dev" |
| 290 | source: hosted | 290 | source: hosted |
| 291 | version: "2.6.2" | 291 | version: "2.6.2" |
| 292 | file_selector_windows: | 292 | file_selector_windows: |
| @@ -294,7 +294,7 @@ packages: | @@ -294,7 +294,7 @@ packages: | ||
| 294 | description: | 294 | description: |
| 295 | name: file_selector_windows | 295 | name: file_selector_windows |
| 296 | sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" | 296 | sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" |
| 297 | - url: "https://pub.flutter-io.cn" | 297 | + url: "https://pub.dev" |
| 298 | source: hosted | 298 | source: hosted |
| 299 | version: "0.9.3+4" | 299 | version: "0.9.3+4" |
| 300 | fixnum: | 300 | fixnum: |
| @@ -302,7 +302,7 @@ packages: | @@ -302,7 +302,7 @@ packages: | ||
| 302 | description: | 302 | description: |
| 303 | name: fixnum | 303 | name: fixnum |
| 304 | sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be | 304 | sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be |
| 305 | - url: "https://pub.flutter-io.cn" | 305 | + url: "https://pub.dev" |
| 306 | source: hosted | 306 | source: hosted |
| 307 | version: "1.1.1" | 307 | version: "1.1.1" |
| 308 | fl_chart: | 308 | fl_chart: |
| @@ -310,7 +310,7 @@ packages: | @@ -310,7 +310,7 @@ packages: | ||
| 310 | description: | 310 | description: |
| 311 | name: fl_chart | 311 | name: fl_chart |
| 312 | sha256: "5276944c6ffc975ae796569a826c38a62d2abcf264e26b88fa6f482e107f4237" | 312 | sha256: "5276944c6ffc975ae796569a826c38a62d2abcf264e26b88fa6f482e107f4237" |
| 313 | - url: "https://pub.flutter-io.cn" | 313 | + url: "https://pub.dev" |
| 314 | source: hosted | 314 | source: hosted |
| 315 | version: "0.70.2" | 315 | version: "0.70.2" |
| 316 | flutter: | 316 | flutter: |
| @@ -323,7 +323,7 @@ packages: | @@ -323,7 +323,7 @@ packages: | ||
| 323 | description: | 323 | description: |
| 324 | name: flutter_cache_manager | 324 | name: flutter_cache_manager |
| 325 | sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" | 325 | sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" |
| 326 | - url: "https://pub.flutter-io.cn" | 326 | + url: "https://pub.dev" |
| 327 | source: hosted | 327 | source: hosted |
| 328 | version: "3.4.1" | 328 | version: "3.4.1" |
| 329 | flutter_lints: | 329 | flutter_lints: |
| @@ -331,7 +331,7 @@ packages: | @@ -331,7 +331,7 @@ packages: | ||
| 331 | description: | 331 | description: |
| 332 | name: flutter_lints | 332 | name: flutter_lints |
| 333 | sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" | 333 | sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" |
| 334 | - url: "https://pub.flutter-io.cn" | 334 | + url: "https://pub.dev" |
| 335 | source: hosted | 335 | source: hosted |
| 336 | version: "5.0.0" | 336 | version: "5.0.0" |
| 337 | flutter_localizations: | 337 | flutter_localizations: |
| @@ -344,7 +344,7 @@ packages: | @@ -344,7 +344,7 @@ packages: | ||
| 344 | description: | 344 | description: |
| 345 | name: flutter_plugin_android_lifecycle | 345 | name: flutter_plugin_android_lifecycle |
| 346 | sha256: "6382ce712ff69b0f719640ce957559dde459e55ecd433c767e06d139ddf16cab" | 346 | sha256: "6382ce712ff69b0f719640ce957559dde459e55ecd433c767e06d139ddf16cab" |
| 347 | - url: "https://pub.flutter-io.cn" | 347 | + url: "https://pub.dev" |
| 348 | source: hosted | 348 | source: hosted |
| 349 | version: "2.0.29" | 349 | version: "2.0.29" |
| 350 | flutter_test: | 350 | flutter_test: |
| @@ -357,7 +357,7 @@ packages: | @@ -357,7 +357,7 @@ packages: | ||
| 357 | description: | 357 | description: |
| 358 | name: flutter_timezone | 358 | name: flutter_timezone |
| 359 | sha256: "869677426fde92dbe170fb7d2d4929f2a8343c2f5f62f08b0bb64f908630b073" | 359 | sha256: "869677426fde92dbe170fb7d2d4929f2a8343c2f5f62f08b0bb64f908630b073" |
| 360 | - url: "https://pub.flutter-io.cn" | 360 | + url: "https://pub.dev" |
| 361 | source: hosted | 361 | source: hosted |
| 362 | version: "5.1.0" | 362 | version: "5.1.0" |
| 363 | flutter_web_plugins: | 363 | flutter_web_plugins: |
| @@ -379,7 +379,7 @@ packages: | @@ -379,7 +379,7 @@ packages: | ||
| 379 | description: | 379 | description: |
| 380 | name: frontend_server_client | 380 | name: frontend_server_client |
| 381 | sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 | 381 | sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 |
| 382 | - url: "https://pub.flutter-io.cn" | 382 | + url: "https://pub.dev" |
| 383 | source: hosted | 383 | source: hosted |
| 384 | version: "4.0.0" | 384 | version: "4.0.0" |
| 385 | get: | 385 | get: |
| @@ -387,7 +387,7 @@ packages: | @@ -387,7 +387,7 @@ packages: | ||
| 387 | description: | 387 | description: |
| 388 | name: get | 388 | name: get |
| 389 | sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" | 389 | sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" |
| 390 | - url: "https://pub.flutter-io.cn" | 390 | + url: "https://pub.dev" |
| 391 | source: hosted | 391 | source: hosted |
| 392 | version: "4.7.3" | 392 | version: "4.7.3" |
| 393 | glob: | 393 | glob: |
| @@ -395,7 +395,7 @@ packages: | @@ -395,7 +395,7 @@ packages: | ||
| 395 | description: | 395 | description: |
| 396 | name: glob | 396 | name: glob |
| 397 | sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" | 397 | sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" |
| 398 | - url: "https://pub.flutter-io.cn" | 398 | + url: "https://pub.dev" |
| 399 | source: hosted | 399 | source: hosted |
| 400 | version: "2.2.0" | 400 | version: "2.2.0" |
| 401 | graphs: | 401 | graphs: |
| @@ -403,7 +403,7 @@ packages: | @@ -403,7 +403,7 @@ packages: | ||
| 403 | description: | 403 | description: |
| 404 | name: graphs | 404 | name: graphs |
| 405 | sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" | 405 | sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" |
| 406 | - url: "https://pub.flutter-io.cn" | 406 | + url: "https://pub.dev" |
| 407 | source: hosted | 407 | source: hosted |
| 408 | version: "2.3.2" | 408 | version: "2.3.2" |
| 409 | http: | 409 | http: |
| @@ -411,7 +411,7 @@ packages: | @@ -411,7 +411,7 @@ packages: | ||
| 411 | description: | 411 | description: |
| 412 | name: http | 412 | name: http |
| 413 | sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" | 413 | sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" |
| 414 | - url: "https://pub.flutter-io.cn" | 414 | + url: "https://pub.dev" |
| 415 | source: hosted | 415 | source: hosted |
| 416 | version: "1.6.0" | 416 | version: "1.6.0" |
| 417 | http_multi_server: | 417 | http_multi_server: |
| @@ -419,7 +419,7 @@ packages: | @@ -419,7 +419,7 @@ packages: | ||
| 419 | description: | 419 | description: |
| 420 | name: http_multi_server | 420 | name: http_multi_server |
| 421 | sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 | 421 | sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 |
| 422 | - url: "https://pub.flutter-io.cn" | 422 | + url: "https://pub.dev" |
| 423 | source: hosted | 423 | source: hosted |
| 424 | version: "3.2.2" | 424 | version: "3.2.2" |
| 425 | http_parser: | 425 | http_parser: |
| @@ -427,7 +427,7 @@ packages: | @@ -427,7 +427,7 @@ packages: | ||
| 427 | description: | 427 | description: |
| 428 | name: http_parser | 428 | name: http_parser |
| 429 | sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" | 429 | sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" |
| 430 | - url: "https://pub.flutter-io.cn" | 430 | + url: "https://pub.dev" |
| 431 | source: hosted | 431 | source: hosted |
| 432 | version: "4.1.2" | 432 | version: "4.1.2" |
| 433 | image_cropper: | 433 | image_cropper: |
| @@ -471,7 +471,7 @@ packages: | @@ -471,7 +471,7 @@ packages: | ||
| 471 | description: | 471 | description: |
| 472 | name: image_picker_android | 472 | name: image_picker_android |
| 473 | sha256: e83b2b05141469c5e19d77e1dfa11096b6b1567d09065b2265d7c6904560050c | 473 | sha256: e83b2b05141469c5e19d77e1dfa11096b6b1567d09065b2265d7c6904560050c |
| 474 | - url: "https://pub.flutter-io.cn" | 474 | + url: "https://pub.dev" |
| 475 | source: hosted | 475 | source: hosted |
| 476 | version: "0.8.13" | 476 | version: "0.8.13" |
| 477 | image_picker_for_web: | 477 | image_picker_for_web: |
| @@ -479,7 +479,7 @@ packages: | @@ -479,7 +479,7 @@ packages: | ||
| 479 | description: | 479 | description: |
| 480 | name: image_picker_for_web | 480 | name: image_picker_for_web |
| 481 | sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" | 481 | sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" |
| 482 | - url: "https://pub.flutter-io.cn" | 482 | + url: "https://pub.dev" |
| 483 | source: hosted | 483 | source: hosted |
| 484 | version: "3.1.0" | 484 | version: "3.1.0" |
| 485 | image_picker_ios: | 485 | image_picker_ios: |
| @@ -487,7 +487,7 @@ packages: | @@ -487,7 +487,7 @@ packages: | ||
| 487 | description: | 487 | description: |
| 488 | name: image_picker_ios | 488 | name: image_picker_ios |
| 489 | sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e | 489 | sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e |
| 490 | - url: "https://pub.flutter-io.cn" | 490 | + url: "https://pub.dev" |
| 491 | source: hosted | 491 | source: hosted |
| 492 | version: "0.8.13" | 492 | version: "0.8.13" |
| 493 | image_picker_linux: | 493 | image_picker_linux: |
| @@ -495,7 +495,7 @@ packages: | @@ -495,7 +495,7 @@ packages: | ||
| 495 | description: | 495 | description: |
| 496 | name: image_picker_linux | 496 | name: image_picker_linux |
| 497 | sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" | 497 | sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" |
| 498 | - url: "https://pub.flutter-io.cn" | 498 | + url: "https://pub.dev" |
| 499 | source: hosted | 499 | source: hosted |
| 500 | version: "0.2.2" | 500 | version: "0.2.2" |
| 501 | image_picker_macos: | 501 | image_picker_macos: |
| @@ -503,7 +503,7 @@ packages: | @@ -503,7 +503,7 @@ packages: | ||
| 503 | description: | 503 | description: |
| 504 | name: image_picker_macos | 504 | name: image_picker_macos |
| 505 | sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04 | 505 | sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04 |
| 506 | - url: "https://pub.flutter-io.cn" | 506 | + url: "https://pub.dev" |
| 507 | source: hosted | 507 | source: hosted |
| 508 | version: "0.2.2" | 508 | version: "0.2.2" |
| 509 | image_picker_ohos: | 509 | image_picker_ohos: |
| @@ -520,7 +520,7 @@ packages: | @@ -520,7 +520,7 @@ packages: | ||
| 520 | description: | 520 | description: |
| 521 | name: image_picker_platform_interface | 521 | name: image_picker_platform_interface |
| 522 | sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665" | 522 | sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665" |
| 523 | - url: "https://pub.flutter-io.cn" | 523 | + url: "https://pub.dev" |
| 524 | source: hosted | 524 | source: hosted |
| 525 | version: "2.11.0" | 525 | version: "2.11.0" |
| 526 | image_picker_windows: | 526 | image_picker_windows: |
| @@ -528,7 +528,7 @@ packages: | @@ -528,7 +528,7 @@ packages: | ||
| 528 | description: | 528 | description: |
| 529 | name: image_picker_windows | 529 | name: image_picker_windows |
| 530 | sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae | 530 | sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae |
| 531 | - url: "https://pub.flutter-io.cn" | 531 | + url: "https://pub.dev" |
| 532 | source: hosted | 532 | source: hosted |
| 533 | version: "0.2.2" | 533 | version: "0.2.2" |
| 534 | intl: | 534 | intl: |
| @@ -536,7 +536,7 @@ packages: | @@ -536,7 +536,7 @@ packages: | ||
| 536 | description: | 536 | description: |
| 537 | name: intl | 537 | name: intl |
| 538 | sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf | 538 | sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf |
| 539 | - url: "https://pub.flutter-io.cn" | 539 | + url: "https://pub.dev" |
| 540 | source: hosted | 540 | source: hosted |
| 541 | version: "0.19.0" | 541 | version: "0.19.0" |
| 542 | io: | 542 | io: |
| @@ -544,7 +544,7 @@ packages: | @@ -544,7 +544,7 @@ packages: | ||
| 544 | description: | 544 | description: |
| 545 | name: io | 545 | name: io |
| 546 | sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" | 546 | sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" |
| 547 | - url: "https://pub.flutter-io.cn" | 547 | + url: "https://pub.dev" |
| 548 | source: hosted | 548 | source: hosted |
| 549 | version: "1.1.0" | 549 | version: "1.1.0" |
| 550 | js: | 550 | js: |
| @@ -552,7 +552,7 @@ packages: | @@ -552,7 +552,7 @@ packages: | ||
| 552 | description: | 552 | description: |
| 553 | name: js | 553 | name: js |
| 554 | sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf | 554 | sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf |
| 555 | - url: "https://pub.flutter-io.cn" | 555 | + url: "https://pub.dev" |
| 556 | source: hosted | 556 | source: hosted |
| 557 | version: "0.7.1" | 557 | version: "0.7.1" |
| 558 | json_annotation: | 558 | json_annotation: |
| @@ -560,7 +560,7 @@ packages: | @@ -560,7 +560,7 @@ packages: | ||
| 560 | description: | 560 | description: |
| 561 | name: json_annotation | 561 | name: json_annotation |
| 562 | sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" | 562 | sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" |
| 563 | - url: "https://pub.flutter-io.cn" | 563 | + url: "https://pub.dev" |
| 564 | source: hosted | 564 | source: hosted |
| 565 | version: "4.9.0" | 565 | version: "4.9.0" |
| 566 | leak_tracker: | 566 | leak_tracker: |
| @@ -568,7 +568,7 @@ packages: | @@ -568,7 +568,7 @@ packages: | ||
| 568 | description: | 568 | description: |
| 569 | name: leak_tracker | 569 | name: leak_tracker |
| 570 | sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" | 570 | sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" |
| 571 | - url: "https://pub.flutter-io.cn" | 571 | + url: "https://pub.dev" |
| 572 | source: hosted | 572 | source: hosted |
| 573 | version: "10.0.7" | 573 | version: "10.0.7" |
| 574 | leak_tracker_flutter_testing: | 574 | leak_tracker_flutter_testing: |
| @@ -576,7 +576,7 @@ packages: | @@ -576,7 +576,7 @@ packages: | ||
| 576 | description: | 576 | description: |
| 577 | name: leak_tracker_flutter_testing | 577 | name: leak_tracker_flutter_testing |
| 578 | sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" | 578 | sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" |
| 579 | - url: "https://pub.flutter-io.cn" | 579 | + url: "https://pub.dev" |
| 580 | source: hosted | 580 | source: hosted |
| 581 | version: "3.0.8" | 581 | version: "3.0.8" |
| 582 | leak_tracker_testing: | 582 | leak_tracker_testing: |
| @@ -584,7 +584,7 @@ packages: | @@ -584,7 +584,7 @@ packages: | ||
| 584 | description: | 584 | description: |
| 585 | name: leak_tracker_testing | 585 | name: leak_tracker_testing |
| 586 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" | 586 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" |
| 587 | - url: "https://pub.flutter-io.cn" | 587 | + url: "https://pub.dev" |
| 588 | source: hosted | 588 | source: hosted |
| 589 | version: "3.0.1" | 589 | version: "3.0.1" |
| 590 | lints: | 590 | lints: |
| @@ -592,23 +592,23 @@ packages: | @@ -592,23 +592,23 @@ packages: | ||
| 592 | description: | 592 | description: |
| 593 | name: lints | 593 | name: lints |
| 594 | sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 | 594 | sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 |
| 595 | - url: "https://pub.flutter-io.cn" | 595 | + url: "https://pub.dev" |
| 596 | source: hosted | 596 | source: hosted |
| 597 | version: "5.1.1" | 597 | version: "5.1.1" |
| 598 | logger: | 598 | logger: |
| 599 | dependency: "direct main" | 599 | dependency: "direct main" |
| 600 | description: | 600 | description: |
| 601 | name: logger | 601 | name: logger |
| 602 | - sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c" | ||
| 603 | - url: "https://pub.flutter-io.cn" | 602 | + sha256: "2a0dc097e7b01d942475bdd552356db2d0f768b05540bd4b2b53f1840f2239a7" |
| 603 | + url: "https://pub.dev" | ||
| 604 | source: hosted | 604 | source: hosted |
| 605 | - version: "2.7.0" | 605 | + version: "2.8.0" |
| 606 | logging: | 606 | logging: |
| 607 | dependency: transitive | 607 | dependency: transitive |
| 608 | description: | 608 | description: |
| 609 | name: logging | 609 | name: logging |
| 610 | sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 | 610 | sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 |
| 611 | - url: "https://pub.flutter-io.cn" | 611 | + url: "https://pub.dev" |
| 612 | source: hosted | 612 | source: hosted |
| 613 | version: "1.3.0" | 613 | version: "1.3.0" |
| 614 | lottie: | 614 | lottie: |
| @@ -616,7 +616,7 @@ packages: | @@ -616,7 +616,7 @@ packages: | ||
| 616 | description: | 616 | description: |
| 617 | name: lottie | 617 | name: lottie |
| 618 | sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950 | 618 | sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950 |
| 619 | - url: "https://pub.flutter-io.cn" | 619 | + url: "https://pub.dev" |
| 620 | source: hosted | 620 | source: hosted |
| 621 | version: "3.3.1" | 621 | version: "3.3.1" |
| 622 | matcher: | 622 | matcher: |
| @@ -624,7 +624,7 @@ packages: | @@ -624,7 +624,7 @@ packages: | ||
| 624 | description: | 624 | description: |
| 625 | name: matcher | 625 | name: matcher |
| 626 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb | 626 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb |
| 627 | - url: "https://pub.flutter-io.cn" | 627 | + url: "https://pub.dev" |
| 628 | source: hosted | 628 | source: hosted |
| 629 | version: "0.12.16+1" | 629 | version: "0.12.16+1" |
| 630 | material_color_utilities: | 630 | material_color_utilities: |
| @@ -632,7 +632,7 @@ packages: | @@ -632,7 +632,7 @@ packages: | ||
| 632 | description: | 632 | description: |
| 633 | name: material_color_utilities | 633 | name: material_color_utilities |
| 634 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec | 634 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec |
| 635 | - url: "https://pub.flutter-io.cn" | 635 | + url: "https://pub.dev" |
| 636 | source: hosted | 636 | source: hosted |
| 637 | version: "0.11.1" | 637 | version: "0.11.1" |
| 638 | meta: | 638 | meta: |
| @@ -640,7 +640,7 @@ packages: | @@ -640,7 +640,7 @@ packages: | ||
| 640 | description: | 640 | description: |
| 641 | name: meta | 641 | name: meta |
| 642 | sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" | 642 | sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" |
| 643 | - url: "https://pub.flutter-io.cn" | 643 | + url: "https://pub.dev" |
| 644 | source: hosted | 644 | source: hosted |
| 645 | version: "1.19.0" | 645 | version: "1.19.0" |
| 646 | mime: | 646 | mime: |
| @@ -648,7 +648,7 @@ packages: | @@ -648,7 +648,7 @@ packages: | ||
| 648 | description: | 648 | description: |
| 649 | name: mime | 649 | name: mime |
| 650 | sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6 | 650 | sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6 |
| 651 | - url: "https://pub.flutter-io.cn" | 651 | + url: "https://pub.dev" |
| 652 | source: hosted | 652 | source: hosted |
| 653 | version: "2.1.0" | 653 | version: "2.1.0" |
| 654 | octo_image: | 654 | octo_image: |
| @@ -656,7 +656,7 @@ packages: | @@ -656,7 +656,7 @@ packages: | ||
| 656 | description: | 656 | description: |
| 657 | name: octo_image | 657 | name: octo_image |
| 658 | sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" | 658 | sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" |
| 659 | - url: "https://pub.flutter-io.cn" | 659 | + url: "https://pub.dev" |
| 660 | source: hosted | 660 | source: hosted |
| 661 | version: "2.1.0" | 661 | version: "2.1.0" |
| 662 | package_config: | 662 | package_config: |
| @@ -664,7 +664,7 @@ packages: | @@ -664,7 +664,7 @@ packages: | ||
| 664 | description: | 664 | description: |
| 665 | name: package_config | 665 | name: package_config |
| 666 | sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc | 666 | sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc |
| 667 | - url: "https://pub.flutter-io.cn" | 667 | + url: "https://pub.dev" |
| 668 | source: hosted | 668 | source: hosted |
| 669 | version: "2.2.0" | 669 | version: "2.2.0" |
| 670 | path: | 670 | path: |
| @@ -672,7 +672,7 @@ packages: | @@ -672,7 +672,7 @@ packages: | ||
| 672 | description: | 672 | description: |
| 673 | name: path | 673 | name: path |
| 674 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" | 674 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" |
| 675 | - url: "https://pub.flutter-io.cn" | 675 | + url: "https://pub.dev" |
| 676 | source: hosted | 676 | source: hosted |
| 677 | version: "1.9.0" | 677 | version: "1.9.0" |
| 678 | path_provider: | 678 | path_provider: |
| @@ -689,7 +689,7 @@ packages: | @@ -689,7 +689,7 @@ packages: | ||
| 689 | description: | 689 | description: |
| 690 | name: path_provider_android | 690 | name: path_provider_android |
| 691 | sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 | 691 | sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 |
| 692 | - url: "https://pub.flutter-io.cn" | 692 | + url: "https://pub.dev" |
| 693 | source: hosted | 693 | source: hosted |
| 694 | version: "2.2.17" | 694 | version: "2.2.17" |
| 695 | path_provider_foundation: | 695 | path_provider_foundation: |
| @@ -697,7 +697,7 @@ packages: | @@ -697,7 +697,7 @@ packages: | ||
| 697 | description: | 697 | description: |
| 698 | name: path_provider_foundation | 698 | name: path_provider_foundation |
| 699 | sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" | 699 | sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" |
| 700 | - url: "https://pub.flutter-io.cn" | 700 | + url: "https://pub.dev" |
| 701 | source: hosted | 701 | source: hosted |
| 702 | version: "2.4.1" | 702 | version: "2.4.1" |
| 703 | path_provider_linux: | 703 | path_provider_linux: |
| @@ -705,7 +705,7 @@ packages: | @@ -705,7 +705,7 @@ packages: | ||
| 705 | description: | 705 | description: |
| 706 | name: path_provider_linux | 706 | name: path_provider_linux |
| 707 | sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 | 707 | sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 |
| 708 | - url: "https://pub.flutter-io.cn" | 708 | + url: "https://pub.dev" |
| 709 | source: hosted | 709 | source: hosted |
| 710 | version: "2.2.1" | 710 | version: "2.2.1" |
| 711 | path_provider_ohos: | 711 | path_provider_ohos: |
| @@ -722,7 +722,7 @@ packages: | @@ -722,7 +722,7 @@ packages: | ||
| 722 | description: | 722 | description: |
| 723 | name: path_provider_platform_interface | 723 | name: path_provider_platform_interface |
| 724 | sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" | 724 | sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" |
| 725 | - url: "https://pub.flutter-io.cn" | 725 | + url: "https://pub.dev" |
| 726 | source: hosted | 726 | source: hosted |
| 727 | version: "2.1.2" | 727 | version: "2.1.2" |
| 728 | path_provider_windows: | 728 | path_provider_windows: |
| @@ -730,7 +730,7 @@ packages: | @@ -730,7 +730,7 @@ packages: | ||
| 730 | description: | 730 | description: |
| 731 | name: path_provider_windows | 731 | name: path_provider_windows |
| 732 | sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 | 732 | sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 |
| 733 | - url: "https://pub.flutter-io.cn" | 733 | + url: "https://pub.dev" |
| 734 | source: hosted | 734 | source: hosted |
| 735 | version: "2.3.0" | 735 | version: "2.3.0" |
| 736 | permission_handler: | 736 | permission_handler: |
| @@ -738,7 +738,7 @@ packages: | @@ -738,7 +738,7 @@ packages: | ||
| 738 | description: | 738 | description: |
| 739 | name: permission_handler | 739 | name: permission_handler |
| 740 | sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" | 740 | sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" |
| 741 | - url: "https://pub.flutter-io.cn" | 741 | + url: "https://pub.dev" |
| 742 | source: hosted | 742 | source: hosted |
| 743 | version: "11.4.0" | 743 | version: "11.4.0" |
| 744 | permission_handler_android: | 744 | permission_handler_android: |
| @@ -746,7 +746,7 @@ packages: | @@ -746,7 +746,7 @@ packages: | ||
| 746 | description: | 746 | description: |
| 747 | name: permission_handler_android | 747 | name: permission_handler_android |
| 748 | sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc | 748 | sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc |
| 749 | - url: "https://pub.flutter-io.cn" | 749 | + url: "https://pub.dev" |
| 750 | source: hosted | 750 | source: hosted |
| 751 | version: "12.1.0" | 751 | version: "12.1.0" |
| 752 | permission_handler_apple: | 752 | permission_handler_apple: |
| @@ -754,7 +754,7 @@ packages: | @@ -754,7 +754,7 @@ packages: | ||
| 754 | description: | 754 | description: |
| 755 | name: permission_handler_apple | 755 | name: permission_handler_apple |
| 756 | sha256: f49cb15a064ea9d974fc7fbb302099353b7b170d07284e86e264561579e5bcf8 | 756 | sha256: f49cb15a064ea9d974fc7fbb302099353b7b170d07284e86e264561579e5bcf8 |
| 757 | - url: "https://pub.flutter-io.cn" | 757 | + url: "https://pub.dev" |
| 758 | source: hosted | 758 | source: hosted |
| 759 | version: "9.6.1" | 759 | version: "9.6.1" |
| 760 | permission_handler_html: | 760 | permission_handler_html: |
| @@ -762,7 +762,7 @@ packages: | @@ -762,7 +762,7 @@ packages: | ||
| 762 | description: | 762 | description: |
| 763 | name: permission_handler_html | 763 | name: permission_handler_html |
| 764 | sha256: "6ea98b3f17f60d3b527f2647ed2ab4dc0f6bfe25b22cb1c363f5d8f62252f6ac" | 764 | sha256: "6ea98b3f17f60d3b527f2647ed2ab4dc0f6bfe25b22cb1c363f5d8f62252f6ac" |
| 765 | - url: "https://pub.flutter-io.cn" | 765 | + url: "https://pub.dev" |
| 766 | source: hosted | 766 | source: hosted |
| 767 | version: "0.1.4+1" | 767 | version: "0.1.4+1" |
| 768 | permission_handler_ohos: | 768 | permission_handler_ohos: |
| @@ -778,16 +778,16 @@ packages: | @@ -778,16 +778,16 @@ packages: | ||
| 778 | dependency: transitive | 778 | dependency: transitive |
| 779 | description: | 779 | description: |
| 780 | name: permission_handler_platform_interface | 780 | name: permission_handler_platform_interface |
| 781 | - sha256: a5c8a97ecf5616112a5b16d4b8e9ec0e5ae90ef63ac69c0d7b8ae240be760b23 | ||
| 782 | - url: "https://pub.flutter-io.cn" | 781 | + sha256: ed86a61c190258fdd65de395ea0632822e3415c1faec38eae0c31b479c28a531 |
| 782 | + url: "https://pub.dev" | ||
| 783 | source: hosted | 783 | source: hosted |
| 784 | - version: "4.4.0" | 784 | + version: "4.4.1" |
| 785 | permission_handler_windows: | 785 | permission_handler_windows: |
| 786 | dependency: transitive | 786 | dependency: transitive |
| 787 | description: | 787 | description: |
| 788 | name: permission_handler_windows | 788 | name: permission_handler_windows |
| 789 | sha256: caeae01858a0a7d2df67a445ac98e1ad95e55a0e77c73044f4e9b1c8c2289cbd | 789 | sha256: caeae01858a0a7d2df67a445ac98e1ad95e55a0e77c73044f4e9b1c8c2289cbd |
| 790 | - url: "https://pub.flutter-io.cn" | 790 | + url: "https://pub.dev" |
| 791 | source: hosted | 791 | source: hosted |
| 792 | version: "0.2.2" | 792 | version: "0.2.2" |
| 793 | pigeon: | 793 | pigeon: |
| @@ -804,7 +804,7 @@ packages: | @@ -804,7 +804,7 @@ packages: | ||
| 804 | description: | 804 | description: |
| 805 | name: platform | 805 | name: platform |
| 806 | sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" | 806 | sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" |
| 807 | - url: "https://pub.flutter-io.cn" | 807 | + url: "https://pub.dev" |
| 808 | source: hosted | 808 | source: hosted |
| 809 | version: "3.1.6" | 809 | version: "3.1.6" |
| 810 | plugin_platform_interface: | 810 | plugin_platform_interface: |
| @@ -812,7 +812,7 @@ packages: | @@ -812,7 +812,7 @@ packages: | ||
| 812 | description: | 812 | description: |
| 813 | name: plugin_platform_interface | 813 | name: plugin_platform_interface |
| 814 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" | 814 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" |
| 815 | - url: "https://pub.flutter-io.cn" | 815 | + url: "https://pub.dev" |
| 816 | source: hosted | 816 | source: hosted |
| 817 | version: "2.1.8" | 817 | version: "2.1.8" |
| 818 | pool: | 818 | pool: |
| @@ -820,7 +820,7 @@ packages: | @@ -820,7 +820,7 @@ packages: | ||
| 820 | description: | 820 | description: |
| 821 | name: pool | 821 | name: pool |
| 822 | sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" | 822 | sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" |
| 823 | - url: "https://pub.flutter-io.cn" | 823 | + url: "https://pub.dev" |
| 824 | source: hosted | 824 | source: hosted |
| 825 | version: "1.5.3" | 825 | version: "1.5.3" |
| 826 | posix: | 826 | posix: |
| @@ -828,7 +828,7 @@ packages: | @@ -828,7 +828,7 @@ packages: | ||
| 828 | description: | 828 | description: |
| 829 | name: posix | 829 | name: posix |
| 830 | sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e | 830 | sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e |
| 831 | - url: "https://pub.flutter-io.cn" | 831 | + url: "https://pub.dev" |
| 832 | source: hosted | 832 | source: hosted |
| 833 | version: "6.5.2" | 833 | version: "6.5.2" |
| 834 | pretty_dio_logger: | 834 | pretty_dio_logger: |
| @@ -836,7 +836,7 @@ packages: | @@ -836,7 +836,7 @@ packages: | ||
| 836 | description: | 836 | description: |
| 837 | name: pretty_dio_logger | 837 | name: pretty_dio_logger |
| 838 | sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" | 838 | sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" |
| 839 | - url: "https://pub.flutter-io.cn" | 839 | + url: "https://pub.dev" |
| 840 | source: hosted | 840 | source: hosted |
| 841 | version: "1.4.0" | 841 | version: "1.4.0" |
| 842 | pub_semver: | 842 | pub_semver: |
| @@ -844,7 +844,7 @@ packages: | @@ -844,7 +844,7 @@ packages: | ||
| 844 | description: | 844 | description: |
| 845 | name: pub_semver | 845 | name: pub_semver |
| 846 | sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" | 846 | sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" |
| 847 | - url: "https://pub.flutter-io.cn" | 847 | + url: "https://pub.dev" |
| 848 | source: hosted | 848 | source: hosted |
| 849 | version: "2.2.1" | 849 | version: "2.2.1" |
| 850 | pubspec_parse: | 850 | pubspec_parse: |
| @@ -852,7 +852,7 @@ packages: | @@ -852,7 +852,7 @@ packages: | ||
| 852 | description: | 852 | description: |
| 853 | name: pubspec_parse | 853 | name: pubspec_parse |
| 854 | sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" | 854 | sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" |
| 855 | - url: "https://pub.flutter-io.cn" | 855 | + url: "https://pub.dev" |
| 856 | source: hosted | 856 | source: hosted |
| 857 | version: "1.5.0" | 857 | version: "1.5.0" |
| 858 | rxdart: | 858 | rxdart: |
| @@ -860,7 +860,7 @@ packages: | @@ -860,7 +860,7 @@ packages: | ||
| 860 | description: | 860 | description: |
| 861 | name: rxdart | 861 | name: rxdart |
| 862 | sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" | 862 | sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" |
| 863 | - url: "https://pub.flutter-io.cn" | 863 | + url: "https://pub.dev" |
| 864 | source: hosted | 864 | source: hosted |
| 865 | version: "0.28.0" | 865 | version: "0.28.0" |
| 866 | share_plus: | 866 | share_plus: |
| @@ -895,7 +895,7 @@ packages: | @@ -895,7 +895,7 @@ packages: | ||
| 895 | description: | 895 | description: |
| 896 | name: shared_preferences_android | 896 | name: shared_preferences_android |
| 897 | sha256: "5bcf0772a761b04f8c6bf814721713de6f3e5d9d89caf8d3fe031b02a342379e" | 897 | sha256: "5bcf0772a761b04f8c6bf814721713de6f3e5d9d89caf8d3fe031b02a342379e" |
| 898 | - url: "https://pub.flutter-io.cn" | 898 | + url: "https://pub.dev" |
| 899 | source: hosted | 899 | source: hosted |
| 900 | version: "2.4.11" | 900 | version: "2.4.11" |
| 901 | shared_preferences_foundation: | 901 | shared_preferences_foundation: |
| @@ -903,7 +903,7 @@ packages: | @@ -903,7 +903,7 @@ packages: | ||
| 903 | description: | 903 | description: |
| 904 | name: shared_preferences_foundation | 904 | name: shared_preferences_foundation |
| 905 | sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" | 905 | sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" |
| 906 | - url: "https://pub.flutter-io.cn" | 906 | + url: "https://pub.dev" |
| 907 | source: hosted | 907 | source: hosted |
| 908 | version: "2.5.4" | 908 | version: "2.5.4" |
| 909 | shared_preferences_linux: | 909 | shared_preferences_linux: |
| @@ -911,7 +911,7 @@ packages: | @@ -911,7 +911,7 @@ packages: | ||
| 911 | description: | 911 | description: |
| 912 | name: shared_preferences_linux | 912 | name: shared_preferences_linux |
| 913 | sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" | 913 | sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" |
| 914 | - url: "https://pub.flutter-io.cn" | 914 | + url: "https://pub.dev" |
| 915 | source: hosted | 915 | source: hosted |
| 916 | version: "2.4.1" | 916 | version: "2.4.1" |
| 917 | shared_preferences_ohos: | 917 | shared_preferences_ohos: |
| @@ -928,7 +928,7 @@ packages: | @@ -928,7 +928,7 @@ packages: | ||
| 928 | description: | 928 | description: |
| 929 | name: shared_preferences_platform_interface | 929 | name: shared_preferences_platform_interface |
| 930 | sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" | 930 | sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" |
| 931 | - url: "https://pub.flutter-io.cn" | 931 | + url: "https://pub.dev" |
| 932 | source: hosted | 932 | source: hosted |
| 933 | version: "2.4.1" | 933 | version: "2.4.1" |
| 934 | shared_preferences_web: | 934 | shared_preferences_web: |
| @@ -936,7 +936,7 @@ packages: | @@ -936,7 +936,7 @@ packages: | ||
| 936 | description: | 936 | description: |
| 937 | name: shared_preferences_web | 937 | name: shared_preferences_web |
| 938 | sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 | 938 | sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 |
| 939 | - url: "https://pub.flutter-io.cn" | 939 | + url: "https://pub.dev" |
| 940 | source: hosted | 940 | source: hosted |
| 941 | version: "2.4.3" | 941 | version: "2.4.3" |
| 942 | shared_preferences_windows: | 942 | shared_preferences_windows: |
| @@ -944,7 +944,7 @@ packages: | @@ -944,7 +944,7 @@ packages: | ||
| 944 | description: | 944 | description: |
| 945 | name: shared_preferences_windows | 945 | name: shared_preferences_windows |
| 946 | sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" | 946 | sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" |
| 947 | - url: "https://pub.flutter-io.cn" | 947 | + url: "https://pub.dev" |
| 948 | source: hosted | 948 | source: hosted |
| 949 | version: "2.4.1" | 949 | version: "2.4.1" |
| 950 | shelf: | 950 | shelf: |
| @@ -952,7 +952,7 @@ packages: | @@ -952,7 +952,7 @@ packages: | ||
| 952 | description: | 952 | description: |
| 953 | name: shelf | 953 | name: shelf |
| 954 | sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 | 954 | sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 |
| 955 | - url: "https://pub.flutter-io.cn" | 955 | + url: "https://pub.dev" |
| 956 | source: hosted | 956 | source: hosted |
| 957 | version: "1.4.2" | 957 | version: "1.4.2" |
| 958 | shelf_web_socket: | 958 | shelf_web_socket: |
| @@ -960,7 +960,7 @@ packages: | @@ -960,7 +960,7 @@ packages: | ||
| 960 | description: | 960 | description: |
| 961 | name: shelf_web_socket | 961 | name: shelf_web_socket |
| 962 | sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" | 962 | sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" |
| 963 | - url: "https://pub.flutter-io.cn" | 963 | + url: "https://pub.dev" |
| 964 | source: hosted | 964 | source: hosted |
| 965 | version: "3.0.0" | 965 | version: "3.0.0" |
| 966 | simple_gesture_detector: | 966 | simple_gesture_detector: |
| @@ -968,7 +968,7 @@ packages: | @@ -968,7 +968,7 @@ packages: | ||
| 968 | description: | 968 | description: |
| 969 | name: simple_gesture_detector | 969 | name: simple_gesture_detector |
| 970 | sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3 | 970 | sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3 |
| 971 | - url: "https://pub.flutter-io.cn" | 971 | + url: "https://pub.dev" |
| 972 | source: hosted | 972 | source: hosted |
| 973 | version: "0.2.1" | 973 | version: "0.2.1" |
| 974 | sky_engine: | 974 | sky_engine: |
| @@ -981,7 +981,7 @@ packages: | @@ -981,7 +981,7 @@ packages: | ||
| 981 | description: | 981 | description: |
| 982 | name: source_span | 982 | name: source_span |
| 983 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" | 983 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" |
| 984 | - url: "https://pub.flutter-io.cn" | 984 | + url: "https://pub.dev" |
| 985 | source: hosted | 985 | source: hosted |
| 986 | version: "1.10.0" | 986 | version: "1.10.0" |
| 987 | sqflite: | 987 | sqflite: |
| @@ -998,7 +998,7 @@ packages: | @@ -998,7 +998,7 @@ packages: | ||
| 998 | description: | 998 | description: |
| 999 | name: sqflite_android | 999 | name: sqflite_android |
| 1000 | sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" | 1000 | sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" |
| 1001 | - url: "https://pub.flutter-io.cn" | 1001 | + url: "https://pub.dev" |
| 1002 | source: hosted | 1002 | source: hosted |
| 1003 | version: "2.4.0" | 1003 | version: "2.4.0" |
| 1004 | sqflite_common: | 1004 | sqflite_common: |
| @@ -1006,7 +1006,7 @@ packages: | @@ -1006,7 +1006,7 @@ packages: | ||
| 1006 | description: | 1006 | description: |
| 1007 | name: sqflite_common | 1007 | name: sqflite_common |
| 1008 | sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" | 1008 | sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" |
| 1009 | - url: "https://pub.flutter-io.cn" | 1009 | + url: "https://pub.dev" |
| 1010 | source: hosted | 1010 | source: hosted |
| 1011 | version: "2.5.4+6" | 1011 | version: "2.5.4+6" |
| 1012 | sqflite_darwin: | 1012 | sqflite_darwin: |
| @@ -1014,7 +1014,7 @@ packages: | @@ -1014,7 +1014,7 @@ packages: | ||
| 1014 | description: | 1014 | description: |
| 1015 | name: sqflite_darwin | 1015 | name: sqflite_darwin |
| 1016 | sha256: "22adfd9a2c7d634041e96d6241e6e1c8138ca6817018afc5d443fef91dcefa9c" | 1016 | sha256: "22adfd9a2c7d634041e96d6241e6e1c8138ca6817018afc5d443fef91dcefa9c" |
| 1017 | - url: "https://pub.flutter-io.cn" | 1017 | + url: "https://pub.dev" |
| 1018 | source: hosted | 1018 | source: hosted |
| 1019 | version: "2.4.1+1" | 1019 | version: "2.4.1+1" |
| 1020 | sqflite_ohos: | 1020 | sqflite_ohos: |
| @@ -1031,7 +1031,7 @@ packages: | @@ -1031,7 +1031,7 @@ packages: | ||
| 1031 | description: | 1031 | description: |
| 1032 | name: sqflite_platform_interface | 1032 | name: sqflite_platform_interface |
| 1033 | sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" | 1033 | sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" |
| 1034 | - url: "https://pub.flutter-io.cn" | 1034 | + url: "https://pub.dev" |
| 1035 | source: hosted | 1035 | source: hosted |
| 1036 | version: "2.4.0" | 1036 | version: "2.4.0" |
| 1037 | stack_trace: | 1037 | stack_trace: |
| @@ -1039,7 +1039,7 @@ packages: | @@ -1039,7 +1039,7 @@ packages: | ||
| 1039 | description: | 1039 | description: |
| 1040 | name: stack_trace | 1040 | name: stack_trace |
| 1041 | sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" | 1041 | sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" |
| 1042 | - url: "https://pub.flutter-io.cn" | 1042 | + url: "https://pub.dev" |
| 1043 | source: hosted | 1043 | source: hosted |
| 1044 | version: "1.12.0" | 1044 | version: "1.12.0" |
| 1045 | stream_channel: | 1045 | stream_channel: |
| @@ -1047,7 +1047,7 @@ packages: | @@ -1047,7 +1047,7 @@ packages: | ||
| 1047 | description: | 1047 | description: |
| 1048 | name: stream_channel | 1048 | name: stream_channel |
| 1049 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 | 1049 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 |
| 1050 | - url: "https://pub.flutter-io.cn" | 1050 | + url: "https://pub.dev" |
| 1051 | source: hosted | 1051 | source: hosted |
| 1052 | version: "2.1.2" | 1052 | version: "2.1.2" |
| 1053 | stream_transform: | 1053 | stream_transform: |
| @@ -1055,7 +1055,7 @@ packages: | @@ -1055,7 +1055,7 @@ packages: | ||
| 1055 | description: | 1055 | description: |
| 1056 | name: stream_transform | 1056 | name: stream_transform |
| 1057 | sha256: a00e5f18bffc764f923e7dec1038527f7fe7a1791361a7117f0358193f13d53a | 1057 | sha256: a00e5f18bffc764f923e7dec1038527f7fe7a1791361a7117f0358193f13d53a |
| 1058 | - url: "https://pub.flutter-io.cn" | 1058 | + url: "https://pub.dev" |
| 1059 | source: hosted | 1059 | source: hosted |
| 1060 | version: "2.1.2" | 1060 | version: "2.1.2" |
| 1061 | string_scanner: | 1061 | string_scanner: |
| @@ -1063,7 +1063,7 @@ packages: | @@ -1063,7 +1063,7 @@ packages: | ||
| 1063 | description: | 1063 | description: |
| 1064 | name: string_scanner | 1064 | name: string_scanner |
| 1065 | sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" | 1065 | sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" |
| 1066 | - url: "https://pub.flutter-io.cn" | 1066 | + url: "https://pub.dev" |
| 1067 | source: hosted | 1067 | source: hosted |
| 1068 | version: "1.3.0" | 1068 | version: "1.3.0" |
| 1069 | synchronized: | 1069 | synchronized: |
| @@ -1071,7 +1071,7 @@ packages: | @@ -1071,7 +1071,7 @@ packages: | ||
| 1071 | description: | 1071 | description: |
| 1072 | name: synchronized | 1072 | name: synchronized |
| 1073 | sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" | 1073 | sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" |
| 1074 | - url: "https://pub.flutter-io.cn" | 1074 | + url: "https://pub.dev" |
| 1075 | source: hosted | 1075 | source: hosted |
| 1076 | version: "3.3.0+3" | 1076 | version: "3.3.0+3" |
| 1077 | table_calendar: | 1077 | table_calendar: |
| @@ -1079,7 +1079,7 @@ packages: | @@ -1079,7 +1079,7 @@ packages: | ||
| 1079 | description: | 1079 | description: |
| 1080 | name: table_calendar | 1080 | name: table_calendar |
| 1081 | sha256: b2896b7c86adf3a4d9c911d860120fe3dbe03c85db43b22fd61f14ee78cdbb63 | 1081 | sha256: b2896b7c86adf3a4d9c911d860120fe3dbe03c85db43b22fd61f14ee78cdbb63 |
| 1082 | - url: "https://pub.flutter-io.cn" | 1082 | + url: "https://pub.dev" |
| 1083 | source: hosted | 1083 | source: hosted |
| 1084 | version: "3.1.3" | 1084 | version: "3.1.3" |
| 1085 | term_glyph: | 1085 | term_glyph: |
| @@ -1087,7 +1087,7 @@ packages: | @@ -1087,7 +1087,7 @@ packages: | ||
| 1087 | description: | 1087 | description: |
| 1088 | name: term_glyph | 1088 | name: term_glyph |
| 1089 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 | 1089 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 |
| 1090 | - url: "https://pub.flutter-io.cn" | 1090 | + url: "https://pub.dev" |
| 1091 | source: hosted | 1091 | source: hosted |
| 1092 | version: "1.2.1" | 1092 | version: "1.2.1" |
| 1093 | test_api: | 1093 | test_api: |
| @@ -1095,7 +1095,7 @@ packages: | @@ -1095,7 +1095,7 @@ packages: | ||
| 1095 | description: | 1095 | description: |
| 1096 | name: test_api | 1096 | name: test_api |
| 1097 | sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" | 1097 | sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" |
| 1098 | - url: "https://pub.flutter-io.cn" | 1098 | + url: "https://pub.dev" |
| 1099 | source: hosted | 1099 | source: hosted |
| 1100 | version: "0.7.3" | 1100 | version: "0.7.3" |
| 1101 | thinking_analytics: | 1101 | thinking_analytics: |
| @@ -1103,7 +1103,7 @@ packages: | @@ -1103,7 +1103,7 @@ packages: | ||
| 1103 | description: | 1103 | description: |
| 1104 | name: thinking_analytics | 1104 | name: thinking_analytics |
| 1105 | sha256: b01cac0b5482e71c1d75c44c77d27f427662cc65a77b7bc3c8b49617d7a01e02 | 1105 | sha256: b01cac0b5482e71c1d75c44c77d27f427662cc65a77b7bc3c8b49617d7a01e02 |
| 1106 | - url: "https://pub.flutter-io.cn" | 1106 | + url: "https://pub.dev" |
| 1107 | source: hosted | 1107 | source: hosted |
| 1108 | version: "3.3.3" | 1108 | version: "3.3.3" |
| 1109 | timing: | 1109 | timing: |
| @@ -1111,7 +1111,7 @@ packages: | @@ -1111,7 +1111,7 @@ packages: | ||
| 1111 | description: | 1111 | description: |
| 1112 | name: timing | 1112 | name: timing |
| 1113 | sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" | 1113 | sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" |
| 1114 | - url: "https://pub.flutter-io.cn" | 1114 | + url: "https://pub.dev" |
| 1115 | source: hosted | 1115 | source: hosted |
| 1116 | version: "1.0.2" | 1116 | version: "1.0.2" |
| 1117 | typed_data: | 1117 | typed_data: |
| @@ -1119,7 +1119,7 @@ packages: | @@ -1119,7 +1119,7 @@ packages: | ||
| 1119 | description: | 1119 | description: |
| 1120 | name: typed_data | 1120 | name: typed_data |
| 1121 | sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 | 1121 | sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 |
| 1122 | - url: "https://pub.flutter-io.cn" | 1122 | + url: "https://pub.dev" |
| 1123 | source: hosted | 1123 | source: hosted |
| 1124 | version: "1.4.0" | 1124 | version: "1.4.0" |
| 1125 | url_launcher_linux: | 1125 | url_launcher_linux: |
| @@ -1127,7 +1127,7 @@ packages: | @@ -1127,7 +1127,7 @@ packages: | ||
| 1127 | description: | 1127 | description: |
| 1128 | name: url_launcher_linux | 1128 | name: url_launcher_linux |
| 1129 | sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" | 1129 | sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" |
| 1130 | - url: "https://pub.flutter-io.cn" | 1130 | + url: "https://pub.dev" |
| 1131 | source: hosted | 1131 | source: hosted |
| 1132 | version: "3.2.1" | 1132 | version: "3.2.1" |
| 1133 | url_launcher_platform_interface: | 1133 | url_launcher_platform_interface: |
| @@ -1135,7 +1135,7 @@ packages: | @@ -1135,7 +1135,7 @@ packages: | ||
| 1135 | description: | 1135 | description: |
| 1136 | name: url_launcher_platform_interface | 1136 | name: url_launcher_platform_interface |
| 1137 | sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" | 1137 | sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" |
| 1138 | - url: "https://pub.flutter-io.cn" | 1138 | + url: "https://pub.dev" |
| 1139 | source: hosted | 1139 | source: hosted |
| 1140 | version: "2.3.2" | 1140 | version: "2.3.2" |
| 1141 | url_launcher_web: | 1141 | url_launcher_web: |
| @@ -1143,7 +1143,7 @@ packages: | @@ -1143,7 +1143,7 @@ packages: | ||
| 1143 | description: | 1143 | description: |
| 1144 | name: url_launcher_web | 1144 | name: url_launcher_web |
| 1145 | sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" | 1145 | sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" |
| 1146 | - url: "https://pub.flutter-io.cn" | 1146 | + url: "https://pub.dev" |
| 1147 | source: hosted | 1147 | source: hosted |
| 1148 | version: "2.4.1" | 1148 | version: "2.4.1" |
| 1149 | url_launcher_windows: | 1149 | url_launcher_windows: |
| @@ -1151,7 +1151,7 @@ packages: | @@ -1151,7 +1151,7 @@ packages: | ||
| 1151 | description: | 1151 | description: |
| 1152 | name: url_launcher_windows | 1152 | name: url_launcher_windows |
| 1153 | sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" | 1153 | sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" |
| 1154 | - url: "https://pub.flutter-io.cn" | 1154 | + url: "https://pub.dev" |
| 1155 | source: hosted | 1155 | source: hosted |
| 1156 | version: "3.1.4" | 1156 | version: "3.1.4" |
| 1157 | uuid: | 1157 | uuid: |
| @@ -1159,7 +1159,7 @@ packages: | @@ -1159,7 +1159,7 @@ packages: | ||
| 1159 | description: | 1159 | description: |
| 1160 | name: uuid | 1160 | name: uuid |
| 1161 | sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" | 1161 | sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" |
| 1162 | - url: "https://pub.flutter-io.cn" | 1162 | + url: "https://pub.dev" |
| 1163 | source: hosted | 1163 | source: hosted |
| 1164 | version: "4.6.0" | 1164 | version: "4.6.0" |
| 1165 | vector_math: | 1165 | vector_math: |
| @@ -1167,7 +1167,7 @@ packages: | @@ -1167,7 +1167,7 @@ packages: | ||
| 1167 | description: | 1167 | description: |
| 1168 | name: vector_math | 1168 | name: vector_math |
| 1169 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" | 1169 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" |
| 1170 | - url: "https://pub.flutter-io.cn" | 1170 | + url: "https://pub.dev" |
| 1171 | source: hosted | 1171 | source: hosted |
| 1172 | version: "2.1.4" | 1172 | version: "2.1.4" |
| 1173 | video_thumbnail: | 1173 | video_thumbnail: |
| @@ -1175,7 +1175,7 @@ packages: | @@ -1175,7 +1175,7 @@ packages: | ||
| 1175 | description: | 1175 | description: |
| 1176 | name: video_thumbnail | 1176 | name: video_thumbnail |
| 1177 | sha256: "181a0c205b353918954a881f53a3441476b9e301641688a581e0c13f00dc588b" | 1177 | sha256: "181a0c205b353918954a881f53a3441476b9e301641688a581e0c13f00dc588b" |
| 1178 | - url: "https://pub.flutter-io.cn" | 1178 | + url: "https://pub.dev" |
| 1179 | source: hosted | 1179 | source: hosted |
| 1180 | version: "0.5.6" | 1180 | version: "0.5.6" |
| 1181 | vm_service: | 1181 | vm_service: |
| @@ -1183,7 +1183,7 @@ packages: | @@ -1183,7 +1183,7 @@ packages: | ||
| 1183 | description: | 1183 | description: |
| 1184 | name: vm_service | 1184 | name: vm_service |
| 1185 | sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b | 1185 | sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b |
| 1186 | - url: "https://pub.flutter-io.cn" | 1186 | + url: "https://pub.dev" |
| 1187 | source: hosted | 1187 | source: hosted |
| 1188 | version: "14.3.0" | 1188 | version: "14.3.0" |
| 1189 | watcher: | 1189 | watcher: |
| @@ -1191,7 +1191,7 @@ packages: | @@ -1191,7 +1191,7 @@ packages: | ||
| 1191 | description: | 1191 | description: |
| 1192 | name: watcher | 1192 | name: watcher |
| 1193 | sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" | 1193 | sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" |
| 1194 | - url: "https://pub.flutter-io.cn" | 1194 | + url: "https://pub.dev" |
| 1195 | source: hosted | 1195 | source: hosted |
| 1196 | version: "1.2.1" | 1196 | version: "1.2.1" |
| 1197 | web: | 1197 | web: |
| @@ -1199,7 +1199,7 @@ packages: | @@ -1199,7 +1199,7 @@ packages: | ||
| 1199 | description: | 1199 | description: |
| 1200 | name: web | 1200 | name: web |
| 1201 | sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" | 1201 | sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" |
| 1202 | - url: "https://pub.flutter-io.cn" | 1202 | + url: "https://pub.dev" |
| 1203 | source: hosted | 1203 | source: hosted |
| 1204 | version: "1.1.1" | 1204 | version: "1.1.1" |
| 1205 | web_socket: | 1205 | web_socket: |
| @@ -1207,7 +1207,7 @@ packages: | @@ -1207,7 +1207,7 @@ packages: | ||
| 1207 | description: | 1207 | description: |
| 1208 | name: web_socket | 1208 | name: web_socket |
| 1209 | sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" | 1209 | sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" |
| 1210 | - url: "https://pub.flutter-io.cn" | 1210 | + url: "https://pub.dev" |
| 1211 | source: hosted | 1211 | source: hosted |
| 1212 | version: "1.0.1" | 1212 | version: "1.0.1" |
| 1213 | web_socket_channel: | 1213 | web_socket_channel: |
| @@ -1215,7 +1215,7 @@ packages: | @@ -1215,7 +1215,7 @@ packages: | ||
| 1215 | description: | 1215 | description: |
| 1216 | name: web_socket_channel | 1216 | name: web_socket_channel |
| 1217 | sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 | 1217 | sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 |
| 1218 | - url: "https://pub.flutter-io.cn" | 1218 | + url: "https://pub.dev" |
| 1219 | source: hosted | 1219 | source: hosted |
| 1220 | version: "3.0.3" | 1220 | version: "3.0.3" |
| 1221 | webview_flutter: | 1221 | webview_flutter: |
| @@ -1268,7 +1268,7 @@ packages: | @@ -1268,7 +1268,7 @@ packages: | ||
| 1268 | description: | 1268 | description: |
| 1269 | name: win32 | 1269 | name: win32 |
| 1270 | sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e | 1270 | sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e |
| 1271 | - url: "https://pub.flutter-io.cn" | 1271 | + url: "https://pub.dev" |
| 1272 | source: hosted | 1272 | source: hosted |
| 1273 | version: "5.10.1" | 1273 | version: "5.10.1" |
| 1274 | xdg_directories: | 1274 | xdg_directories: |
| @@ -1276,7 +1276,7 @@ packages: | @@ -1276,7 +1276,7 @@ packages: | ||
| 1276 | description: | 1276 | description: |
| 1277 | name: xdg_directories | 1277 | name: xdg_directories |
| 1278 | sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" | 1278 | sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" |
| 1279 | - url: "https://pub.flutter-io.cn" | 1279 | + url: "https://pub.dev" |
| 1280 | source: hosted | 1280 | source: hosted |
| 1281 | version: "1.1.0" | 1281 | version: "1.1.0" |
| 1282 | yaml: | 1282 | yaml: |
| @@ -1284,7 +1284,7 @@ packages: | @@ -1284,7 +1284,7 @@ packages: | ||
| 1284 | description: | 1284 | description: |
| 1285 | name: yaml | 1285 | name: yaml |
| 1286 | sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea | 1286 | sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea |
| 1287 | - url: "https://pub.flutter-io.cn" | 1287 | + url: "https://pub.dev" |
| 1288 | source: hosted | 1288 | source: hosted |
| 1289 | version: "3.1.4" | 1289 | version: "3.1.4" |
| 1290 | sdks: | 1290 | sdks: |
| @@ -399,7 +399,7 @@ void main() { | @@ -399,7 +399,7 @@ void main() { | ||
| 399 | expect(toasts, hasLength(1)); | 399 | expect(toasts, hasLength(1)); |
| 400 | expect( | 400 | expect( |
| 401 | toasts.single, | 401 | toasts.single, |
| 402 | - matches(RegExp(r'^【测试】本轮同步耗时0\.0 s、计算耗时\d+\.\d s$')), | 402 | + matches(RegExp(r'^【测试】获取数据耗时0\.0 s、计算耗时\d+\.\d s$')), |
| 403 | ); | 403 | ); |
| 404 | }); | 404 | }); |
| 405 | 405 |
-
Please register or login to post a comment