diff --git a/lib/database/box_type.dart b/lib/database/box_type.dart index 7fa3dd1..f356e3a 100644 --- a/lib/database/box_type.dart +++ b/lib/database/box_type.dart @@ -39,24 +39,28 @@ class ChatSetting { @HiveType(typeId: 1) class MessageT { @HiveField(0) + int msgId; + + @HiveField(1) String senderId; - @HiveField(1, defaultValue: '') + @HiveField(2, defaultValue: '') String text; - @HiveField(2) + @HiveField(3) String type; - @HiveField(3, defaultValue: []) + @HiveField(4, defaultValue: []) List attachments; - @HiveField(4) + @HiveField(5) DateTime dateTime; - @HiveField(5) + @HiveField(6) bool isShowTime; MessageT( + this.msgId, this.senderId, this.text, this.type, diff --git a/lib/database/box_type.g.dart b/lib/database/box_type.g.dart index 4602131..b98d13b 100644 --- a/lib/database/box_type.g.dart +++ b/lib/database/box_type.g.dart @@ -69,30 +69,33 @@ class MessageTAdapter extends TypeAdapter { for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), }; return MessageT( - fields[0] as String, - fields[1] == null ? '' : fields[1] as String, - fields[2] as String, - fields[4] as DateTime, - fields[5] as bool, - fields[3] == null ? [] : (fields[3] as List).cast(), + fields[0] as int, + fields[1] as String, + fields[2] == null ? '' : fields[2] as String, + fields[3] as String, + fields[5] as DateTime, + fields[6] as bool, + fields[4] == null ? [] : (fields[4] as List).cast(), ); } @override void write(BinaryWriter writer, MessageT obj) { writer - ..writeByte(6) + ..writeByte(7) ..writeByte(0) - ..write(obj.senderId) + ..write(obj.msgId) ..writeByte(1) - ..write(obj.text) + ..write(obj.senderId) ..writeByte(2) - ..write(obj.type) + ..write(obj.text) ..writeByte(3) - ..write(obj.attachments) + ..write(obj.type) ..writeByte(4) - ..write(obj.dateTime) + ..write(obj.attachments) ..writeByte(5) + ..write(obj.dateTime) + ..writeByte(6) ..write(obj.isShowTime); } diff --git a/lib/database/hive_database.dart b/lib/database/hive_database.dart index 75d9cd3..b14b19a 100644 --- a/lib/database/hive_database.dart +++ b/lib/database/hive_database.dart @@ -15,7 +15,7 @@ class HiveDatabase { if (_isInitialised) { return; } - + List encryptionKeyUint8List = await _getEncryptKey(); await Hive.initFlutter(await getBoxDir()); @@ -27,7 +27,7 @@ class HiveDatabase { chatSettingBox.values.where((element) => element.isOpen); for (var chatBox in openedChats) { - Hive.openBox( + await Hive.openBox( 'message_${chatBox.contactId}', encryptionCipher: HiveAesCipher(encryptionKeyUint8List), compactionStrategy: (entries, deletedEntries) => entries > 200, @@ -42,18 +42,19 @@ class HiveDatabase { Hive.registerAdapter(MessageTAdapter()); } - static Future openNewMessageBox(String contactId, int type) async { + static Future> openMessageBox(String contactId) async { final encryptionKeyUint8List = await _getEncryptKey(); - - var chatSettingBox = Hive.box('chat_setting'); - chatSettingBox.add( - ChatSetting(contactId, type, false, false, false, DateTime.now(), 0)); - - await Hive.openBox( - 'message_$contactId', - encryptionCipher: HiveAesCipher(encryptionKeyUint8List), - compactionStrategy: (entries, deletedEntries) => entries > 200, - ); + late Box messageTBox; + try { + messageTBox = Hive.box('message_$contactId'); + } catch (e) { + messageTBox = await Hive.openBox( + 'message_$contactId', + encryptionCipher: HiveAesCipher(encryptionKeyUint8List), + compactionStrategy: (entries, deletedEntries) => entries > 200, + ); + } + return messageTBox; } static Future> _getEncryptKey() async { @@ -78,60 +79,3 @@ class HiveDatabase { await Hive.close(); } } - -// Future initDatabase() async { -// await Hive.close(); - -// List encryptionKeyUint8List = await getEncryptKey(); - -// await Hive.initFlutter(await getBoxDir()); - -// Box chatSettingBox = -// await Hive.openBox('chat_setting'); - -// final openedChats = chatSettingBox.values.where((element) => element.isOpen); - -// for (var chatBox in openedChats) { -// Hive.openBox( -// 'message_${chatBox.contactId}', -// encryptionCipher: HiveAesCipher(encryptionKeyUint8List), -// compactionStrategy: (entries, deletedEntries) => entries > 200, -// ); -// } -// } - -// void registerAdapter() { -// Hive.registerAdapter(ChatSettingAdapter()); -// Hive.registerAdapter(MessageTAdapter()); -// } - -// Future> getEncryptKey() async { -// final id = getIt.get().id; -// const secureStorage = FlutterSecureStorage(); -// final encryptionKeyString = await secureStorage.read(key: 'encryptKey:$id'); -// if (encryptionKeyString == null) { -// final key = Hive.generateSecureKey(); -// await secureStorage.write( -// key: 'encryptKey:$id', -// value: base64Encode(key), -// ); -// } -// String? key = await secureStorage.read(key: 'encryptKey:$id'); -// final encryptionKeyUint8List = base64Url.decode(key!); - -// return encryptionKeyUint8List; -// } - -// Future openNewMessageBox(String contactId, int type) async { -// final encryptionKeyUint8List = await getEncryptKey(); - -// var chatSettingBox = Hive.box('chat_setting'); -// chatSettingBox.add( -// ChatSetting(contactId, type, false, false, false, DateTime.now(), 0)); - -// await Hive.openBox( -// 'message_$contactId', -// encryptionCipher: HiveAesCipher(encryptionKeyUint8List), -// compactionStrategy: (entries, deletedEntries) => entries > 200, -// ); -// } diff --git a/lib/models/websocket_model.dart b/lib/models/websocket_model.dart index e0eab8d..39fcb78 100644 --- a/lib/models/websocket_model.dart +++ b/lib/models/websocket_model.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:hive_flutter/hive_flutter.dart'; +import 'package:together_mobile/database/hive_database.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:web_socket_channel/status.dart' as status; @@ -204,14 +205,8 @@ void receiveFriendMsg(Map msg, bool isShowNotification) async { print(msg); print('======================================='); String senderId = msg['senderId'] as String; - late Box messageTBox; - try { - messageTBox = Hive.box('message_$senderId'); - } catch (e) { - messageTBox = await Hive.openBox('message_$senderId'); - } - Box chatSettingBox = Hive.box('chat_setting'); + Box messageTBox = await HiveDatabase.openMessageBox(senderId); ChatSetting? chatSetting = chatSettingBox.get(senderId); DateTime dateTime = DateTime.parse(msg['dateTime'] as String); @@ -228,8 +223,6 @@ void receiveFriendMsg(Map msg, bool isShowNotification) async { 1, ), ); - } else if ((messageTBox.get(msg['msgId'] as String)) != null) { - return; } else { chatSetting.isOpen = true; chatSetting.latestDateTime = dateTime; @@ -240,9 +233,9 @@ void receiveFriendMsg(Map msg, bool isShowNotification) async { List attachments = List.from(msg['attachments']); final DateTime now = DateTime.parse(msg['dateTime'] as String); - messageTBox.put( - msg['msgId'] as String, + messageTBox.add( MessageT( + msg['msgId'] as int, senderId, msg['text'], msg['type'], @@ -345,14 +338,8 @@ void receiveGroupChatMsg( print('======================================='); String senderId = msg['senderId'] as String; String groupChatId = msg['groupChatId'] as String; - late Box messageTBox; - try { - messageTBox = Hive.box('message_$groupChatId'); - } catch (e) { - messageTBox = await Hive.openBox('message_$groupChatId'); - } - Box chatSettingBox = Hive.box('chat_setting'); + Box messageTBox = await HiveDatabase.openMessageBox(groupChatId); ChatSetting? chatSetting = chatSettingBox.get(groupChatId); DateTime dateTime = DateTime.parse(msg['dateTime'] as String); @@ -379,8 +366,6 @@ void receiveGroupChatMsg( 1, ), ); - } else if ((messageTBox.get(msg['msgId'] as String)) != null) { - return; } else { chatSetting.isOpen = true; chatSetting.latestDateTime = dateTime; @@ -391,9 +376,9 @@ void receiveGroupChatMsg( List attachments = List.from(msg['attachments']); final DateTime now = DateTime.parse(msg['dateTime'] as String); - messageTBox.put( - msg['msgId'] as String, + messageTBox.add( MessageT( + msg['msgId'] as int, senderId, msg['text'], msg['type'], diff --git a/lib/router/chat_router.dart b/lib/router/chat_router.dart index afce700..d33ee9d 100644 --- a/lib/router/chat_router.dart +++ b/lib/router/chat_router.dart @@ -6,6 +6,7 @@ import 'package:together_mobile/router/router_key.dart'; import 'package:together_mobile/screens/chat/chat_screen.dart'; import 'package:together_mobile/screens/message/friend_message_screen.dart'; import 'package:together_mobile/screens/message/group_chat_message_screen.dart'; +import 'package:together_mobile/screens/message/image_view_screen/image_view_screen.dart'; final chatRouter = GoRoute( path: '/chat', @@ -31,6 +32,24 @@ final chatRouter = GoRoute( ); } }, + routes: [ + GoRoute( + path: 'image_view', + name: 'ImageView', + parentNavigatorKey: rootNavigatorKey, + builder: (context, state) { + Map extra = state.extra as Map; + for (var a in extra['attachmentItems']! as List) { + print(a.id); + } + return ImageViewScreen( + attachmentItems: + extra['attachmentItems']! as List, + initialIndex: extra['index']! as int, + ); + }, + ), + ], ), ], ); diff --git a/lib/screens/contact_add/create_group_chat_screen.dart b/lib/screens/contact_add/create_group_chat_screen.dart index 46ba0be..9522927 100644 --- a/lib/screens/contact_add/create_group_chat_screen.dart +++ b/lib/screens/contact_add/create_group_chat_screen.dart @@ -4,8 +4,10 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:go_router/go_router.dart'; +import 'package:hive_flutter/hive_flutter.dart'; import 'package:together_mobile/common/constants.dart'; +import 'package:together_mobile/database/box_type.dart'; import 'package:together_mobile/database/hive_database.dart'; import 'package:together_mobile/models/contact_model.dart'; import 'package:together_mobile/models/init_get_it.dart'; @@ -196,7 +198,21 @@ class _CreateGroupChatScreenState extends State { 'groupGhat': res['data'] }), ); - await HiveDatabase.openNewMessageBox(id, 1); + + final chatSettingBox = Hive.box('chat_setting'); + chatSettingBox.put( + id, + ChatSetting( + id, + 1, + false, + false, + false, + DateTime.now(), + 0, + ), + ); + await HiveDatabase.openMessageBox(id); // ignore: use_build_context_synchronously context.goNamed( 'Message', diff --git a/lib/screens/friend_profile/components/row_floating_buttons.dart b/lib/screens/friend_profile/components/row_floating_buttons.dart index 90cd50a..b59ec76 100755 --- a/lib/screens/friend_profile/components/row_floating_buttons.dart +++ b/lib/screens/friend_profile/components/row_floating_buttons.dart @@ -5,6 +5,7 @@ import 'package:hive/hive.dart'; import 'package:together_mobile/common/constants.dart'; import 'package:together_mobile/database/box_type.dart'; +import 'package:together_mobile/database/hive_database.dart'; class RowFloatingButtons extends StatelessWidget { const RowFloatingButtons({ @@ -74,13 +75,7 @@ class RowFloatingButtons extends StatelessWidget { ), FloatingActionButton( onPressed: () async { - try { - Hive.box('message_$friendId'); - } catch (e) { - // have to await it - await Hive.openBox('message_$friendId'); - } - + HiveDatabase.openMessageBox(friendId); // ignore: use_build_context_synchronously context.pushReplacementNamed( 'Message', diff --git a/lib/screens/message/components/friend_message_bubble.dart b/lib/screens/message/components/friend_message_bubble.dart old mode 100755 new mode 100644 index b38168e..65834a5 --- a/lib/screens/message/components/friend_message_bubble.dart +++ b/lib/screens/message/components/friend_message_bubble.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:together_mobile/common/constants.dart'; @@ -11,6 +12,7 @@ import 'package:together_mobile/models/contact_model.dart'; import 'package:together_mobile/models/init_get_it.dart'; import 'package:together_mobile/models/user_model.dart'; import 'package:together_mobile/request/server.dart'; +import 'package:together_mobile/screens/message/image_view_screen/image_view_screen.dart'; class FriendMessageBubble extends StatefulWidget { const FriendMessageBubble({ @@ -24,12 +26,14 @@ class FriendMessageBubble extends StatefulWidget { required this.isShowTime, required this.text, required this.attachments, + required this.attachmentItems, }); final int index, length; final String contactId, senderId, type, dateTime, text; final bool isShowTime; final List attachments; + final List attachmentItems; @override State createState() => _FriendMessageBubbleState(); @@ -181,6 +185,14 @@ class _FriendMessageBubbleState extends State { ...List.generate( widget.attachments.length, (int index) { + int attachmentItemIndex = + widget.attachmentItems.indexWhere( + (element) => + element.resource == + widget.attachments[index], + ); + int heroTagId = widget + .attachmentItems[attachmentItemIndex].id; return Container( margin: const EdgeInsets.only( bottom: 15, @@ -192,14 +204,28 @@ class _FriendMessageBubbleState extends State { borderRadius: BorderRadius.circular(10.0), ), child: _isImagesLoaded[index] - ? Image.file(File( - '${getIt.get().baseImageDir}/${widget.attachments[index]}', - )) + ? GestureDetector( + onTap: () { + _onTapImage( + context, + widget.attachments[index], + ); + }, + child: Hero( + tag: heroTagId, + child: Image.file( + File( + '${getIt.get().baseImageDir}/${widget.attachments[index]}', + ), + ), + ), + ) : Container( width: 20, height: 40, padding: const EdgeInsets.symmetric( - vertical: 10), + vertical: 10, + ), child: const CircularProgressIndicator( color: kSecondaryColor, @@ -234,4 +260,18 @@ class _FriendMessageBubbleState extends State { ), ); } + + void _onTapImage(BuildContext context, String attachment) { + int attachmentIndex = widget.attachmentItems.indexWhere( + (element) => element.resource == attachment, + ); + + context.pushNamed( + 'ImageView', + extra: { + 'attachmentItems': widget.attachmentItems, + 'index': attachmentIndex, + }, + ); + } } diff --git a/lib/screens/message/components/group_chat_message_bubble.dart b/lib/screens/message/components/group_chat_message_bubble.dart index 316fbd2..57a871a 100755 --- a/lib/screens/message/components/group_chat_message_bubble.dart +++ b/lib/screens/message/components/group_chat_message_bubble.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:hive/hive.dart'; import 'package:together_mobile/common/constants.dart'; @@ -11,6 +12,7 @@ import 'package:together_mobile/models/contact_model.dart'; import 'package:together_mobile/models/init_get_it.dart'; import 'package:together_mobile/models/user_model.dart'; import 'package:together_mobile/request/server.dart'; +import 'package:together_mobile/screens/message/image_view_screen/image_view_screen.dart'; class GroupChatMessageBubble extends StatefulWidget { const GroupChatMessageBubble({ @@ -24,12 +26,14 @@ class GroupChatMessageBubble extends StatefulWidget { required this.isShowTime, required this.text, required this.attachments, + required this.attachmentItems, }); final int index, length; final String contactId, senderId, type, dateTime, text; final bool isShowTime; final List attachments; + final List attachmentItems; @override State createState() => _GroupChatMessageBubbleState(); @@ -41,45 +45,6 @@ class _GroupChatMessageBubbleState extends State { final List _timerList = []; late bool _isHideMsg; - // Future _getMemberGroupChatProfile() async { - // if (widget.senderId == getIt.get().id) { - // // myself or already have profile - // return Future(() => true); - // } - // if (getIt - // .get() - // .grouChatMemberProfiles - // .containsKey(widget.contactId) && - // getIt - // .get() - // .grouChatMemberProfiles[widget.contactId]! - // .containsKey(widget.senderId)) { - // return Future(() => true); - // } else { - // Map res; - // if (getIt.get().friends.containsKey(widget.senderId)) { - // // my friend - // res = await getGroupChatMemberNameAvatar( - // widget.contactId, - // widget.senderId, - // true, - // ); - // } else { - // res = await getGroupChatMemberNameAvatar( - // widget.contactId, - // widget.senderId, - // false, - // ); - // } - // getIt.get().addGroupChatMemberProfile( - // widget.contactId, - // widget.senderId, - // res['data'], - // ); - // return Future(() => true); - // } - // } - @override void initState() { super.initState(); @@ -206,6 +171,14 @@ class _GroupChatMessageBubbleState extends State { ...List.generate( widget.attachments.length, (int index) { + int attachmentItemIndex = + widget.attachmentItems.indexWhere( + (element) => + element.resource == + widget.attachments[index], + ); + int heroTagId = widget + .attachmentItems[attachmentItemIndex].id; return Container( margin: const EdgeInsets.only( bottom: 15, @@ -217,9 +190,22 @@ class _GroupChatMessageBubbleState extends State { borderRadius: BorderRadius.circular(10.0), ), child: _isImagesLoaded[index] - ? Image.file(File( - '${getIt.get().baseImageDir}/${widget.attachments[index]}', - )) + ? GestureDetector( + onTap: () { + _onTapImage( + context, + widget.attachments[index], + ); + }, + child: Hero( + tag: heroTagId, + child: Image.file( + File( + '${getIt.get().baseImageDir}/${widget.attachments[index]}', + ), + ), + ), + ) : Container( width: 20, height: 40, @@ -255,9 +241,22 @@ class _GroupChatMessageBubbleState extends State { ); } + void _onTapImage(BuildContext context, String attachment) { + int attachmentIndex = widget.attachmentItems.indexWhere( + (element) => element.resource == attachment, + ); + + context.pushNamed( + 'ImageView', + extra: { + 'attachmentItems': widget.attachmentItems, + 'index': attachmentIndex, + }, + ); + } + CircleAvatar _showAvatar(bool isOther) { if (isOther) { - print(isOther); String avatar = getIt .get() .grouChatMemberProfiles[widget.contactId]![widget.senderId]! diff --git a/lib/screens/message/components/message_input_box.dart b/lib/screens/message/components/message_input_box.dart index cd71599..18cd4d8 100755 --- a/lib/screens/message/components/message_input_box.dart +++ b/lib/screens/message/components/message_input_box.dart @@ -239,11 +239,16 @@ class _MessageInputBoxState extends State { } } - final String msgId = formatMsgIDFromTime(now); + late int msgId; + if (_messageTBox.length == 0) { + msgId = 0; + } else { + msgId = _messageTBox.length - 1; + } - _messageTBox.put( - msgId, + _messageTBox.add( MessageT( + msgId, senderId, text, type, diff --git a/lib/screens/message/friend_message_screen.dart b/lib/screens/message/friend_message_screen.dart index f50b4ea..98aae1c 100755 --- a/lib/screens/message/friend_message_screen.dart +++ b/lib/screens/message/friend_message_screen.dart @@ -12,6 +12,7 @@ import 'package:together_mobile/models/route_state_model.dart'; import 'package:together_mobile/utils/format_datetime.dart'; import 'components/friend_message_bubble.dart'; import 'components/message_input_box.dart'; +import 'image_view_screen/image_view_screen.dart'; class FriendMessageScreen extends StatefulWidget { const FriendMessageScreen({ @@ -121,8 +122,28 @@ class _FriendMessageScreenState extends State { int i = length - index - 1; MessageT messageT = messageTBox.getAt(i)!; + List allAttachments = []; + for (var element in messageTBox.values) { + if (element.attachments.isNotEmpty) { + allAttachments.addAll(element.attachments); + } + } + // Do not reverse the list, cause what i want is + // rigth slide to next image, left to last otherwise + // allAttachments = List.from(allAttachments.reversed); + + List attachmentItems = List.generate( + allAttachments.length, + (int index) { + return AttachmentItem( + id: index, + resource: allAttachments[index], + ); + }, + ); + return FriendMessageBubble( - key: ValueKey(i), + key: ValueKey(messageT.msgId), index: i, length: length, contactId: widget.friendId, @@ -132,6 +153,7 @@ class _FriendMessageScreenState extends State { type: messageT.type, text: messageT.text, attachments: messageT.attachments, + attachmentItems: attachmentItems, ); }, ); diff --git a/lib/screens/message/group_chat_message_screen.dart b/lib/screens/message/group_chat_message_screen.dart index 7ac015e..f7077cb 100755 --- a/lib/screens/message/group_chat_message_screen.dart +++ b/lib/screens/message/group_chat_message_screen.dart @@ -12,6 +12,7 @@ import 'package:together_mobile/models/route_state_model.dart'; import 'package:together_mobile/utils/format_datetime.dart'; import 'components/group_chat_message_bubble.dart'; import 'components/message_input_box.dart'; +import 'image_view_screen/image_view_screen.dart'; class GroupChatMessageScreen extends StatefulWidget { const GroupChatMessageScreen({ @@ -135,6 +136,26 @@ class _GroupChatMessageScreenState extends State { int i = length - index - 1; MessageT messageT = messageTBox.getAt(i)!; + List allAttachments = []; + for (var element in messageTBox.values) { + if (element.attachments.isNotEmpty) { + allAttachments.addAll(element.attachments); + } + } + // Do not reverse the list, cause what i want is + // rigth slide to next image, left to last otherwise + // allAttachments = List.from(allAttachments.reversed); + + List attachmentItems = List.generate( + allAttachments.length, + (int index) { + return AttachmentItem( + id: index, + resource: allAttachments[index], + ); + }, + ); + return GroupChatMessageBubble( key: ValueKey(i), index: i, @@ -146,6 +167,7 @@ class _GroupChatMessageScreenState extends State { type: messageT.type, text: messageT.text, attachments: messageT.attachments, + attachmentItems: attachmentItems, ); }, ); diff --git a/lib/screens/message/image_view_screen/image_view_screen.dart b/lib/screens/message/image_view_screen/image_view_screen.dart new file mode 100644 index 0000000..e700a68 --- /dev/null +++ b/lib/screens/message/image_view_screen/image_view_screen.dart @@ -0,0 +1,110 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import 'package:photo_view/photo_view.dart'; +import 'package:photo_view/photo_view_gallery.dart'; +import 'package:together_mobile/models/init_get_it.dart'; +import 'package:together_mobile/models/user_model.dart'; + +// https://github.com/bluefireteam/photo_view/blob/main/example/lib/screens/examples/gallery/gallery_example.dart + +class AttachmentItem { + AttachmentItem({ + required this.id, + required this.resource, + }); + + final int id; + final String resource; +} + +class ImageViewScreen extends StatefulWidget { + ImageViewScreen({ + super.key, + this.loadingBuilder, + this.minScale, + this.maxScale, + this.initialIndex = 0, + required this.attachmentItems, + this.scrollDirection = Axis.horizontal, + }) : pageController = PageController(initialPage: initialIndex); + + final LoadingBuilder? loadingBuilder; + final dynamic minScale; + final dynamic maxScale; + final int initialIndex; + final PageController pageController; + final List attachmentItems; + final Axis scrollDirection; + + @override + State createState() => _ImageViewScreenState(); +} + +class _ImageViewScreenState extends State { + late int currentIndex = widget.initialIndex; + + void onPageChanged(int index) { + setState(() { + currentIndex = index; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: GestureDetector( + onTap: () { + context.pop(); + }, + child: Container( + decoration: const BoxDecoration(color: Colors.black), + constraints: BoxConstraints.expand( + height: MediaQuery.of(context).size.height, + ), + child: Stack( + alignment: Alignment.bottomRight, + children: [ + PhotoViewGallery.builder( + scrollPhysics: const BouncingScrollPhysics(), + builder: _buildItem, + itemCount: widget.attachmentItems.length, + loadingBuilder: widget.loadingBuilder, + backgroundDecoration: const BoxDecoration(color: Colors.black), + pageController: widget.pageController, + onPageChanged: onPageChanged, + scrollDirection: widget.scrollDirection, + ), + Container( + padding: const EdgeInsets.all(20.0), + child: Text( + "Image ${currentIndex + 1}", + style: const TextStyle( + color: Colors.white, + fontSize: 17.0, + decoration: null, + ), + ), + ) + ], + ), + ), + ), + ); + } + + PhotoViewGalleryPageOptions _buildItem(BuildContext context, int index) { + final AttachmentItem item = widget.attachmentItems[index]; + return PhotoViewGalleryPageOptions( + imageProvider: FileImage( + File('${getIt.get().baseImageDir}/${item.resource}'), + ), + initialScale: PhotoViewComputedScale.contained, + minScale: PhotoViewComputedScale.contained * (0.5 + index / 10), + maxScale: PhotoViewComputedScale.covered * 4.1, + heroAttributes: PhotoViewHeroAttributes(tag: item.id), + ); + } +} diff --git a/lib/screens/more/setting_screen/setting_screen.dart b/lib/screens/more/setting_screen/setting_screen.dart index 7c98935..6176dc9 100644 --- a/lib/screens/more/setting_screen/setting_screen.dart +++ b/lib/screens/more/setting_screen/setting_screen.dart @@ -46,7 +46,7 @@ class SettingScreen extends StatelessWidget { getIt.get().clear(); getIt.get().clear(); getIt.get().clear(); - // Hive.deleteFromDisk(); + Hive.deleteFromDisk(); await HiveDatabase.close(); }, ); diff --git a/pubspec.lock b/pubspec.lock index ec5e2af..6233a3c 100755 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: _fe_analyzer_shared sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "64.0.0" analyzer: @@ -14,23 +14,23 @@ packages: description: name: analyzer sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.2.0" archive: dependency: "direct main" description: name: archive - sha256: "49b1fad315e57ab0bbc15bcbb874e83116a1d78f77ebd500a4af6c9407d6b28e" - url: "https://pub.flutter-io.cn" + sha256: "1227dc3efc4ea571eebb2dfb814506ed2cfb1d4b1b89fb918abdddde617ead3c" + url: "https://pub.dev" source: hosted - version: "3.3.8" + version: "3.4.0" args: dependency: transitive description: name: args sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.2" 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" badges: @@ -46,7 +46,7 @@ packages: description: name: badges sha256: a7b6bbd60dce418df0db3058b53f9d083c22cdb5132a052145dc267494df0b84 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.2" boolean_selector: @@ -54,7 +54,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: @@ -62,7 +62,7 @@ packages: description: name: build sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.1" build_config: @@ -70,7 +70,7 @@ packages: description: name: build_config sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" build_daemon: @@ -78,7 +78,7 @@ packages: description: name: build_daemon sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.0" build_resolvers: @@ -86,7 +86,7 @@ packages: description: name: build_resolvers sha256: d912852cce27c9e80a93603db721c267716894462e7033165178b91138587972 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.2" build_runner: @@ -94,7 +94,7 @@ packages: description: name: build_runner sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.6" build_runner_core: @@ -102,7 +102,7 @@ packages: description: name: build_runner_core sha256: "6d6ee4276b1c5f34f21fdf39425202712d2be82019983d52f351c94aafbc2c41" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.2.10" built_collection: @@ -110,23 +110,23 @@ packages: description: name: built_collection sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - sha256: ff627b645b28fb8bdb69e645f910c2458fd6b65f6585c3a53e0626024897dedf - url: "https://pub.flutter-io.cn" + sha256: a8de5955205b4d1dbbbc267daddf2178bd737e4bab8987c04a500478c9651e74 + url: "https://pub.dev" source: hosted - version: "8.6.2" + version: "8.6.3" cached_network_image: dependency: "direct main" description: name: cached_network_image sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.3" cached_network_image_platform_interface: @@ -134,7 +134,7 @@ packages: description: name: cached_network_image_platform_interface sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.0" cached_network_image_web: @@ -142,7 +142,7 @@ packages: description: name: cached_network_image_web sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" characters: @@ -150,7 +150,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: @@ -158,23 +158,23 @@ packages: description: name: checked_yaml sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.3" cherry_toast: dependency: "direct main" description: name: cherry_toast - sha256: "5724acebea4544697994e47a180295657b48d7468224c4c6296f230706a9a4a5" - url: "https://pub.flutter-io.cn" + sha256: f63c629fdd85c2fb1f8133f124b5cd38800890a92bb4ded10ed9bd19b5d2ceb6 + url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" clock: dependency: transitive description: name: clock sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: @@ -182,7 +182,7 @@ packages: description: name: code_builder sha256: "315a598c7fbe77f22de1c9da7cfd6fd21816312f16ffa124453b4fc679e540f1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.6.0" collection: @@ -190,7 +190,7 @@ packages: description: name: collection sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.17.2" colorfilter_generator: @@ -198,7 +198,7 @@ packages: description: name: colorfilter_generator sha256: ccc2995e440b1d828d55d99150e7cad64624f3cb4a1e235000de3f93cf10d35c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.0.8" convert: @@ -206,7 +206,7 @@ packages: description: name: convert sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.1" cross_file: @@ -214,7 +214,7 @@ packages: description: name: cross_file sha256: fd832b5384d0d6da4f6df60b854d33accaaeb63aa9e10e736a87381f08dee2cb - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.3.3+5" crypto: @@ -222,7 +222,7 @@ packages: description: name: crypto sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.3" csslib: @@ -230,39 +230,39 @@ packages: description: name: csslib sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.0" cupertino_icons: dependency: transitive description: name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be - url: "https://pub.flutter-io.cn" + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" custom_pop_up_menu: dependency: "direct main" description: name: custom_pop_up_menu sha256: eeac484c6ddffffb25e803dc2a5cc9381e700a29f074e9fcc76fe36b62fde850 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.4" dart_style: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" - url: "https://pub.flutter-io.cn" + sha256: abd7625e16f51f554ea244d090292945ec4d4be7bfbaf2ec8cccea568919d334 + url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.3" dbus: dependency: transitive description: name: dbus sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.7.8" device_info_plus: @@ -270,7 +270,7 @@ packages: description: name: device_info_plus sha256: "86add5ef97215562d2e090535b0a16f197902b10c369c558a100e74ea06e8659" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "9.0.3" device_info_plus_platform_interface: @@ -278,23 +278,23 @@ packages: description: name: device_info_plus_platform_interface sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.0.0" dio: dependency: "direct main" description: name: dio - sha256: ce75a1b40947fea0a0e16ce73337122a86762e38b982e1ccb909daa3b9bc4197 - url: "https://pub.flutter-io.cn" + sha256: "417e2a6f9d83ab396ec38ff4ea5da6c254da71e4db765ad737a42af6930140b7" + url: "https://pub.dev" source: hosted - version: "5.3.2" + version: "5.3.3" extended_image: dependency: transitive description: name: extended_image sha256: b4d72a27851751cfadaf048936d42939db7cd66c08fdcfe651eeaa1179714ee6 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "8.1.1" extended_image_library: @@ -302,7 +302,7 @@ packages: description: name: extended_image_library sha256: "8bf87c0b14dcb59200c923a9a3952304e4732a0901e40811428834ef39018ee1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.6.0" fake_async: @@ -310,7 +310,7 @@ packages: description: name: fake_async sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.1" fast_rsa: @@ -318,7 +318,7 @@ packages: description: name: fast_rsa sha256: "2619f8869c0245919fc8f3695f786bf7a7e75e4bb87a7f13ad3b3223fa35bdf0" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.6.1" ffi: @@ -326,7 +326,7 @@ packages: description: name: ffi sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" file: @@ -334,7 +334,7 @@ packages: description: name: file sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.1.4" file_selector_linux: @@ -342,23 +342,23 @@ packages: description: name: file_selector_linux sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.9.2+1" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: "182c3f8350cee659f7b115e956047ee3dc672a96665883a545e81581b9a82c72" - url: "https://pub.flutter-io.cn" + sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 + url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "0.9.3+3" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.6.1" file_selector_windows: @@ -366,7 +366,7 @@ packages: description: name: file_selector_windows sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.9.3+1" fixnum: @@ -374,7 +374,7 @@ packages: description: name: fixnum sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" flat_buffers: @@ -382,7 +382,7 @@ packages: description: name: flat_buffers sha256: "23e2ced0d8e8ecdffbd9f267f49a668c74438393b9acaeac1c724123e3764263" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.5" flutter: @@ -395,7 +395,7 @@ packages: description: name: flutter_blurhash sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.7.0" flutter_cache_manager: @@ -403,7 +403,7 @@ packages: description: name: flutter_cache_manager sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.3.1" flutter_colorpicker: @@ -411,7 +411,7 @@ packages: description: name: flutter_colorpicker sha256: "458a6ed8ea480eb16ff892aedb4b7092b2804affd7e046591fb03127e8d8ef8b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.3" flutter_image_compress: @@ -419,7 +419,7 @@ packages: description: name: flutter_image_compress sha256: "2725cce5c58fdeaf1db8f4203688228bb67e3523a66305ccaa6f99071beb6dc2" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.4" flutter_image_compress_common: @@ -427,7 +427,7 @@ packages: description: name: flutter_image_compress_common sha256: "8e7299afe109dc4b97fda34bf0f4967cc1fc10bc8050c374d449cab262d095b3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" flutter_image_compress_platform_interface: @@ -435,7 +435,7 @@ packages: description: name: flutter_image_compress_platform_interface sha256: "3c7e86da7540b1adfa919b461885a41a018d4a26544d0fcbeaa769f6542e603d" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" flutter_image_compress_web: @@ -443,7 +443,7 @@ packages: description: name: flutter_image_compress_web sha256: e879189dc7f246dcf8f06c07ee849231341508bf51e8ed7d5dcbe778ddde0e81 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.1.3+1" flutter_lints: @@ -451,7 +451,7 @@ packages: description: name: flutter_lints sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.3" flutter_local_notifications: @@ -459,7 +459,7 @@ packages: description: name: flutter_local_notifications sha256: "3002092e5b8ce2f86c3361422e52e6db6776c23ee21e0b2f71b892bf4259ef04" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "15.1.1" flutter_local_notifications_linux: @@ -467,7 +467,7 @@ packages: description: name: flutter_local_notifications_linux sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.0+1" flutter_local_notifications_platform_interface: @@ -475,7 +475,7 @@ packages: description: name: flutter_local_notifications_platform_interface sha256: "7cf643d6d5022f3baed0be777b0662cce5919c0a7b86e700299f22dc4ae660ef" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.0.0+1" flutter_pickers: @@ -483,7 +483,7 @@ packages: description: name: flutter_pickers sha256: f38a9d9229afed75f76bae64e628b78b9c20194873e3c141783523cf21ac8a95 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.9" flutter_plugin_android_lifecycle: @@ -491,7 +491,7 @@ packages: description: name: flutter_plugin_android_lifecycle sha256: f185ac890306b5779ecbd611f52502d8d4d63d27703ef73161ca0407e815f02c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.16" flutter_secure_storage: @@ -499,7 +499,7 @@ packages: description: name: flutter_secure_storage sha256: "22dbf16f23a4bcf9d35e51be1c84ad5bb6f627750565edd70dab70f3ff5fff8f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "8.1.0" flutter_secure_storage_linux: @@ -507,7 +507,7 @@ packages: description: name: flutter_secure_storage_linux sha256: "3d5032e314774ee0e1a7d0a9f5e2793486f0dff2dd9ef5a23f4e3fb2a0ae6a9e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.0" flutter_secure_storage_macos: @@ -515,7 +515,7 @@ packages: description: name: flutter_secure_storage_macos sha256: bd33935b4b628abd0b86c8ca20655c5b36275c3a3f5194769a7b3f37c905369c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.1" flutter_secure_storage_platform_interface: @@ -523,7 +523,7 @@ packages: description: name: flutter_secure_storage_platform_interface sha256: "0d4d3a5dd4db28c96ae414d7ba3b8422fd735a8255642774803b2532c9a61d7e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" flutter_secure_storage_web: @@ -531,7 +531,7 @@ packages: description: name: flutter_secure_storage_web sha256: "30f84f102df9dcdaa2241866a958c2ec976902ebdaa8883fbfe525f1f2f3cf20" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.2" flutter_secure_storage_windows: @@ -539,7 +539,7 @@ packages: description: name: flutter_secure_storage_windows sha256: "38f9501c7cb6f38961ef0e1eacacee2b2d4715c63cc83fe56449c4d3d0b47255" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" flutter_slidable: @@ -547,7 +547,7 @@ packages: description: name: flutter_slidable sha256: cc4231579e3eae41ae166660df717f4bad1359c87f4a4322ad8ba1befeb3d2be - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.0" flutter_test: @@ -560,7 +560,7 @@ packages: description: name: flutter_timezone sha256: "4508018aba499c837f723e2e718259eb677410490638b7ea669b11113d083e68" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.7" flutter_web_plugins: @@ -573,7 +573,7 @@ packages: description: name: font_awesome_flutter sha256: "5fb789145cae1f4c3245c58b3f8fb287d055c26323879eab57a7bf0cfd1e45f3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "10.5.0" frontend_server_client: @@ -581,7 +581,7 @@ packages: description: name: frontend_server_client sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.0" functional_listener: @@ -589,7 +589,7 @@ packages: description: name: functional_listener sha256: "026d1bd4f66367f11d9ec9f1f1ddb42b89e4484b356972c76d983266cf82f33f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.1" get_it: @@ -597,7 +597,7 @@ packages: description: name: get_it sha256: f79870884de16d689cf9a7d15eedf31ed61d750e813c538a6efb92660fea83c3 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.6.4" get_it_mixin: @@ -605,7 +605,7 @@ packages: description: name: get_it_mixin sha256: "0ab5c9f3cdaab813ec396de5d43ee3833c418424b3a99bec0071fcbf693c0bad" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.2.2" glob: @@ -613,7 +613,7 @@ packages: description: name: glob sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.2" go_router: @@ -621,7 +621,7 @@ packages: description: name: go_router sha256: "00d1b67d6e9fa443331da229084dd3eb04407f5a2dff22940bd7bba6af5722c3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.1.1" google_fonts: @@ -629,7 +629,7 @@ packages: description: name: google_fonts sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.5" graphs: @@ -637,7 +637,7 @@ packages: description: name: graphs sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.1" hand_signature: @@ -645,7 +645,7 @@ packages: description: name: hand_signature sha256: "69cc5a978a5a15dfc1fabb01c097efcf91e9af2006475e48bb8f2560db368a97" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.1" hive: @@ -653,7 +653,7 @@ packages: description: name: hive sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.3" hive_flutter: @@ -661,7 +661,7 @@ packages: description: name: hive_flutter sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" hive_generator: @@ -669,7 +669,7 @@ packages: description: name: hive_generator sha256: "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.1" html: @@ -677,7 +677,7 @@ packages: description: name: html sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.15.4" http: @@ -685,7 +685,7 @@ packages: description: name: http sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" http_client_helper: @@ -693,7 +693,7 @@ packages: description: name: http_client_helper sha256: "8a9127650734da86b5c73760de2b404494c968a3fd55602045ffec789dac3cb1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.0" http_multi_server: @@ -701,7 +701,7 @@ packages: description: name: http_multi_server sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: @@ -709,23 +709,23 @@ packages: description: name: http_parser sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.2" image: dependency: transitive description: name: image - sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf - url: "https://pub.flutter-io.cn" + sha256: "6e703d5e2f8c63fb31a77753915c1ec8baebde8088844e0d29f71b8f0b108888" + url: "https://pub.dev" source: hosted - version: "4.0.17" + version: "4.1.0" image_editor: dependency: transitive description: name: image_editor sha256: "9877a057b0cd2fafcd9a3dce5279948bd850d53ce76231a83c9678a2c9f186e9" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.0" image_editor_common: @@ -733,7 +733,7 @@ packages: description: name: image_editor_common sha256: "07fc9bcc16918a8230e132b9d9a9f66bb1cef3ac99f5e2939cf2ad7a6775b511" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.1" image_editor_platform_interface: @@ -741,7 +741,7 @@ packages: description: name: image_editor_platform_interface sha256: ee01ec5e228e10c40f96d7f822c176d4140c15b6706e4a701866ee0cdd1c2b72 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.1" image_editor_plus: @@ -749,7 +749,7 @@ packages: description: name: image_editor_plus sha256: cad057b6b0314ba406a5b3a4eefa43342816851e4b485479de6512b4130c0d46 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.2.6" image_picker: @@ -757,23 +757,23 @@ packages: description: name: image_picker sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: d32a997bcc4ee135aebca8e272b7c517927aa65a74b9c60a81a2764ef1a0462d - url: "https://pub.flutter-io.cn" + sha256: "47da2161c2e9f8f8a9cbbd89d466d174333fbdd769aeed848912e0b16d9cb369" + url: "https://pub.dev" source: hosted - version: "0.8.7+5" + version: "0.8.8" image_picker_for_web: dependency: transitive description: name: image_picker_for_web sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.1" image_picker_ios: @@ -781,7 +781,7 @@ packages: description: name: image_picker_ios sha256: c5538cacefacac733c724be7484377923b476216ad1ead35a0d2eadcdc0fc497 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.8.8+2" image_picker_linux: @@ -789,7 +789,7 @@ packages: description: name: image_picker_linux sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.2.1+1" image_picker_macos: @@ -797,7 +797,7 @@ packages: description: name: image_picker_macos sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.2.1+1" image_picker_platform_interface: @@ -805,7 +805,7 @@ packages: description: name: image_picker_platform_interface sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.9.1" image_picker_windows: @@ -813,7 +813,7 @@ packages: description: name: image_picker_windows sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.2.1+1" io: @@ -821,7 +821,7 @@ packages: description: name: io sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" js: @@ -829,7 +829,7 @@ packages: description: name: js sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.6.7" json_annotation: @@ -837,7 +837,7 @@ packages: description: name: json_annotation sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.8.1" lints: @@ -845,7 +845,7 @@ packages: description: name: lints sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" logging: @@ -853,7 +853,7 @@ packages: description: name: logging sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.0" matcher: @@ -861,7 +861,7 @@ packages: description: name: matcher sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.12.16" material_color_utilities: @@ -869,7 +869,7 @@ packages: description: name: material_color_utilities sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.5.0" matrix2d: @@ -877,7 +877,7 @@ packages: description: name: matrix2d sha256: "188718dd3bc2a31e372cfd0791b0f77f4f13ea76164147342cc378d9132949e7" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" meta: @@ -885,7 +885,7 @@ packages: description: name: meta sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.9.1" mime: @@ -893,7 +893,7 @@ packages: description: name: mime sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" octo_image: @@ -901,7 +901,7 @@ packages: description: name: octo_image sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.2" package_config: @@ -909,7 +909,7 @@ packages: description: name: package_config sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" path: @@ -917,7 +917,7 @@ packages: description: name: path sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.8.3" path_provider: @@ -925,7 +925,7 @@ packages: description: name: path_provider sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" path_provider_android: @@ -933,7 +933,7 @@ packages: description: name: path_provider_android sha256: "6b8b19bd80da4f11ce91b2d1fb931f3006911477cec227cce23d3253d80df3f1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.0" path_provider_foundation: @@ -941,7 +941,7 @@ packages: description: name: path_provider_foundation sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.1" path_provider_linux: @@ -949,7 +949,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_platform_interface: @@ -957,7 +957,7 @@ packages: description: name: path_provider_platform_interface sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" path_provider_windows: @@ -965,7 +965,7 @@ packages: description: name: path_provider_windows sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.1" petitparser: @@ -973,7 +973,7 @@ packages: description: name: petitparser sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.4.0" photo_view: @@ -981,7 +981,7 @@ packages: description: name: photo_view sha256: "8036802a00bae2a78fc197af8a158e3e2f7b500561ed23b4c458107685e645bb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.14.0" platform: @@ -989,7 +989,7 @@ packages: description: name: platform sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.2" plugin_platform_interface: @@ -997,7 +997,7 @@ packages: description: name: plugin_platform_interface sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.6" pointycastle: @@ -1005,7 +1005,7 @@ packages: description: name: pointycastle sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.7.3" pool: @@ -1013,7 +1013,7 @@ packages: description: name: pool sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.1" pub_semver: @@ -1021,7 +1021,7 @@ packages: description: name: pub_semver sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.4" pubspec_parse: @@ -1029,7 +1029,7 @@ packages: description: name: pubspec_parse sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.3" reorderables: @@ -1037,7 +1037,7 @@ packages: description: name: reorderables sha256: "004a886e4878df1ee27321831c838bc1c976311f4ca6a74ce7d561e506540a77" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.6.0" rxdart: @@ -1045,7 +1045,7 @@ packages: description: name: rxdart sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.27.7" screenshot: @@ -1053,7 +1053,7 @@ packages: description: name: screenshot sha256: "455284ff1f5b911d94a43c25e1385485cf6b4f288293eba68f15dad711c7b81c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences: @@ -1061,63 +1061,63 @@ packages: description: name: shared_preferences sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.1" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 - url: "https://pub.flutter-io.cn" + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: d29753996d8eb8f7619a1f13df6ce65e34bc107bef6330739ed76f18b22310ef - url: "https://pub.flutter-io.cn" + sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.4" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" - url: "https://pub.flutter-io.cn" + sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a + url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" - url: "https://pub.flutter-io.cn" + sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" - url: "https://pub.flutter-io.cn" + sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d - url: "https://pub.flutter-io.cn" + sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f + url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" shelf: dependency: transitive description: name: shelf sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.1" shelf_web_socket: @@ -1125,7 +1125,7 @@ packages: description: name: shelf_web_socket sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" sky_engine: @@ -1138,7 +1138,7 @@ packages: description: name: source_gen sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.0" source_helper: @@ -1146,7 +1146,7 @@ packages: description: name: source_helper sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.4" source_span: @@ -1154,15 +1154,23 @@ packages: description: name: source_span sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqflite: dependency: transitive description: name: sqflite sha256: "591f1602816e9c31377d5f008c2d9ef7b8aca8941c3f89cc5fd9d84da0c38a9a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.0" sqflite_common: @@ -1170,7 +1178,7 @@ packages: description: name: sqflite_common sha256: "1b92f368f44b0dee2425bb861cfa17b6f6cf3961f762ff6f941d20b33355660a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.5.0" stack_trace: @@ -1178,7 +1186,7 @@ packages: description: name: stack_trace sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.11.0" stream_channel: @@ -1186,7 +1194,7 @@ packages: description: name: stream_channel sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" stream_transform: @@ -1194,7 +1202,7 @@ packages: description: name: stream_transform sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" string_scanner: @@ -1202,7 +1210,7 @@ packages: description: name: string_scanner sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.0" synchronized: @@ -1210,7 +1218,7 @@ packages: description: name: synchronized sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.0" term_glyph: @@ -1218,7 +1226,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: @@ -1226,7 +1234,7 @@ packages: description: name: test_api sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.6.0" timezone: @@ -1234,7 +1242,7 @@ packages: description: name: timezone sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.9.2" timing: @@ -1242,7 +1250,7 @@ packages: description: name: timing sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.1" typed_data: @@ -1250,63 +1258,63 @@ packages: description: name: typed_data sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.2" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.flutter-io.cn" + sha256: e03928880bdbcbf496fb415573f5ab7b1ea99b9b04f669c01104d085893c3134 + url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.0.0" vector_math: dependency: transitive description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.4" video_player: dependency: "direct main" description: name: video_player - sha256: d3910a8cefc0de8a432a4411dcf85030e885d8fef3ddea291f162253a05dbf01 - url: "https://pub.flutter-io.cn" + sha256: "74b86e63529cf5885130c639d74cd2f9232e7c8a66cbecbddd1dcb9dbd060d1e" + url: "https://pub.dev" source: hosted - version: "2.7.1" + version: "2.7.2" video_player_android: dependency: transitive description: name: video_player_android sha256: "3fe89ab07fdbce786e7eb25b58532d6eaf189ceddc091cb66cba712f8d9e8e55" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.10" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: f5f5b7fe8c865be8a57fe80c2dca130772e1db775b7af4e5c5aa1905069cfc6c - url: "https://pub.flutter-io.cn" + sha256: c3b123a5a56c9812b9029f840c65b92fd65083eb08d69be016b01e8aa018f77d + url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.10" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: "1ca9acd7a0fb15fb1a990cb554e6f004465c6f37c99d2285766f08a4b2802988" - url: "https://pub.flutter-io.cn" + sha256: be72301bf2c0150ab35a8c34d66e5a99de525f6de1e8d27c0672b836fe48f73a + url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.2.1" video_player_web: dependency: transitive description: name: video_player_web sha256: "66fc0d56554143fee4c623f70e45e4272b94fd246283cb67edabb9d1e4122a4f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" watcher: @@ -1314,7 +1322,7 @@ packages: description: name: watcher sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" web: @@ -1322,7 +1330,7 @@ packages: description: name: web sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.1.4-beta" web_socket_channel: @@ -1330,39 +1338,39 @@ packages: description: name: web_socket_channel sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.0" win32: dependency: transitive description: name: win32 - sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa" - url: "https://pub.flutter-io.cn" + sha256: c97defd418eef4ec88c0d1652cdce84b9f7b63dd7198e266d06ac1710d527067 + url: "https://pub.dev" source: hosted - version: "5.0.7" + version: "5.0.8" win32_registry: dependency: transitive description: name: win32_registry - sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9 - url: "https://pub.flutter-io.cn" + sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: f0c26453a2d47aa4c2570c6a033246a3fc62da2fe23c7ffdd0a7495086dc0247 - url: "https://pub.flutter-io.cn" + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" xml: dependency: transitive description: name: xml sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.3.0" yaml: @@ -1370,7 +1378,7 @@ packages: description: name: yaml sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.2" sdks: