Commit 4aa2c2eacc8167e714884e03d3152635ec2ec19f

Authored by 权海
1 parent 61a25926

feat(ui):恢复实现原ios的互动功能;适配3.27.5-ohos版本flutter

Showing 42 changed files with 855 additions and 180 deletions
... ... @@ -16,6 +16,7 @@ PODS:
- Flutter
- fluttertoast (0.0.2):
- Flutter
- Toast
- GoogleSignIn (9.2.0):
- AppAuth (~> 2.1)
- AppCheckCore (~> 11.0)
... ... @@ -90,6 +91,7 @@ PODS:
- ThinkingSDK/Main (3.4.8):
- ThinkingSDK/iOS
- ThinkingSDK/OSX
- Toast (4.1.1)
- TOCropViewController (2.7.4)
- video_thumbnail (0.0.1):
- Flutter
... ... @@ -132,6 +134,7 @@ SPEC REPOS:
- TAThirdParty
- ThinkingDataCore
- ThinkingSDK
- Toast
- TOCropViewController
- WechatOpenSDK
... ... @@ -168,9 +171,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
AppAuth: ef4da5a3fc2e10b90c09a0a94a9baeaedc0341d5
AppCheckCore: e215d35177a9cf469927863e69c13e220df32a8b
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
fluttertoast: 76fea30fcf04176325f6864c87306927bd7d2038
GoogleSignIn: e449a40a92e9f2eea56e98b5214d13725dc5a00a
GoogleUtilities: 766ace00c6b10d8148408f329d10c4f051931850
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
... ... @@ -179,7 +182,7 @@ SPEC CHECKSUMS:
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
OBS: 4cf1e6db5515aefd6c3c6ae3e90e85ea5f028e83
path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
permission_handler_apple: 92d754bbaa7361d436db2d6c3c1c2a0fdcec462e
PromisesObjC: 752c3227f599e3467650e47ea36f433eeb10c273
PromisesSwift: 217dea0fd5d2ad65222a109c48698add13cc1c5b
... ... @@ -191,6 +194,7 @@ SPEC CHECKSUMS:
thinking_analytics: 6f254c030da8dfc3409c08d91929b6ad89c415be
ThinkingDataCore: 2bda656a0e68ad95542ab029450784d38ab50949
ThinkingSDK: 48c27bf8af8c2035f8fb80522add51f0b3c65284
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654
video_thumbnail: b637e0ad5f588ca9945f6e2c927f73a69a661140
webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2
... ...
... ... @@ -75,6 +75,10 @@ class DeveloperOptionsController extends GetxController {
routeName: Routes.ROUTE_LIST,
),
DeveloperOptionsItem(
title: '互动页(测试)',
routeName: Routes.INTERACT,
),
DeveloperOptionsItem(
title: 'Token Login',
routeName: Routes.TOKEN_LOGIN,
),
... ...
import 'package:doublefeel_flutter/app/modules/interact/controllers/interact_controller.dart';
import 'package:doublefeel_flutter/core/network/api/interaction_api.dart';
import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart';
import 'package:get/get.dart';
class InteractBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<InteractController>(
() => InteractController(
Get.find<InteractionApi>(),
Get.find<UserPreferencesStorage>(),
),
);
}
}
... ...
import 'dart:async';
import 'package:doublefeel_flutter/app/routes/app_pages.dart';
import 'package:doublefeel_flutter/core/network/api/interaction_api.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart';
import 'package:doublefeel_flutter/data/models/interaction/interaction_models.dart';
import 'package:doublefeel_flutter/data/models/user/user_models.dart';
import 'package:get/get.dart';
enum InteractAction { stick, miss, punch }
extension InteractActionUi on InteractAction {
int get apiValue => switch (this) {
InteractAction.stick => 0,
InteractAction.miss => 1,
InteractAction.punch => 2,
};
String get title => switch (this) {
InteractAction.stick => '戳一戳',
InteractAction.miss => '想Ta',
InteractAction.punch => '打一拳',
};
bool get needsVip => this != InteractAction.stick;
String get iconAsset => switch (this) {
InteractAction.stick => 'assets/images/interact/icon_stick.png',
InteractAction.miss => 'assets/images/interact/icon_miss.png',
InteractAction.punch => 'assets/images/interact/icon_punch.png',
};
String get titleAsset => switch (this) {
InteractAction.stick => 'assets/images/interact/title_stick.png',
InteractAction.miss => 'assets/images/interact/title_miss.png',
InteractAction.punch => 'assets/images/interact/title_punch.png',
};
String get lockedTitleAsset => switch (this) {
InteractAction.stick => 'assets/images/interact/title_stick_locked.png',
InteractAction.miss => 'assets/images/interact/title_miss_locked.png',
InteractAction.punch => 'assets/images/interact/title_punch_locked.png',
};
}
class InteractController extends GetxController {
InteractController(this._interactionApi, this._userPreferencesStorage);
final InteractionApi _interactionApi;
final UserPreferencesStorage _userPreferencesStorage;
final records = <InteractionRecord>[].obs;
final isLoading = false.obs;
final sendingAction = Rxn<InteractAction>();
final activeAction = Rxn<InteractAction>();
UserInfoResponse? get me =>
_userPreferencesStorage.preferences.value.meUserInfo;
UserInfoResponse? get partner =>
_userPreferencesStorage.preferences.value.partnerUserInfo;
bool get isPaired => partner?.id != null;
bool get isVip =>
_userPreferencesStorage.preferences.value.vipInfo?.isVip ?? false;
@override
void onInit() {
super.onInit();
unawaited(loadRecords());
}
Future<void> loadRecords() async {
isLoading.value = true;
final result = await _interactionApi.getInteractionRecordList();
isLoading.value = false;
switch (result) {
case AppSuccess(:final data):
records.assignAll(data.records ?? const <InteractionRecord>[]);
case AppFailure():
// Keep the last successful list visible when a refresh fails.
}
}
Future<void> sendAction(
InteractAction action, {
InteractionDataAction? actionVariables,
}) async {
if (!isPaired) {
_showToast('请先绑定另一半');
Get.toNamed(AppRoutes.bindPartner);
return;
}
if (action.needsVip && !isVip) {
_showToast('${action.title}为会员互动,请先开通会员');
Get.toNamed(Routes.PURCHASE);
return;
}
if (sendingAction.value != null) return;
sendingAction.value = action;
activeAction.value = action;
final result = await _interactionApi.sendInteraction(
InteractionData(
interactionType: 0,
actionType: action.apiValue,
action: actionVariables,
),
);
sendingAction.value = null;
switch (result) {
case AppSuccess():
_showToast('${action.title}成功!');
unawaited(loadRecords());
case AppFailure(:final error):
_showToast('互动发送失败:$error');
}
Future<void>.delayed(const Duration(seconds: 4), () {
if (activeAction.value == action) activeAction.value = null;
});
}
String recordText(InteractionRecord record) {
final text = record.text?.trim();
if (text != null && text.isNotEmpty) return text;
final actor = record.userId == me?.id ? '我' : '对方';
final target = record.action?.objectTarget == 1 ? '自己' : 'Ta';
return switch (record.actionType) {
0 => '$actor 戳了戳$target~',
1 => '$actor$target 了一下~',
2 => '$actor 打了$target 一拳~',
_ => '$actor 发起了一次互动~',
};
}
String recordTime(InteractionRecord record) {
final timestamp = record.createTime;
if (timestamp == null || timestamp <= 0) return '';
final date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
return '${date.month.toString().padLeft(2, '0')}-'
'${date.day.toString().padLeft(2, '0')} '
'${date.hour.toString().padLeft(2, '0')}:'
'${date.minute.toString().padLeft(2, '0')}';
}
String? partnerActionAsset() {
final action = activeAction.value;
if (action == null || !isPaired) return null;
final character = switch (partner?.persona) {
2 => 'Dog',
3 => 'Rabbit',
4 => 'Elephant',
_ => 'Cat',
};
final actionName = switch (action) {
InteractAction.stick => 'Stick',
InteractAction.miss => 'Miss',
InteractAction.punch => 'Punch',
};
return 'assets/images/interact/animations/'
'character${character}Interaction${actionName}Animation.png';
}
String? actionMaskAsset() => switch (activeAction.value) {
InteractAction.stick =>
'assets/images/interact/animations/interactionStickMaskAnimation.png',
InteractAction.miss =>
'assets/images/interact/animations/interactionMissMaskAnimation.png',
InteractAction.punch =>
'assets/images/interact/animations/interactionPunchMaskAnimation.png',
null => null,
};
void _showToast(String message) {
Get.snackbar('互动', message, snackPosition: SnackPosition.BOTTOM);
}
}
... ...
import 'package:doublefeel_flutter/app/modules/interact/controllers/interact_controller.dart';
import 'package:doublefeel_flutter/data/models/interaction/interaction_models.dart';
import 'package:doublefeel_flutter/data/models/user/user_models.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class InteractView extends GetView<InteractController> {
const InteractView({super.key});
static const _purple = Color(0xff896cdc);
static const _muted = Color(0xff908b91);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
fit: StackFit.expand,
children: [
Image.asset('assets/images/interact/page_bg.png', fit: BoxFit.cover),
SafeArea(
child: Obx(
() => Column(
children: [
_appBar(),
Expanded(
child: RefreshIndicator(
onRefresh: controller.loadRecords,
child: ListView(
physics: const AlwaysScrollableScrollPhysics(),
padding: const EdgeInsets.only(bottom: 28),
children: [
_marquee(),
_characterArea(),
const SizedBox(height: 34),
_actionButtons(context),
const SizedBox(height: 28),
_records(),
],
),
),
),
],
),
),
),
Obx(() {
final asset = controller.actionMaskAsset();
if (asset == null) return const SizedBox.shrink();
return IgnorePointer(
child: Align(
alignment: const Alignment(0, -.5),
child:
Image.asset(asset, width: Get.width, fit: BoxFit.fitWidth),
),
);
}),
],
),
);
}
Widget _appBar() {
return SizedBox(
height: 48,
child: Row(
children: [
IconButton(
icon: const Icon(Icons.arrow_back_ios_new, color: Colors.black),
onPressed: Get.back,
),
const Spacer(),
IconButton(
tooltip: '刷新互动记录',
icon: const Icon(Icons.refresh, color: Colors.black87),
onPressed: controller.loadRecords,
),
],
),
);
}
Widget _marquee() {
final records = controller.records.take(3).toList(growable: false);
if (records.isEmpty) return const SizedBox(height: 72);
return SizedBox(
height: 72,
child: ListView.separated(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
scrollDirection: Axis.horizontal,
itemCount: records.length,
separatorBuilder: (_, __) => const SizedBox(width: 10),
itemBuilder: (_, index) {
final record = records[index];
final isMe = record.userId == controller.me?.id;
return Container(
constraints: const BoxConstraints(maxWidth: 210),
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 7),
decoration: BoxDecoration(
image: const DecorationImage(
image: AssetImage('assets/images/interact/page_bubble_bg.png'),
fit: BoxFit.fill,
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
_avatar(isMe ? controller.me : controller.partner, size: 28),
const SizedBox(width: 7),
Flexible(
child: Text(
controller.recordText(record),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: const TextStyle(color: Colors.white, fontSize: 13),
),
),
],
),
);
},
),
);
}
Widget _characterArea() {
final actionAsset = controller.partnerActionAsset();
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24),
child: Row(
children: [
Expanded(child: _person(me: true)),
const SizedBox(width: 12),
Expanded(
child: controller.isPaired
? _person(me: false, actionAsset: actionAsset)
: _unpairedPerson(),
),
],
),
);
}
Widget _person({required bool me, String? actionAsset}) {
final user = me ? controller.me : controller.partner;
return Column(
children: [
SizedBox(
height: 132,
child: actionAsset == null
? _avatar(user,
size: 108,
borderColor: me ? _purple : const Color(0xfffff45b))
: Image.asset(actionAsset, fit: BoxFit.contain),
),
const SizedBox(height: 6),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (me)
Container(
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 2),
decoration:
const BoxDecoration(color: _purple, shape: BoxShape.circle),
child: const Text('我',
style: TextStyle(color: Colors.white, fontSize: 11)),
),
if (me) const SizedBox(width: 5),
Flexible(
child: Text(
user?.nickname ?? '-',
overflow: TextOverflow.ellipsis,
style:
const TextStyle(fontWeight: FontWeight.w600, fontSize: 16),
),
),
],
),
],
);
}
Widget _unpairedPerson() {
return Column(
children: [
Image.asset('assets/images/interact/unpaired_avatar.png', width: 58),
const SizedBox(height: 8),
const Text('暂未绑定Feel搭子',
style: TextStyle(color: Color(0xffff2c20), fontSize: 12)),
const SizedBox(height: 10),
TextButton.icon(
onPressed: () => Get.snackbar('互动', '请先前往搭子页面完成绑定'),
icon: const Text('去绑定'),
label: const Icon(Icons.chevron_right, size: 18),
style: TextButton.styleFrom(
foregroundColor: Colors.white,
backgroundColor: _purple,
shape: const StadiumBorder(),
),
),
],
);
}
Widget _actionButtons(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
_actionButton(context, InteractAction.miss, width: 88, height: 52),
const SizedBox(width: 12),
_actionButton(context, InteractAction.stick, width: 112, height: 72),
const SizedBox(width: 12),
_actionButton(context, InteractAction.punch, width: 88, height: 52),
],
);
}
Widget _actionButton(
BuildContext context,
InteractAction action, {
required double width,
required double height,
}) {
final enabled =
controller.isPaired && (!action.needsVip || controller.isVip);
final sending = controller.sendingAction.value == action;
return GestureDetector(
onLongPress: () => _showActionSheet(context),
child: SizedBox(
width: width,
height: height + 18,
child: ElevatedButton(
onPressed: sending ? null : () => controller.sendAction(action),
style: ElevatedButton.styleFrom(
padding: EdgeInsets.zero,
backgroundColor: _purple.withValues(alpha: enabled ? 1 : .4),
disabledBackgroundColor: _purple.withValues(alpha: .4),
elevation: 5,
shadowColor: _purple.withValues(alpha: .5),
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(28)),
),
child: sending
? const SizedBox(
width: 22,
height: 22,
child: CircularProgressIndicator(
color: Colors.white, strokeWidth: 2))
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
enabled
? action.iconAsset
: 'assets/images/interact/icon_locked.png',
width: action == InteractAction.stick ? 48 : 40,
height: action == InteractAction.stick ? 48 : 40,
),
Image.asset(
enabled ? action.titleAsset : action.lockedTitleAsset,
height: 20,
fit: BoxFit.contain,
),
],
),
),
),
);
}
Widget _records() {
final records = controller.records.take(10).toList(growable: false);
return Container(
margin: const EdgeInsets.only(top: 2),
padding: const EdgeInsets.fromLTRB(24, 20, 24, 42),
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xffeae1ff), Color(0x00fcf4ff)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
),
child: Column(
children: [
Row(
children: [
const Text('互动记录',
style: TextStyle(
fontSize: 17,
fontWeight: FontWeight.w700,
color: Color(0xff2c2020))),
const Spacer(),
Text('仅保留10条', style: TextStyle(fontSize: 12, color: _muted)),
],
),
const SizedBox(height: 15),
if (controller.isLoading.value && records.isEmpty)
const Padding(
padding: EdgeInsets.all(40), child: CircularProgressIndicator())
else if (records.isEmpty)
const Padding(
padding: EdgeInsets.symmetric(vertical: 76),
child: Text('暂时还没有记录哦~',
style: TextStyle(color: _muted, fontSize: 14)),
)
else
...records.map(_recordItem),
],
),
);
}
Widget _recordItem(InteractionRecord record) {
return Container(
width: double.infinity,
margin: const EdgeInsets.only(bottom: 7),
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 9),
decoration: BoxDecoration(
color: Colors.white.withValues(alpha: .48),
borderRadius: BorderRadius.circular(7)),
child: Row(
children: [
const Icon(Icons.circle_outlined, size: 10, color: _purple),
const SizedBox(width: 8),
Expanded(
child: Text(controller.recordText(record),
style: const TextStyle(fontSize: 14))),
Text(controller.recordTime(record),
style: const TextStyle(fontSize: 12, color: _muted)),
],
),
);
}
Widget _avatar(UserInfoResponse? user,
{required double size, Color? borderColor}) {
final avatar = user?.avatar;
return Container(
width: size,
height: size,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: borderColor ?? _purple, width: 2),
color: Colors.white),
child: avatar == null || avatar.isEmpty
? Icon(Icons.person, size: size * .55, color: _muted)
: Image.network(avatar,
fit: BoxFit.cover,
errorBuilder: (_, __, ___) =>
Icon(Icons.person, size: size * .55, color: _muted)),
);
}
void _showActionSheet(BuildContext context) {
Get.bottomSheet(
InteractActionBottomSheet(controller: controller),
isScrollControlled: true,
backgroundColor: Colors.transparent,
);
}
}
class InteractActionBottomSheet extends StatelessWidget {
const InteractActionBottomSheet({required this.controller, super.key});
final InteractController controller;
@override
Widget build(BuildContext context) {
return SafeArea(
top: false,
child: Container(
height: 331,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/interact/bottom_sheet_bg.png'),
fit: BoxFit.fill),
),
child: Stack(
children: [
Align(
alignment: const Alignment(.2, -.98),
child: Image.asset(
'assets/images/interact/bottom_sheet_label.png',
width: 126),
),
Column(
children: [
const SizedBox(height: 18),
_sheetAvatar(),
const SizedBox(height: 13),
const Text('给搭子送去一份互动',
style: TextStyle(color: Color(0xff908b91), fontSize: 14)),
const SizedBox(height: 3),
const Text('想念要说出来',
style: TextStyle(
color: Color(0xff896cdc),
fontSize: 24,
fontWeight: FontWeight.w700)),
const SizedBox(height: 24),
Obx(
() => Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: InteractAction.values
.map((action) => Padding(
padding:
const EdgeInsets.symmetric(horizontal: 6),
child: _sheetButton(action),
))
.toList(growable: false),
),
),
],
),
],
),
),
);
}
Widget _sheetAvatar() {
final avatar = controller.partner?.avatar;
return Container(
width: 56,
height: 56,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: const Color(0xff896cdc), width: 2)),
child: avatar == null || avatar.isEmpty
? const Icon(Icons.person, color: Color(0xff908b91))
: Image.network(avatar, fit: BoxFit.cover),
);
}
Widget _sheetButton(InteractAction action) {
final enabled =
controller.isPaired && (!action.needsVip || controller.isVip);
final sending = controller.sendingAction.value == action;
return SizedBox(
width: action == InteractAction.stick ? 112 : 88,
height: action == InteractAction.stick ? 74 : 56,
child: ElevatedButton(
onPressed: sending
? null
: () async {
await controller.sendAction(
action,
actionVariables: const InteractionDataAction(objectTarget: 2),
);
if (controller.sendingAction.value == null) Get.back();
},
style: ElevatedButton.styleFrom(
padding: EdgeInsets.zero,
backgroundColor:
const Color(0xff896cdc).withValues(alpha: enabled ? 1 : .4),
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(28)),
),
child: sending
? const CircularProgressIndicator(
color: Colors.white, strokeWidth: 2)
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
enabled
? action.iconAsset
: 'assets/images/interact/icon_locked.png',
height: 38),
Image.asset(
enabled ? action.titleAsset : action.lockedTitleAsset,
height: 18),
],
),
),
);
}
}
... ...
... ... @@ -31,6 +31,8 @@ import '../modules/help/views/help_view.dart';
import '../modules/home/bindings/home_binding.dart';
import '../modules/home/views/home_page.dart';
import '../modules/home/widgets/my/security_email_views.dart';
import '../modules/interact/bindings/interact_binding.dart';
import '../modules/interact/views/interact_view.dart';
import '../modules/login/bindings/login_binding.dart';
import '../modules/login/views/debug_environment_view.dart';
import '../modules/login/views/login_view.dart';
... ... @@ -169,6 +171,11 @@ abstract final class AppPages {
binding: RouteListBinding(),
),
GetPage(
name: Routes.INTERACT,
page: () => const InteractView(),
binding: InteractBinding(),
),
GetPage(
name: Routes.PURCHASE,
page: () => const PurchaseView(),
binding: PurchaseBinding(),
... ...
... ... @@ -30,6 +30,7 @@ abstract class Routes {
static const CHANGE_SECURITY_EMAIL = _Paths.CHANGE_SECURITY_EMAIL;
static const RESET_PASSWORD = _Paths.RESET_PASSWORD;
static const HW_HEALTH_AUTH_WEB_VIEW = _Paths.HW_HEALTH_AUTH_WEB_VIEW;
static const INTERACT = _Paths.INTERACT;
}
abstract class _Paths {
... ... @@ -61,4 +62,5 @@ abstract class _Paths {
static const CHANGE_SECURITY_EMAIL = '/change-security-email';
static const RESET_PASSWORD = '/reset-password';
static const HW_HEALTH_AUTH_WEB_VIEW = '/hw-health-auth-webview';
static const INTERACT = '/interact';
}
... ...
... ... @@ -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: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
boolean_selector:
... ... @@ -46,7 +46,7 @@ packages:
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
build:
... ... @@ -54,7 +54,7 @@ packages:
description:
name: build
sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
build_config:
... ... @@ -62,7 +62,7 @@ packages:
description:
name: build_config
sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
build_daemon:
... ... @@ -70,7 +70,7 @@ packages:
description:
name: build_daemon
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.4"
build_resolvers:
... ... @@ -78,7 +78,7 @@ packages:
description:
name: build_resolvers
sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.4"
build_runner:
... ... @@ -86,7 +86,7 @@ packages:
description:
name: build_runner
sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.15"
build_runner_core:
... ... @@ -94,7 +94,7 @@ packages:
description:
name: build_runner_core
sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "8.0.0"
built_collection:
... ... @@ -102,7 +102,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:
... ... @@ -110,7 +110,7 @@ packages:
description:
name: built_value
sha256: f87ea98192116f7093cb214551ce1929caae0681fdba282b3d8b4462adee7bb7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "8.13.0"
cached_network_image:
... ... @@ -118,7 +118,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:
... ... @@ -126,7 +126,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:
... ... @@ -134,7 +134,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:
... ... @@ -142,7 +142,7 @@ packages:
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
checked_yaml:
... ... @@ -150,7 +150,7 @@ packages:
description:
name: checked_yaml
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.3"
clock:
... ... @@ -158,7 +158,7 @@ packages:
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
code_builder:
... ... @@ -166,7 +166,7 @@ packages:
description:
name: code_builder
sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.10.1"
collection:
... ... @@ -174,7 +174,7 @@ packages:
description:
name: collection
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.19.0"
convert:
... ... @@ -182,7 +182,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:
... ... @@ -190,7 +190,7 @@ packages:
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
crypto:
... ... @@ -198,7 +198,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:
... ... @@ -206,7 +206,7 @@ packages:
description:
name: cupertino_icons
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dart_style:
... ... @@ -214,7 +214,7 @@ packages:
description:
name: dart_style
sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
dio:
... ... @@ -222,7 +222,7 @@ packages:
description:
name: dio
sha256: "852ec3b48cc431ac04fff978413c541502b67ffc3e26921e74e3d994694192c1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.11.1"
dio_web_adapter:
... ... @@ -230,7 +230,7 @@ packages:
description:
name: dio_web_adapter
sha256: "3a1b2cd7be71086f38504956e3ebcd2837288d231ff454bafa78021244102bfc"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
equatable:
... ... @@ -238,7 +238,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:
... ... @@ -246,7 +246,7 @@ packages:
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
ffi:
... ... @@ -254,7 +254,7 @@ packages:
description:
name: ffi
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
file:
... ... @@ -262,7 +262,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:
... ... @@ -270,7 +270,7 @@ packages:
description:
name: file_selector_linux
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.3+2"
file_selector_macos:
... ... @@ -278,7 +278,7 @@ packages:
description:
name: file_selector_macos
sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.4+3"
file_selector_platform_interface:
... ... @@ -286,7 +286,7 @@ packages:
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.6.2"
file_selector_windows:
... ... @@ -294,7 +294,7 @@ packages:
description:
name: file_selector_windows
sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.3+4"
fixnum:
... ... @@ -302,7 +302,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:
... ... @@ -310,7 +310,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:
... ... @@ -323,7 +323,7 @@ packages:
description:
name: flutter_cache_manager
sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.4.1"
flutter_lints:
... ... @@ -331,7 +331,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:
... ... @@ -344,7 +344,7 @@ packages:
description:
name: flutter_plugin_android_lifecycle
sha256: "6382ce712ff69b0f719640ce957559dde459e55ecd433c767e06d139ddf16cab"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.29"
flutter_test:
... ... @@ -357,7 +357,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:
... ... @@ -379,7 +379,7 @@ packages:
description:
name: frontend_server_client
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
get:
... ... @@ -387,7 +387,7 @@ packages:
description:
name: get
sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.7.3"
glob:
... ... @@ -395,7 +395,7 @@ packages:
description:
name: glob
sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
graphs:
... ... @@ -403,7 +403,7 @@ packages:
description:
name: graphs
sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
http:
... ... @@ -411,7 +411,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:
... ... @@ -419,7 +419,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:
... ... @@ -427,7 +427,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:
... ... @@ -471,7 +471,7 @@ packages:
description:
name: image_picker_android
sha256: e83b2b05141469c5e19d77e1dfa11096b6b1567d09065b2265d7c6904560050c
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.8.13"
image_picker_for_web:
... ... @@ -479,7 +479,7 @@ packages:
description:
name: image_picker_for_web
sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
image_picker_ios:
... ... @@ -487,7 +487,7 @@ packages:
description:
name: image_picker_ios
sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.8.13"
image_picker_linux:
... ... @@ -495,7 +495,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:
... ... @@ -503,7 +503,7 @@ packages:
description:
name: image_picker_macos
sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
image_picker_ohos:
... ... @@ -520,7 +520,7 @@ packages:
description:
name: image_picker_platform_interface
sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
image_picker_windows:
... ... @@ -528,7 +528,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:
... ... @@ -536,7 +536,7 @@ packages:
description:
name: intl
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.19.0"
io:
... ... @@ -544,7 +544,7 @@ packages:
description:
name: io
sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
js:
... ... @@ -552,7 +552,7 @@ packages:
description:
name: js
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.7.1"
json_annotation:
... ... @@ -560,7 +560,7 @@ packages:
description:
name: json_annotation
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.9.0"
leak_tracker:
... ... @@ -568,7 +568,7 @@ packages:
description:
name: leak_tracker
sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "10.0.7"
leak_tracker_flutter_testing:
... ... @@ -576,7 +576,7 @@ packages:
description:
name: leak_tracker_flutter_testing
sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.8"
leak_tracker_testing:
... ... @@ -584,7 +584,7 @@ packages:
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
lints:
... ... @@ -592,7 +592,7 @@ packages:
description:
name: lints
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.1.1"
logger:
... ... @@ -600,7 +600,7 @@ packages:
description:
name: logger
sha256: "2a0dc097e7b01d942475bdd552356db2d0f768b05540bd4b2b53f1840f2239a7"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.8.0"
logging:
... ... @@ -608,7 +608,7 @@ packages:
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
lottie:
... ... @@ -616,7 +616,7 @@ packages:
description:
name: lottie
sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
matcher:
... ... @@ -624,7 +624,7 @@ packages:
description:
name: matcher
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.12.16+1"
material_color_utilities:
... ... @@ -632,23 +632,23 @@ 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:
dependency: "direct overridden"
description:
name: meta
sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9"
url: "https://pub.flutter-io.cn"
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.19.0"
version: "1.17.0"
mime:
dependency: transitive
description:
name: mime
sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
octo_image:
... ... @@ -656,7 +656,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:
... ... @@ -664,7 +664,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:
... ... @@ -672,7 +672,7 @@ packages:
description:
name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
path_provider:
... ... @@ -689,7 +689,7 @@ packages:
description:
name: path_provider_android
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.17"
path_provider_foundation:
... ... @@ -697,7 +697,7 @@ packages:
description:
name: path_provider_foundation
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
path_provider_linux:
... ... @@ -705,7 +705,7 @@ packages:
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_ohos:
... ... @@ -722,7 +722,7 @@ packages:
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
... ... @@ -730,7 +730,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:
... ... @@ -738,7 +738,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:
... ... @@ -746,7 +746,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:
... ... @@ -754,7 +754,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:
... ... @@ -762,7 +762,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:
... ... @@ -779,7 +779,7 @@ packages:
description:
name: permission_handler_platform_interface
sha256: ed86a61c190258fdd65de395ea0632822e3415c1faec38eae0c31b479c28a531
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.4.1"
permission_handler_windows:
... ... @@ -787,7 +787,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:
... ... @@ -804,7 +804,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:
... ... @@ -812,7 +812,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:
... ... @@ -820,7 +820,7 @@ packages:
description:
name: pool
sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.3"
posix:
... ... @@ -828,7 +828,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:
... ... @@ -836,7 +836,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:
... ... @@ -844,7 +844,7 @@ packages:
description:
name: pub_semver
sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
pubspec_parse:
... ... @@ -852,7 +852,7 @@ packages:
description:
name: pubspec_parse
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
rxdart:
... ... @@ -860,7 +860,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:
... ... @@ -895,7 +895,7 @@ packages:
description:
name: shared_preferences_android
sha256: "5bcf0772a761b04f8c6bf814721713de6f3e5d9d89caf8d3fe031b02a342379e"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.11"
shared_preferences_foundation:
... ... @@ -903,7 +903,7 @@ packages:
description:
name: shared_preferences_foundation
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.5.4"
shared_preferences_linux:
... ... @@ -911,7 +911,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:
... ... @@ -928,7 +928,7 @@ packages:
description:
name: shared_preferences_platform_interface
sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shared_preferences_web:
... ... @@ -936,7 +936,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:
... ... @@ -944,7 +944,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:
... ... @@ -952,7 +952,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:
... ... @@ -960,7 +960,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:
... ... @@ -968,7 +968,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:
... ... @@ -981,7 +981,7 @@ packages:
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
sqflite:
... ... @@ -998,7 +998,7 @@ packages:
description:
name: sqflite_android
sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
sqflite_common:
... ... @@ -1006,7 +1006,7 @@ packages:
description:
name: sqflite_common
sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.5.4+6"
sqflite_darwin:
... ... @@ -1014,7 +1014,7 @@ packages:
description:
name: sqflite_darwin
sha256: "22adfd9a2c7d634041e96d6241e6e1c8138ca6817018afc5d443fef91dcefa9c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.1+1"
sqflite_ohos:
... ... @@ -1031,7 +1031,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:
... ... @@ -1039,7 +1039,7 @@ packages:
description:
name: stack_trace
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.12.0"
stream_channel:
... ... @@ -1047,7 +1047,7 @@ packages:
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
stream_transform:
... ... @@ -1055,7 +1055,7 @@ packages:
description:
name: stream_transform
sha256: a00e5f18bffc764f923e7dec1038527f7fe7a1791361a7117f0358193f13d53a
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
string_scanner:
... ... @@ -1063,7 +1063,7 @@ packages:
description:
name: string_scanner
sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
synchronized:
... ... @@ -1071,7 +1071,7 @@ packages:
description:
name: synchronized
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.3.0+3"
table_calendar:
... ... @@ -1079,7 +1079,7 @@ packages:
description:
name: table_calendar
sha256: b2896b7c86adf3a4d9c911d860120fe3dbe03c85db43b22fd61f14ee78cdbb63
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
term_glyph:
... ... @@ -1087,7 +1087,7 @@ packages:
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
... ... @@ -1095,7 +1095,7 @@ packages:
description:
name: test_api
sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.7.3"
thinking_analytics:
... ... @@ -1103,7 +1103,7 @@ packages:
description:
name: thinking_analytics
sha256: b01cac0b5482e71c1d75c44c77d27f427662cc65a77b7bc3c8b49617d7a01e02
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.3.3"
timing:
... ... @@ -1111,7 +1111,7 @@ packages:
description:
name: timing
sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
typed_data:
... ... @@ -1119,7 +1119,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:
... ... @@ -1127,7 +1127,7 @@ packages:
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
url_launcher_platform_interface:
... ... @@ -1135,7 +1135,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:
... ... @@ -1143,7 +1143,7 @@ packages:
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
url_launcher_windows:
... ... @@ -1151,7 +1151,7 @@ packages:
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
uuid:
... ... @@ -1159,7 +1159,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:
... ... @@ -1167,7 +1167,7 @@ packages:
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
video_thumbnail:
... ... @@ -1175,7 +1175,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:
... ... @@ -1183,7 +1183,7 @@ packages:
description:
name: vm_service
sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "14.3.0"
watcher:
... ... @@ -1191,7 +1191,7 @@ packages:
description:
name: watcher
sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
web:
... ... @@ -1199,7 +1199,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:
... ... @@ -1207,7 +1207,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:
... ... @@ -1215,7 +1215,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:
... ... @@ -1268,7 +1268,7 @@ packages:
description:
name: win32
sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.10.1"
xdg_directories:
... ... @@ -1276,7 +1276,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:
... ... @@ -1284,7 +1284,7 @@ packages:
description:
name: yaml
sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
sdks:
... ...
name: doublefeel_flutter
description: "A new Flutter project."
publish_to: 'none'
publish_to: 'none'
version: 2.7.0+101
version: 2.5.0+100
environment:
sdk: ^3.6.2
... ... @@ -11,17 +11,13 @@ dependencies:
sdk: flutter
cupertino_icons: ^1.0.8
get: ^4.7.2
# get:
# git:
# url: https://gitcode.com/CPF-Flutter/fluttertpc_get
# ref: 4.7.2-ohos-1.0.0-beta.1
dio: ^5.7.0
pretty_dio_logger: ^1.4.0
cached_network_image: ^3.4.1
fl_chart: ^0.70.2
logger: ^2.6.2
webview_flutter:
git:
git:
url: https://gitcode.com/openharmony-tpc/flutter_packages.git
path: packages/webview_flutter/webview_flutter
ref: br_webview_flutter-v4.13.0_ohos
... ... @@ -30,18 +26,17 @@ dependencies:
url: https://gitcode.com/openharmony-tpc/flutter_packages.git
path: packages/shared_preferences/shared_preferences
ref: br_shared_preferences-v2.5.3_ohos
# image_picker: ^1.1.2
image_picker:
image_picker: ^1.1.2
image_picker_ohos:
git:
url: https://gitcode.com/openharmony-sig/flutter_packages.git
path: packages/image_picker/image_picker
ref: br_image_picker-v1.1.2_ohos
# image_cropper: 9.1.0
image_cropper:
git:
url: https://gitcode.com/CPF-Flutter/fluttertpc_image_cropper.git
path: ./image_cropper
ref: 9.1.0-ohos-1.0.0-beta.1
path: packages/image_picker/image_picker_ohos
image_cropper: 9.1.0
# image_cropper:
# git:
# url: https://gitcode.com/openharmony-sig/fluttertpc_image_cropper.git
# path: ./image_cropper
# ref: br_v9.1.0_ohos
permission_handler: ^11.3.1
permission_handler_ohos:
git:
... ... @@ -55,23 +50,13 @@ dependencies:
ref: br_share_plus-v10.1.1_ohos
video_thumbnail: ^0.5.3
table_calendar: ^3.1.3
# fluttertoast: ^8.2.2
fluttertoast:
git:
url: https://gitcode.com/CPF-Flutter/flutter_fluttertoast.git
ref: 9.0.0-ohos-1.0.0
# path_provider: 2.1.5
path_provider:
git:
url: https://gitcode.com/openharmony-sig/flutter_packages.git
path: packages/path_provider/path_provider
ref: master
fluttertoast: ^8.2.2
path_provider: ^2.1.5
thinking_analytics: ^3.3.2
flutter_localizations:
sdk: flutter
intl: any
lottie: 3.3.1
lottie: ^3.3.3
sqflite:
git:
url: "https://gitcode.com/CPF-Flutter/flutter_sqflite.git"
... ... @@ -81,18 +66,12 @@ dependencies:
flutter_timezone: ^5.1.0
# share_plus (git) 间接依赖 openharmony-sig/flutter_packages.git@master 的
# path_provider,direct dependency 也保持同源,避免 pub source 冲突。
# share_plus (git) 间接依赖 path_provider 的 git 版本,
# 与 cached_network_image → flutter_cache_manager 依赖的 hosted 版本冲突。
# 强制使用 hosted 版本统一来源。
dependency_overrides:
path_provider:
git:
url: https://gitcode.com/openharmony-sig/flutter_packages.git
path: packages/path_provider/path_provider
ref: master
# image_cropper_platform_interface: 7.1.0
# Override meta to satisfy flutter_timezone 5.1.0 (requires ^1.16.0)
# while the ohos flutter_test bundle pins 1.15.0.
meta: ^1.16.0
path_provider: 2.1.5
image_cropper_platform_interface: 7.1.0
sqflite:
git:
url: "https://gitcode.com/CPF-Flutter/flutter_sqflite.git"
... ... @@ -135,3 +114,6 @@ flutter:
- assets/images/user_onboarding/zh/
- assets/images/user_onboarding/oh/
- assets/images/premium/
- assets/images/premium/zh/
- assets/images/interact/
- assets/images/interact/animations/
... ...