Commit 6dc9dd6c9b8ae7e79e01f62d50902ca0d2f2e282

Authored by 常守达
1 parent 29897890

feat(hw): 鸿蒙版睡眠健身

... ... @@ -52,9 +52,6 @@ PODS:
- libwebp/webp (1.5.0):
- libwebp/sharpyuv
- OBS (3.20.11.1)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- permission_handler_apple (9.4.8):
- Flutter
- PromisesObjC (2.4.1)
... ... @@ -106,7 +103,6 @@ DEPENDENCIES:
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- OBS (from `./Runner/Library`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
... ... @@ -145,8 +141,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/image_picker_ios/ios"
OBS:
:path: "./Runner/Library"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
share_plus:
... ... @@ -173,16 +167,15 @@ SPEC CHECKSUMS:
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
image_cropper: c4326ea50132b1e1564499e5d32a84f01fb03537
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
OBS: 4cf1e6db5515aefd6c3c6ae3e90e85ea5f028e83
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
permission_handler_apple: 92d754bbaa7361d436db2d6c3c1c2a0fdcec462e
PromisesObjC: 752c3227f599e3467650e47ea36f433eeb10c273
PromisesSwift: 217dea0fd5d2ad65222a109c48698add13cc1c5b
RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
TAThirdParty: 65db0235cd209237781535f19f9d0eef706156e5
thinking_analytics: 6f254c030da8dfc3409c08d91929b6ad89c415be
... ...
import 'package:doublefeel_flutter/app/utils/platform_compact.dart';
import 'package:doublefeel_flutter/app/widget/circular_gradient_progress/arc_progress_widget.dart';
import 'package:doublefeel_flutter/app/widget/circular_gradient_progress/combine.dart';
import 'package:doublefeel_flutter/core/theme/app_theme.dart';
import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
... ... @@ -44,6 +45,16 @@ class TodaySleepCard extends StatelessWidget {
double sleepScoreProgress =
sleepDuration == 0 ? -1 : (healthData?.sleepScore ?? 0.0) * 3.6;
double? sleepDurationRatio =
(activityTarget?.sleepTargetDuration ?? 28800) == 0 ||
sleepDuration == 0
? null
: ((healthData?.sleepDuration ?? 0) /
(activityTarget?.sleepTargetDuration ?? 28800));
double? sleepScoreRatio = sleepDuration == 0
? null
: ((healthData?.sleepScore ?? 0.0) / 100.0);
return _TodaySummaryCard(
iconAsset: 'assets/images/common/ic_sleep_stroke.png',
iconColor: context.colors.primary,
... ... @@ -144,9 +155,29 @@ class TodaySleepCard extends StatelessWidget {
rightWidget: Container(
width: 50,
height: 50,
margin: EdgeInsets.only(right: 6, left: 4),
margin: const EdgeInsets.only(right: 6, left: 4),
child: isOhos()
? SizedBox()
? ArcMultiProgressWidget(
size: 50,
strokeWidth: 6,
gap: 1.2,
startAngleDeg: 140,
sweepTotalDeg: 260,
items: [
ArcProgressItem(
ratio: sleepDurationRatio,
color: const Color(0xFF7B59EE),
backgroundColor: const Color(0xFFECE7FB),
noDataBackgroundColor: const Color(0xFFF0F1F5),
),
ArcProgressItem(
ratio: sleepScoreRatio,
color: const Color(0xFF638BFB),
backgroundColor: const Color(0xFFE8EFFD),
noDataBackgroundColor: const Color(0xFFF0F1F5),
),
],
)
: CircularGradientCombineWidget(
size: 50,
duration: const Duration(seconds: 1),
... ... @@ -276,6 +307,16 @@ class TodayActivityCard extends StatelessWidget {
double standProgress = (stand > 0 && (activityTarget?.stand ?? 0) > 0)
? (stand / (activityTarget?.stand ?? 0)) * 360
: -1;
double? moveRatio = (activity > 0 && (activityTarget?.move ?? 0) > 0)
? (activity / (activityTarget?.move ?? 0))
: null;
double? exerciseRatio =
(exercise > 0 && (activityTarget?.exercise ?? 0) > 0)
? (exercise / (activityTarget?.exercise ?? 0))
: null;
double? standRatio = (stand > 0 && (activityTarget?.stand ?? 0) > 0)
? (stand / (activityTarget?.stand ?? 0))
: null;
return _TodaySummaryCard(
iconAsset: 'assets/images/common/ic_exercise.png',
... ... @@ -322,20 +363,41 @@ class TodayActivityCard extends StatelessWidget {
rightWidget: Container(
width: 50,
height: 50,
margin: EdgeInsets.only(right: 6, left: 4),
child: Stack(
children: [
isOhos()
? SizedBox()
: Container(
margin: const EdgeInsets.only(right: 6, left: 4),
child: isOhos()
? ArcMultiProgressWidget(
size: 50,
strokeWidth: 6,
gap: 1.2,
startAngleDeg: 140,
sweepTotalDeg: 260,
items: [
ArcProgressItem(
ratio: moveRatio,
color: const Color(0xFFF84C38),
backgroundColor: const Color(0xFFFEE6E4),
),
ArcProgressItem(
ratio: exerciseRatio,
color: const Color(0xFFF6A523),
backgroundColor: const Color(0xFFFDF2E2),
),
ArcProgressItem(
ratio: standRatio,
color: const Color(0xFF3A9BFB),
backgroundColor: const Color(0xFFE3F1FD),
),
],
)
: Stack(
children: [
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: context.colors.textPrimary,
),
),
isOhos()
? SizedBox()
: CircularGradientCombineWidget(
CircularGradientCombineWidget(
size: 50,
duration: const Duration(seconds: 1),
centerCircleSizeRatio: 0.2,
... ... @@ -362,8 +424,8 @@ class TodayActivityCard extends StatelessWidget {
],
],
),
],
),
],
),
),
);
}),
... ...
... ... @@ -94,7 +94,9 @@ class LoginView extends GetView<LoginController> {
),
)),
Positioned(
bottom: bottom(region == AppRegion.china ? 253 : 273),
bottom: bottom(isOhos()
? 233
: (region == AppRegion.china ? 253 : 273)),
left: 0,
right: 0,
child: Column(
... ... @@ -139,7 +141,7 @@ class LoginView extends GetView<LoginController> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (region == AppRegion.china) ...[
if (region == AppRegion.china || isOhos()) ...[
_LoginMethodButton(
width: buttonWidth,
label: l10n.loginWithPhone,
... ... @@ -151,7 +153,7 @@ class LoginView extends GetView<LoginController> {
),
const SizedBox(height: 12),
],
if (region == AppRegion.global) ...[
if (region == AppRegion.global && !isOhos()) ...[
_LoginMethodButton(
width: buttonWidth,
label: l10n.continueWithEmail,
... ... @@ -161,9 +163,7 @@ class LoginView extends GetView<LoginController> {
'email',
lastUsedLabel: l10n.loginLastUsed,
),
const SizedBox(height: 12)
],
if (region == AppRegion.global) ...[
const SizedBox(height: 12),
_LoginMethodButton(
width: buttonWidth,
label: l10n.continueWithGoogle,
... ...
import 'dart:math';
import 'package:flutter/material.dart';
/// 弧形进度单环配置
class ArcProgressItem {
/// 进度比例 (0.0 ~ 1.0,支持超过 1.0,<= 0 或 null 表示无数据/未开始)
final double? ratio;
/// 高亮进度颜色
final Color color;
/// 底轨背景色
final Color backgroundColor;
/// 无数据时的底轨背景色 (若为空则使用 [backgroundColor])
final Color? noDataBackgroundColor;
const ArcProgressItem({
required this.ratio,
required this.color,
required this.backgroundColor,
this.noDataBackgroundColor,
});
}
/// 华为版开口朝下的彩虹弧形多环进度 Widget(支持平滑动画,无中心文字)
class ArcMultiProgressWidget extends StatefulWidget {
/// 尺寸宽高 (正方形)
final double size;
/// 环形线宽 (如果为 null,将根据环数自适应计算)
final double? strokeWidth;
/// 环与环之间的间距 (如果为 null,将根据环数自适应计算)
final double? gap;
/// 起始角度 (以度为单位,150° 表示从左下方开始)
final double startAngleDeg;
/// 总扫过角度 (以度为单位,240° 表示从左下顺时针扫至右下,底部开口 120°)
final double sweepTotalDeg;
/// 环项列表 (从最外环到最内环排序)
final List<ArcProgressItem> items;
/// 是否开启动画
final bool animate;
/// 动画时长
final Duration duration;
/// 动画曲线
final Curve curve;
const ArcMultiProgressWidget({
super.key,
required this.items,
this.size = 50,
this.strokeWidth,
this.gap,
this.startAngleDeg = 150,
this.sweepTotalDeg = 240,
this.animate = true,
this.duration = const Duration(milliseconds: 1000),
this.curve = Curves.easeOutCubic,
});
@override
State<ArcMultiProgressWidget> createState() => _ArcMultiProgressWidgetState();
}
class _ArcMultiProgressWidgetState extends State<ArcMultiProgressWidget>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _animation;
late List<double> _currentProgressAngles;
List<double> get _targetProgressAngles {
final totalRad = widget.sweepTotalDeg * pi / 180.0;
return widget.items.map((item) {
if (item.ratio == null || item.ratio! <= 0) {
return 0.0;
}
final clampedRatio = min(item.ratio!, 1.0);
return clampedRatio * totalRad;
}).toList();
}
@override
void initState() {
super.initState();
_currentProgressAngles = List.filled(widget.items.length, 0.0);
_controller = AnimationController(
vsync: this,
duration: widget.duration,
);
final targets = _targetProgressAngles;
_updateAnimation(_currentProgressAngles, targets);
}
@override
void didUpdateWidget(ArcMultiProgressWidget oldWidget) {
super.didUpdateWidget(oldWidget);
final oldTargets = oldWidget.items.map((e) => e.ratio ?? 0.0).toList();
final newTargets = widget.items.map((e) => e.ratio ?? 0.0).toList();
if (oldTargets.toString() != newTargets.toString()) {
_updateAnimation(_currentProgressAngles, _targetProgressAngles);
}
}
void _updateAnimation(List<double> fromAngles, List<double> toAngles) {
if (!widget.animate) {
setState(() {
_currentProgressAngles = List.from(toAngles);
});
return;
}
final startList = List<double>.from(fromAngles);
// 确保长度一致
while (startList.length < toAngles.length) {
startList.add(0.0);
}
_controller.duration = widget.duration;
_animation = CurvedAnimation(parent: _controller, curve: widget.curve);
_controller.addListener(() {
final t = _animation.value;
setState(() {
_currentProgressAngles = List.generate(toAngles.length, (i) {
final start = i < startList.length ? startList[i] : 0.0;
final end = toAngles[i];
return start + (end - start) * t;
});
});
});
_controller.forward(from: 0);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final count = widget.items.length;
// 自动计算粗细和间距
final strokeWidth = widget.strokeWidth ?? (count <= 2 ? 4.5 : 3.6);
final gap = widget.gap ?? (count <= 2 ? 2.5 : 1.8);
final startAngleRad = widget.startAngleDeg * pi / 180.0;
final totalSweepRad = widget.sweepTotalDeg * pi / 180.0;
return SizedBox(
width: widget.size,
height: widget.size,
child: CustomPaint(
painter: _ArcMultiProgressPainter(
animatedProgresses: _currentProgressAngles,
items: widget.items,
strokeWidth: strokeWidth,
gap: gap,
startAngleRad: startAngleRad,
totalSweepRad: totalSweepRad,
),
),
);
}
}
class _ArcMultiProgressPainter extends CustomPainter {
final List<double> animatedProgresses;
final List<ArcProgressItem> items;
final double strokeWidth;
final double gap;
final double startAngleRad;
final double totalSweepRad;
_ArcMultiProgressPainter({
required this.animatedProgresses,
required this.items,
required this.strokeWidth,
required this.gap,
required this.startAngleRad,
required this.totalSweepRad,
});
@override
void paint(Canvas canvas, Size size) {
final center = Offset(size.width / 2, size.height / 2);
final count = items.length;
for (int i = 0; i < count; i++) {
final item = items[i];
final radius = (size.width - strokeWidth) / 2 - i * (strokeWidth + gap);
if (radius <= 0) continue;
final rect = Rect.fromCircle(center: center, radius: radius);
// 1. 绘制底轨
final hasData = item.ratio != null && item.ratio! > 0;
final bgColor = (!hasData && item.noDataBackgroundColor != null)
? item.noDataBackgroundColor!
: item.backgroundColor;
final trackPaint = Paint()
..color = bgColor
..strokeWidth = strokeWidth
..style = PaintingStyle.stroke
..strokeCap = StrokeCap.round;
canvas.drawArc(rect, startAngleRad, totalSweepRad, false, trackPaint);
// 2. 绘制进度
final progressSweep =
i < animatedProgresses.length ? animatedProgresses[i] : 0.0;
if (progressSweep > 0.001) {
final progressPaint = Paint()
..color = item.color
..strokeWidth = strokeWidth
..style = PaintingStyle.stroke
..strokeCap = StrokeCap.round;
canvas.drawArc(rect, startAngleRad, progressSweep, false, progressPaint);
}
}
}
@override
bool shouldRepaint(covariant _ArcMultiProgressPainter oldDelegate) {
return true;
}
}
... ...
import 'package:flutter/material.dart';
import 'paint.dart';
/// 环形百分比进度 Widget(专为单环百分比展示设计,保持平滑动画)
class CircularPercentProgressWidget extends StatefulWidget {
/// 尺寸宽高
final double size;
/// 圆环宽度
final double strokeWidth;
/// 进度百分比 (0.0 ~ 1.0+,例如 0.85 表示 85%,null 或 < 0 表示无数据)
final double? percent;
/// 渐变色或纯色列表
final List<Color> gradientColors;
/// 底环背景颜色
final Color backgroundColor;
/// 是否开启动画
final bool animate;
/// 动画时长
final Duration duration;
/// 动画曲线
final Curve curve;
/// 是否在中心显示文字
final bool showText;
/// 自定义中心文字样式
final TextStyle? textStyle;
/// 无数据时显示的文字,默认为 '-'
final String noDataText;
const CircularPercentProgressWidget({
super.key,
required this.gradientColors,
this.percent,
this.size = 50,
this.strokeWidth = 4.5,
this.backgroundColor = const Color(0xFFF3F3F3),
this.animate = true,
this.duration = const Duration(milliseconds: 1000),
this.curve = Curves.easeOutCubic,
this.showText = true,
this.textStyle,
this.noDataText = '-',
});
@override
State<CircularPercentProgressWidget> createState() =>
_CircularPercentProgressWidgetState();
}
class _CircularPercentProgressWidgetState
extends State<CircularPercentProgressWidget>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _animation;
double _currentSweepAngle = 0;
double get _targetSweepAngle {
if (widget.percent == null || widget.percent! < 0) {
return -1;
}
return widget.percent! * 360;
}
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: widget.duration,
);
final targetAngle = _targetSweepAngle;
_updateAnimation(0, targetAngle);
}
@override
void didUpdateWidget(CircularPercentProgressWidget oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.percent != oldWidget.percent) {
_updateAnimation(_currentSweepAngle, _targetSweepAngle);
}
}
void _updateAnimation(double fromAngle, double toAngle) {
if (toAngle < 0) {
setState(() {
_currentSweepAngle = -1;
});
return;
}
final begin = fromAngle < 0 ? 0.0 : fromAngle;
if (!widget.animate) {
setState(() {
_currentSweepAngle = toAngle;
});
return;
}
_controller.duration = widget.duration;
_animation = Tween<double>(begin: begin, end: toAngle).animate(
CurvedAnimation(parent: _controller, curve: widget.curve),
)..addListener(() {
setState(() {
_currentSweepAngle = _animation.value;
});
});
_controller.forward(from: 0);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final colors = widget.gradientColors.length == 1
? [widget.gradientColors.first, widget.gradientColors.first]
: widget.gradientColors;
final hasData = widget.percent != null && widget.percent! >= 0;
String displayText;
if (!hasData) {
displayText = widget.noDataText;
} else {
final currentPercentInt = ((_currentSweepAngle / 360) * 100).round();
displayText = '$currentPercentInt%';
}
final defaultTextStyle = TextStyle(
fontSize: 10,
fontWeight: FontWeight.w600,
color: const Color(0xFF0F0F11),
letterSpacing: -0.5,
);
return SizedBox(
width: widget.size,
height: widget.size,
child: Stack(
alignment: Alignment.center,
children: [
CustomPaint(
painter: ProgressPainter(
sweepAngle: _currentSweepAngle,
progressColor: [colors],
strokeWidth: widget.strokeWidth,
backgroundColor: widget.backgroundColor,
reverse: false,
),
size: Size(widget.size, widget.size),
),
if (widget.showText)
Container(
width: widget.size - widget.strokeWidth * 2 - 4,
height: widget.size - widget.strokeWidth * 2 - 4,
alignment: Alignment.center,
child: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
displayText,
textAlign: TextAlign.center,
maxLines: 1,
style: widget.textStyle ?? defaultTextStyle,
),
),
),
],
),
);
}
}
... ...
import 'package:doublefeel_flutter/app/utils/platform_compact.dart';
import 'package:doublefeel_flutter/core/network/dio_client.dart';
import 'package:doublefeel_flutter/core/platform/pigeon_api_facade.dart';
import 'package:flutter/foundation.dart';
... ... @@ -21,15 +22,19 @@ class AppEnvironmentConfig {
Future<AppEnvironmentConfig> init() async {
environment.value = await _storage.readEnvironment();
_isNativeDebug = await _platformHostApi.isDebugEnvoriment();
final stored = await _storage.readRegion();
if (stored == null) {
final detected = await _detectRegion();
await setRegion(detected);
if (isOhos()) {
region.value = AppRegion.china;
} else {
region.value = stored;
}
if (stored == AppRegion.global) {
await _storage.setTermsAgreed(true);
final stored = await _storage.readRegion();
if (stored == null) {
final detected = await _detectRegion();
await setRegion(detected);
} else {
region.value = stored;
}
if (stored == AppRegion.global) {
await _storage.setTermsAgreed(true);
}
}
return this;
}
... ...
... ... @@ -6,7 +6,7 @@ packages:
description:
name: _fe_analyzer_shared
sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "85.0.0"
analyzer:
... ... @@ -14,7 +14,7 @@ packages:
description:
name: analyzer
sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "7.7.1"
archive:
... ... @@ -22,7 +22,7 @@ packages:
description:
name: archive
sha256: ace891da0862b0e4cabbb064ee3fd87b2728b898949fdb366d83fe98342c9f19
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.2.0"
args:
... ... @@ -30,7 +30,7 @@ packages:
description:
name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.7.0"
async:
... ... @@ -38,7 +38,7 @@ packages:
description:
name: async
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.13.1"
boolean_selector:
... ... @@ -46,7 +46,7 @@ packages:
description:
name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
build:
... ... @@ -54,7 +54,7 @@ packages:
description:
name: build
sha256: "825fed4d63050252a0b6e74f2d75844c4a85b664814be6993bd3493fb5239779"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.1"
build_config:
... ... @@ -62,7 +62,7 @@ packages:
description:
name: build_config
sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
build_daemon:
... ... @@ -70,7 +70,7 @@ packages:
description:
name: build_daemon
sha256: fd754058c342243718d5171a95f352cfc9fcf0cba8cfa26df67cb13a5836db78
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
build_runner:
... ... @@ -78,7 +78,7 @@ packages:
description:
name: build_runner
sha256: "4e54dbeefdc70691ba80b3bce3976af63b5425c8c07dface348dfee664a0edc1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.9.0"
built_collection:
... ... @@ -86,7 +86,7 @@ packages:
description:
name: built_collection
sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.1.1"
built_value:
... ... @@ -94,7 +94,7 @@ packages:
description:
name: built_value
sha256: "31b24be6615ec7fcf70b3aa5a7469fe35826485e639a16dd7eb83ba30e4cc6a8"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "8.12.7"
cached_network_image:
... ... @@ -102,7 +102,7 @@ packages:
description:
name: cached_network_image
sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.4.1"
cached_network_image_platform_interface:
... ... @@ -110,7 +110,7 @@ packages:
description:
name: cached_network_image_platform_interface
sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.1.1"
cached_network_image_web:
... ... @@ -118,7 +118,7 @@ packages:
description:
name: cached_network_image_web
sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
characters:
... ... @@ -126,7 +126,7 @@ packages:
description:
name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
checked_yaml:
... ... @@ -134,7 +134,7 @@ packages:
description:
name: checked_yaml
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
clock:
... ... @@ -142,7 +142,7 @@ packages:
description:
name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
code_assets:
... ... @@ -150,7 +150,7 @@ packages:
description:
name: code_assets
sha256: cfd4f5f575a49c5f10ca856e9846073f1e6c3ee94912377eea5f6cefc5272941
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
code_builder:
... ... @@ -158,7 +158,7 @@ packages:
description:
name: code_builder
sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.11.1"
collection:
... ... @@ -166,7 +166,7 @@ packages:
description:
name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.19.1"
convert:
... ... @@ -174,7 +174,7 @@ packages:
description:
name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
cross_file:
... ... @@ -182,7 +182,7 @@ packages:
description:
name: cross_file
sha256: "92c9c43c383bfa1c32079d3bc492d55d6d4318044b7b47edaff8971cbb555c51"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.3.5+4"
crypto:
... ... @@ -190,7 +190,7 @@ packages:
description:
name: crypto
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.7"
cupertino_icons:
... ... @@ -198,7 +198,7 @@ packages:
description:
name: cupertino_icons
sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.9"
dart_style:
... ... @@ -206,7 +206,7 @@ packages:
description:
name: dart_style
sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.1"
dio:
... ... @@ -214,7 +214,7 @@ packages:
description:
name: dio
sha256: "0df44ebba85e503958eb75d07eedd3c86275a58c1d3eda2f2ce8f0a2c3abbb3c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.11.0"
dio_web_adapter:
... ... @@ -222,7 +222,7 @@ packages:
description:
name: dio_web_adapter
sha256: "0786d0b7295a373de356fc0af4f6f1d0ab2844ed31b19dfc5e7556b70e24212c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
equatable:
... ... @@ -230,7 +230,7 @@ packages:
description:
name: equatable
sha256: "3bce007a596ff8b3119c45d68aaef631272537c03d30e5d4534dd24bf4c5eaa2"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
fake_async:
... ... @@ -238,7 +238,7 @@ packages:
description:
name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
ffi:
... ... @@ -246,7 +246,7 @@ packages:
description:
name: ffi
sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
file:
... ... @@ -254,7 +254,7 @@ packages:
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "7.0.1"
file_selector_linux:
... ... @@ -262,7 +262,7 @@ packages:
description:
name: file_selector_linux
sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.4"
file_selector_macos:
... ... @@ -270,7 +270,7 @@ packages:
description:
name: file_selector_macos
sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.5"
file_selector_platform_interface:
... ... @@ -278,7 +278,7 @@ packages:
description:
name: file_selector_platform_interface
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.7.0"
file_selector_windows:
... ... @@ -286,7 +286,7 @@ packages:
description:
name: file_selector_windows
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.3+5"
fixnum:
... ... @@ -294,7 +294,7 @@ packages:
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
fl_chart:
... ... @@ -302,7 +302,7 @@ packages:
description:
name: fl_chart
sha256: "5276944c6ffc975ae796569a826c38a62d2abcf264e26b88fa6f482e107f4237"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.70.2"
flutter:
... ... @@ -315,7 +315,7 @@ packages:
description:
name: flutter_cache_manager
sha256: "1de7849213b4c73c85aca7e0ac687a9a5d82ccdb594366b9dcc26cb6a2189cd2"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.4.2"
flutter_lints:
... ... @@ -323,7 +323,7 @@ packages:
description:
name: flutter_lints
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
flutter_localizations:
... ... @@ -336,7 +336,7 @@ packages:
description:
name: flutter_plugin_android_lifecycle
sha256: "3854fe5e3bff0b113c658f260b90c95dea17c92db0f2addeac2e343dd9969785"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.35"
flutter_test:
... ... @@ -349,7 +349,7 @@ packages:
description:
name: flutter_timezone
sha256: "869677426fde92dbe170fb7d2d4929f2a8343c2f5f62f08b0bb64f908630b073"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.1.0"
flutter_web_plugins:
... ... @@ -362,7 +362,7 @@ packages:
description:
name: fluttertoast
sha256: "90778fe0497fe3a09166e8cf2e0867310ff434b794526589e77ec03cf08ba8e8"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "8.2.14"
get:
... ... @@ -370,7 +370,7 @@ packages:
description:
name: get
sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.7.3"
glob:
... ... @@ -378,7 +378,7 @@ packages:
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
graphs:
... ... @@ -386,7 +386,7 @@ packages:
description:
name: graphs
sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
hooks:
... ... @@ -394,7 +394,7 @@ packages:
description:
name: hooks
sha256: eaac480a35ec0814146c2c48d96aaa829e0e44a7662c88ae84c9edf4bc35651f
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
http:
... ... @@ -402,7 +402,7 @@ packages:
description:
name: http
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.6.0"
http_multi_server:
... ... @@ -410,7 +410,7 @@ packages:
description:
name: http_multi_server
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.2.2"
http_parser:
... ... @@ -418,7 +418,7 @@ packages:
description:
name: http_parser
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
image_cropper:
... ... @@ -426,7 +426,7 @@ packages:
description:
name: image_cropper
sha256: "4e9c96c029eb5a23798da1b6af39787f964da6ffc78fd8447c140542a9f7c6fc"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "9.1.0"
image_cropper_for_web:
... ... @@ -434,7 +434,7 @@ packages:
description:
name: image_cropper_for_web
sha256: fd81ebe36f636576094377aab32673c4e5d1609b32dec16fad98d2b71f1250a9
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
image_cropper_platform_interface:
... ... @@ -442,7 +442,7 @@ packages:
description:
name: image_cropper_platform_interface
sha256: "6ca6b81769abff9a4dcc3bbd3d75f5dfa9de6b870ae9613c8cd237333a4283af"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "7.1.0"
image_picker:
... ... @@ -450,7 +450,7 @@ packages:
description:
name: image_picker
sha256: d8402284df184bc05f4a2210c6c23983b0720f4cd87cbd05c5390a78af602667
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.3"
image_picker_android:
... ... @@ -458,7 +458,7 @@ packages:
description:
name: image_picker_android
sha256: d5b3e1774af29c9ab00103afb0d4614070f924d2e0057ac867ec98800114793f
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.8.13+17"
image_picker_for_web:
... ... @@ -466,7 +466,7 @@ packages:
description:
name: image_picker_for_web
sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.1"
image_picker_ios:
... ... @@ -474,7 +474,7 @@ packages:
description:
name: image_picker_ios
sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.8.13+6"
image_picker_linux:
... ... @@ -482,7 +482,7 @@ packages:
description:
name: image_picker_linux
sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
image_picker_macos:
... ... @@ -490,7 +490,7 @@ packages:
description:
name: image_picker_macos
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2+1"
image_picker_ohos:
... ... @@ -507,7 +507,7 @@ packages:
description:
name: image_picker_platform_interface
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.11.1"
image_picker_windows:
... ... @@ -515,7 +515,7 @@ packages:
description:
name: image_picker_windows
sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
intl:
... ... @@ -523,7 +523,7 @@ packages:
description:
name: intl
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.20.2"
io:
... ... @@ -531,7 +531,7 @@ packages:
description:
name: io
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.5"
jni:
... ... @@ -539,7 +539,7 @@ packages:
description:
name: jni
sha256: f038e58b4dc2c9037f50e233175086337e0b305e356d28211bf55f21c504cbd3
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.3"
jni_flutter:
... ... @@ -547,7 +547,7 @@ packages:
description:
name: jni_flutter
sha256: "7b717011ea40d04fd47c2731d3d1d36eb99eba3435c2753d62489e8c3c9991d5"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
jni_util:
... ... @@ -555,7 +555,7 @@ packages:
description:
name: jni_util
sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
json_annotation:
... ... @@ -563,7 +563,7 @@ packages:
description:
name: json_annotation
sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.12.0"
leak_tracker:
... ... @@ -571,7 +571,7 @@ packages:
description:
name: leak_tracker
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "11.0.2"
leak_tracker_flutter_testing:
... ... @@ -579,7 +579,7 @@ packages:
description:
name: leak_tracker_flutter_testing
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.10"
leak_tracker_testing:
... ... @@ -587,7 +587,7 @@ packages:
description:
name: leak_tracker_testing
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
lints:
... ... @@ -595,7 +595,7 @@ packages:
description:
name: lints
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.1.1"
logger:
... ... @@ -603,7 +603,7 @@ packages:
description:
name: logger
sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.7.0"
logging:
... ... @@ -611,7 +611,7 @@ packages:
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
lottie:
... ... @@ -619,7 +619,7 @@ packages:
description:
name: lottie
sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
matcher:
... ... @@ -627,7 +627,7 @@ packages:
description:
name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.12.17"
material_color_utilities:
... ... @@ -635,7 +635,7 @@ packages:
description:
name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.11.1"
meta:
... ... @@ -643,7 +643,7 @@ packages:
description:
name: meta
sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.19.0"
mime:
... ... @@ -651,7 +651,7 @@ packages:
description:
name: mime
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
objective_c:
... ... @@ -659,7 +659,7 @@ packages:
description:
name: objective_c
sha256: ad56fd53a78ff6b1472fa59ff2a4e8b8ccabafc586fc263a1dfad0b99b5553e3
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "9.6.0"
octo_image:
... ... @@ -667,7 +667,7 @@ packages:
description:
name: octo_image
sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_config:
... ... @@ -675,7 +675,7 @@ packages:
description:
name: package_config
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
path:
... ... @@ -683,7 +683,7 @@ packages:
description:
name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
path_provider:
... ... @@ -691,7 +691,7 @@ packages:
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_android:
... ... @@ -699,7 +699,7 @@ packages:
description:
name: path_provider_android
sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
path_provider_foundation:
... ... @@ -707,7 +707,7 @@ packages:
description:
name: path_provider_foundation
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.6.0"
path_provider_linux:
... ... @@ -715,7 +715,7 @@ packages:
description:
name: path_provider_linux
sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
path_provider_platform_interface:
... ... @@ -723,7 +723,7 @@ packages:
description:
name: path_provider_platform_interface
sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
path_provider_windows:
... ... @@ -731,7 +731,7 @@ packages:
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.0"
permission_handler:
... ... @@ -739,7 +739,7 @@ packages:
description:
name: permission_handler
sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "11.4.0"
permission_handler_android:
... ... @@ -747,7 +747,7 @@ packages:
description:
name: permission_handler_android
sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "12.1.0"
permission_handler_apple:
... ... @@ -755,7 +755,7 @@ packages:
description:
name: permission_handler_apple
sha256: f49cb15a064ea9d974fc7fbb302099353b7b170d07284e86e264561579e5bcf8
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "9.6.1"
permission_handler_html:
... ... @@ -763,7 +763,7 @@ packages:
description:
name: permission_handler_html
sha256: "6ea98b3f17f60d3b527f2647ed2ab4dc0f6bfe25b22cb1c363f5d8f62252f6ac"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.1.4+1"
permission_handler_ohos:
... ... @@ -780,7 +780,7 @@ packages:
description:
name: permission_handler_platform_interface
sha256: a5c8a97ecf5616112a5b16d4b8e9ec0e5ae90ef63ac69c0d7b8ae240be760b23
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.4.0"
permission_handler_windows:
... ... @@ -788,7 +788,7 @@ packages:
description:
name: permission_handler_windows
sha256: caeae01858a0a7d2df67a445ac98e1ad95e55a0e77c73044f4e9b1c8c2289cbd
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
pigeon:
... ... @@ -805,7 +805,7 @@ packages:
description:
name: platform
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.6"
plugin_platform_interface:
... ... @@ -813,7 +813,7 @@ packages:
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
pool:
... ... @@ -821,7 +821,7 @@ packages:
description:
name: pool
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.2"
posix:
... ... @@ -829,7 +829,7 @@ packages:
description:
name: posix
sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "6.5.2"
pretty_dio_logger:
... ... @@ -837,7 +837,7 @@ packages:
description:
name: pretty_dio_logger
sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
pub_semver:
... ... @@ -845,7 +845,7 @@ packages:
description:
name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
pubspec_parse:
... ... @@ -853,7 +853,7 @@ packages:
description:
name: pubspec_parse
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
record_use:
... ... @@ -861,7 +861,7 @@ packages:
description:
name: record_use
sha256: "1cb8564af8d43b464294411db9217f5ec04891c6f22ee2c32d73ae05e88a6bd2"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
rxdart:
... ... @@ -869,7 +869,7 @@ packages:
description:
name: rxdart
sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.28.0"
share_plus:
... ... @@ -904,7 +904,7 @@ packages:
description:
name: shared_preferences_android
sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.23"
shared_preferences_foundation:
... ... @@ -912,7 +912,7 @@ packages:
description:
name: shared_preferences_foundation
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.5.6"
shared_preferences_linux:
... ... @@ -920,7 +920,7 @@ packages:
description:
name: shared_preferences_linux
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shared_preferences_ohos:
... ... @@ -937,7 +937,7 @@ packages:
description:
name: shared_preferences_platform_interface
sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
shared_preferences_web:
... ... @@ -945,7 +945,7 @@ packages:
description:
name: shared_preferences_web
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.3"
shared_preferences_windows:
... ... @@ -953,7 +953,7 @@ packages:
description:
name: shared_preferences_windows
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shelf:
... ... @@ -961,7 +961,7 @@ packages:
description:
name: shelf
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.2"
shelf_web_socket:
... ... @@ -969,7 +969,7 @@ packages:
description:
name: shelf_web_socket
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
simple_gesture_detector:
... ... @@ -977,7 +977,7 @@ packages:
description:
name: simple_gesture_detector
sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
sky_engine:
... ... @@ -990,7 +990,7 @@ packages:
description:
name: source_span
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.10.2"
sqflite:
... ... @@ -1007,7 +1007,7 @@ packages:
description:
name: sqflite_android
sha256: "881e28efdcc9950fd8e9bb42713dcf1103e62a2e7168f23c9338d82db13dec40"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.2+3"
sqflite_common:
... ... @@ -1015,7 +1015,7 @@ packages:
description:
name: sqflite_common
sha256: "1581ffbf7a0e333b380d6a30737d78516b826cb35beb7fb0bf8a3ea0c678b465"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.5.8"
sqflite_darwin:
... ... @@ -1023,7 +1023,7 @@ packages:
description:
name: sqflite_darwin
sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
sqflite_ohos:
... ... @@ -1040,7 +1040,7 @@ packages:
description:
name: sqflite_platform_interface
sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
stack_trace:
... ... @@ -1048,7 +1048,7 @@ packages:
description:
name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.12.1"
stream_channel:
... ... @@ -1056,7 +1056,7 @@ packages:
description:
name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
stream_transform:
... ... @@ -1064,7 +1064,7 @@ packages:
description:
name: stream_transform
sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
string_scanner:
... ... @@ -1072,7 +1072,7 @@ packages:
description:
name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.1"
synchronized:
... ... @@ -1080,7 +1080,7 @@ packages:
description:
name: synchronized
sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.4.0"
table_calendar:
... ... @@ -1088,7 +1088,7 @@ packages:
description:
name: table_calendar
sha256: f276347cad425ef837a41e8d9ad43f3ee7d59227aa4c36d7430607a5a18fa3b3
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
term_glyph:
... ... @@ -1096,7 +1096,7 @@ packages:
description:
name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.2"
test_api:
... ... @@ -1104,7 +1104,7 @@ packages:
description:
name: test_api
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.7.7"
thinking_analytics:
... ... @@ -1112,7 +1112,7 @@ packages:
description:
name: thinking_analytics
sha256: b01cac0b5482e71c1d75c44c77d27f427662cc65a77b7bc3c8b49617d7a01e02
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.3.3"
typed_data:
... ... @@ -1120,7 +1120,7 @@ packages:
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
url_launcher_linux:
... ... @@ -1128,7 +1128,7 @@ packages:
description:
name: url_launcher_linux
sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.2.2"
url_launcher_platform_interface:
... ... @@ -1136,7 +1136,7 @@ packages:
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
url_launcher_web:
... ... @@ -1144,7 +1144,7 @@ packages:
description:
name: url_launcher_web
sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.3"
url_launcher_windows:
... ... @@ -1152,7 +1152,7 @@ packages:
description:
name: url_launcher_windows
sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.5"
uuid:
... ... @@ -1160,7 +1160,7 @@ packages:
description:
name: uuid
sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.6.0"
vector_math:
... ... @@ -1168,7 +1168,7 @@ packages:
description:
name: vector_math
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
video_thumbnail:
... ... @@ -1176,7 +1176,7 @@ packages:
description:
name: video_thumbnail
sha256: "181a0c205b353918954a881f53a3441476b9e301641688a581e0c13f00dc588b"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.5.6"
vm_service:
... ... @@ -1184,7 +1184,7 @@ packages:
description:
name: vm_service
sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "15.3.0"
watcher:
... ... @@ -1192,7 +1192,7 @@ packages:
description:
name: watcher
sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
web:
... ... @@ -1200,7 +1200,7 @@ packages:
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
web_socket:
... ... @@ -1208,7 +1208,7 @@ packages:
description:
name: web_socket
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
web_socket_channel:
... ... @@ -1216,7 +1216,7 @@ packages:
description:
name: web_socket_channel
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
webview_flutter:
... ... @@ -1269,7 +1269,7 @@ packages:
description:
name: win32
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.15.0"
xdg_directories:
... ... @@ -1277,7 +1277,7 @@ packages:
description:
name: xdg_directories
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
yaml:
... ... @@ -1285,7 +1285,7 @@ packages:
description:
name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
sdks:
... ...