diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 0604e966..7df01396 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -22,6 +22,9 @@ PODS: - fluwx (0.0.1): - Flutter - "OpenWeChatSDK (~> 1.9.2+1)" + - FMDB (2.7.11): + - FMDB/standard (= 2.7.11) + - FMDB/standard (2.7.11) - geolocator (6.2.0): - Flutter - image_gallery_saver (2.0.2): @@ -56,7 +59,7 @@ PODS: - "OpenWeChatSDK (1.9.9+1)" - package_info (0.0.1): - Flutter - - path_provider (0.0.1): + - path_provider_ios (0.0.1): - Flutter - "permission_handler (5.1.0+2)": - Flutter @@ -76,6 +79,9 @@ PODS: - mob_sharesdk/ShareSDKPlatforms/Line - mob_sharesdk/ShareSDKPlatforms/WeChat_Lite - mob_sharesdk/ShareSDKUI + - sqflite (0.0.3): + - Flutter + - FMDB (>= 2.7.5) - SSZipArchive (2.4.3) - tobias (0.0.1): - Flutter @@ -111,11 +117,12 @@ DEPENDENCIES: - image_pickers (from `.symlinks/plugins/image_pickers/ios`) - number_precision (from `.symlinks/plugins/number_precision/ios`) - package_info (from `.symlinks/plugins/package_info/ios`) - - path_provider (from `.symlinks/plugins/path_provider/ios`) + - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - permission_handler (from `.symlinks/plugins/permission_handler/ios`) - scan (from `.symlinks/plugins/scan/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) - sharesdk_plugin (from `.symlinks/plugins/sharesdk_plugin/ios`) + - sqflite (from `.symlinks/plugins/sqflite/ios`) - SSZipArchive (~> 2.4.2) - tobias (from `.symlinks/plugins/tobias/ios`) - tpns_flutter_plugin (from `.symlinks/plugins/tpns_flutter_plugin/ios`) @@ -128,6 +135,7 @@ DEPENDENCIES: SPEC REPOS: https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: - AFNetworking + - FMDB - mob_sharesdk - MOBFoundation - OpenWeChatSDK @@ -157,8 +165,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/number_precision/ios" package_info: :path: ".symlinks/plugins/package_info/ios" - path_provider: - :path: ".symlinks/plugins/path_provider/ios" + path_provider_ios: + :path: ".symlinks/plugins/path_provider_ios/ios" permission_handler: :path: ".symlinks/plugins/permission_handler/ios" scan: @@ -167,6 +175,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/shared_preferences_foundation/ios" sharesdk_plugin: :path: ".symlinks/plugins/sharesdk_plugin/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/ios" tobias: :path: ".symlinks/plugins/tobias/ios" tpns_flutter_plugin: @@ -188,6 +198,7 @@ SPEC CHECKSUMS: Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_pdfview: 25f53dd6097661e6395b17de506e6060585946bd fluwx: 79c66b6d795ab8208262ada215d9e60388cfe492 + FMDB: 57486c1117fd8e0e6b947b2f54c3f42bf8e57a4e geolocator: f5e3de65e241caba7ce3e8a618803387bda73384 image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb image_pickers: 25c8916d358bc9d2707cb470ba3d57497f105773 @@ -196,12 +207,13 @@ SPEC CHECKSUMS: number_precision: 26fa2be2212f9d1429f92d667d6b0aa4df0058d8 OpenWeChatSDK: ea48e9db20645f78128db9091893910280b8e4b1 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c + path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0 scan: aea35bb4aa59ccc8839c576a18cd57c7d492cc86 SDWebImage: e5cc87bf736e60f49592f307bdf9e157189298a3 shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472 sharesdk_plugin: f29a6f471ae1c253e96636d62106c3f8d793948c + sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef tobias: 2aded9b83e3663b907360a800d8e3c13284f25c5 TPNS-iOS: 36c335eff80670de6ede780ab827f679d78f64ff @@ -209,8 +221,8 @@ SPEC CHECKSUMS: UMCommon: 47e0b53f6a36568e958a5abd005ed7577fcac9ad UMDevice: 9ef8045b59e0479cff7062915c879a1af46fa094 umeng_common_sdk: a8abd7f86dfd013dbbeeae587ee143760c6582f2 - url_launcher: a1c0cc845906122c4784c542523d8cacbded5626 - video_player_avfoundation: 6d971a232d72e6ee25368378d48a079dea01f1cf + url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef + video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f webview_flutter: 5fb4def2bbd4339889ee14d045b605cefc5bc232 ZLPhotoBrowser-objc: c7657d3bc85ae231884e058d0e3638f619164736 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 4db48b27..18f207d8 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -660,12 +660,7 @@ "-ObjC", "-l\"c++\"", "-l\"image_pickers\"", - "-l\"path_provider\"", "-l\"permission_handler\"", - "-l\"sqlite3\"", - "-l\"wakelock\"", - "-l\"webview_flutter\"", - "-l\"z\"", "-fcxx-modules", "-fmodules", "-ld64", @@ -864,12 +859,7 @@ "-ObjC", "-l\"c++\"", "-l\"image_pickers\"", - "-l\"path_provider\"", "-l\"permission_handler\"", - "-l\"sqlite3\"", - "-l\"wakelock\"", - "-l\"webview_flutter\"", - "-l\"z\"", "-fcxx-modules", "-fmodules", "-ld64", @@ -954,12 +944,7 @@ "-ObjC", "-l\"c++\"", "-l\"image_pickers\"", - "-l\"path_provider\"", "-l\"permission_handler\"", - "-l\"sqlite3\"", - "-l\"wakelock\"", - "-l\"webview_flutter\"", - "-l\"z\"", "-fcxx-modules", "-fmodules", "-ld64", diff --git a/lib/im/SocketClient.dart b/lib/im/SocketClient.dart index 5f927716..5f148dfb 100644 --- a/lib/im/SocketClient.dart +++ b/lib/im/SocketClient.dart @@ -6,27 +6,45 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:huixiang/im/Proto.dart'; +import 'package:huixiang/im/database/message.dart'; import 'package:huixiang/im/out/auth.pb.dart'; import 'package:huixiang/im/out/message.pb.dart'; +import 'package:huixiang/main.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class SocketClient { Socket _socket; + SharedPreferences shared; connect() async { - _socket = await Socket.connect('192.168.10.129', 9090); - _socket.listen((data) { - print(data); - print("socket-listen"); - Proto proto = Proto.fromBytes(data); - print("socket-listen: $proto"); - MsgData data1 = MsgData.fromBuffer(proto.body); - print('收到来自:${data1.from},消息内容: ${utf8.decode(data1.data)} '); - - callbacks.forEach((callback) { - callback.call(data1); + shared = await SharedPreferences.getInstance(); + + await Socket.connect('192.168.10.129', 9090).then((value) { + debugPrint("socket-connect"); + _socket = value; + _socket.listen((data) { + print(data); + print("socket-listen"); + Proto proto = Proto.fromBytes(data); + print("socket-listen: $proto"); + MsgData data1 = MsgData.fromBuffer(proto.body); + print('收到来自:${data1.from},消息内容: ${utf8.decode(data1.data)} '); + + hxDatabase.messageDao.insertMessage(createMessage(mobile, utf8.decode(data1.data), userId: data1.from)); + + callbacks.forEach((callback) { + callback.call(data1); + }); + + }, onError: (Object error, StackTrace stackTrace) { + debugPrint("socket-error: $error, stackTrace: ${stackTrace}"); }); + authRequest(shared.getString("token")); + + }).catchError((error) { + debugPrint("socket-connect-error: $error"); }); } @@ -40,27 +58,35 @@ class SocketClient { callbacks.remove(callback); } + dispose() { + _socket.close(); + } + authRequest(String token) { if (!checkSocket()) { return; } final authReq = AuthReq() - ..uid = 1 - ..token = '123456'; + ..uid = mobile + ..token = token; final authReqBytes = authReq.writeToBuffer(); final proto = Proto(1, 1, authReqBytes); // 假设 operation 和 seqId 为 1 final protoBytes = proto.toBytes(); _socket.add(protoBytes); } - sendMessage(var to, String content) { + sendMessage(int toId, String content) { if (!checkSocket()) { return; } Uint8List data = utf8.encode(content); - MsgData msgData = MsgData(to: to,from: 2,type: MsgType.SINGLE_TEXT,data: data); - final proto2 = Proto(5,1,msgData.writeToBuffer()); + MsgData msgData = MsgData(to: toId, from: mobile, type: MsgType.SINGLE_TEXT,data: data); + final proto2 = Proto(5, 1, msgData.writeToBuffer()); _socket.add(proto2.toBytes()); + hxDatabase.messageDao.insertMessage(createMessage(toId, content, userId: mobile)).catchError((error) { + debugPrint("insertMessage: $error"); + }); + debugPrint("insertMessage: end"); } checkSocket() { @@ -71,4 +97,7 @@ class SocketClient { return true; } + get mobile => 123456; + + } \ No newline at end of file diff --git a/lib/im/chat_details_page.dart b/lib/im/chat_details_page.dart index 4f506e07..695616ae 100644 --- a/lib/im/chat_details_page.dart +++ b/lib/im/chat_details_page.dart @@ -7,6 +7,7 @@ import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:huixiang/main.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:flutter/cupertino.dart'; diff --git a/lib/im/database/hx_database.dart b/lib/im/database/hx_database.dart new file mode 100644 index 00000000..9ac61cbb --- /dev/null +++ b/lib/im/database/hx_database.dart @@ -0,0 +1,18 @@ + + +import 'dart:async'; + +import 'package:floor/floor.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:huixiang/im/database/message_dao.dart'; +import 'package:huixiang/im/database/message.dart'; +import 'package:sqflite/sqflite.dart' as sqflite; + +part 'hx_database.g.dart'; + +@Database(version: 1, entities: [Message]) +abstract class HxDatabase extends FloorDatabase { + + MessageDao get messageDao; + +} diff --git a/lib/im/database/hx_database.g.dart b/lib/im/database/hx_database.g.dart new file mode 100644 index 00000000..b0ba6d66 --- /dev/null +++ b/lib/im/database/hx_database.g.dart @@ -0,0 +1,144 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'hx_database.dart'; + +// ************************************************************************** +// FloorGenerator +// ************************************************************************** + +// ignore: avoid_classes_with_only_static_members +class $FloorHxDatabase { + /// Creates a database builder for a persistent database. + /// Once a database is built, you should keep a reference to it and re-use it. + static _$HxDatabaseBuilder databaseBuilder(String name) => + _$HxDatabaseBuilder(name); + + /// Creates a database builder for an in memory database. + /// Information stored in an in memory database disappears when the process is killed. + /// Once a database is built, you should keep a reference to it and re-use it. + static _$HxDatabaseBuilder inMemoryDatabaseBuilder() => + _$HxDatabaseBuilder(null); +} + +class _$HxDatabaseBuilder { + _$HxDatabaseBuilder(this.name); + + final String name; + + final List _migrations = []; + + Callback _callback; + + /// Adds migrations to the builder. + _$HxDatabaseBuilder addMigrations(List migrations) { + _migrations.addAll(migrations); + return this; + } + + /// Adds a database [Callback] to the builder. + _$HxDatabaseBuilder addCallback(Callback callback) { + _callback = callback; + return this; + } + + /// Creates the database and initializes it. + Future build() async { + final path = name != null + ? await sqfliteDatabaseFactory.getDatabasePath(name) + : ':memory:'; + final database = _$HxDatabase(); + database.database = await database.open( + path, + _migrations, + _callback, + ); + return database; + } +} + +class _$HxDatabase extends HxDatabase { + _$HxDatabase([StreamController listener]) { + changeListener = listener ?? StreamController.broadcast(); + } + + MessageDao _messageDaoInstance; + + Future open( + String path, + List migrations, [ + Callback callback, + ]) async { + final databaseOptions = sqflite.OpenDatabaseOptions( + version: 1, + onConfigure: (database) async { + await database.execute('PRAGMA foreign_keys = ON'); + await callback?.onConfigure?.call(database); + }, + onOpen: (database) async { + await callback?.onOpen?.call(database); + }, + onUpgrade: (database, startVersion, endVersion) async { + await MigrationAdapter.runMigrations( + database, startVersion, endVersion, migrations); + + await callback?.onUpgrade?.call(database, startVersion, endVersion); + }, + onCreate: (database, version) async { + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Message` (`id` INTEGER, `fromId` INTEGER, `toId` INTEGER, `content` TEXT, `attach` TEXT, `msgType` INTEGER, `time` INTEGER, `state` INTEGER, `isDelete` INTEGER, PRIMARY KEY (`id`))'); + + await callback?.onCreate?.call(database, version); + }, + ); + return sqfliteDatabaseFactory.openDatabase(path, options: databaseOptions); + } + + @override + MessageDao get messageDao { + return _messageDaoInstance ??= _$MessageDao(database, changeListener); + } +} + +class _$MessageDao extends MessageDao { + _$MessageDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database, changeListener), + _messageInsertionAdapter = InsertionAdapter( + database, + 'Message', + (Message item) => item.toJson(), + changeListener); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _messageInsertionAdapter; + + @override + Stream> findMessageByToId(int toId) { + return _queryAdapter.queryListStream( + 'SELECT * FROM Message WHERE toId = ?1', + mapper: (Map row) => Message.fromJson(row), + arguments: [toId], + queryableName: 'Message', + isView: false); + } + + @override + Future> findMessageByGroup(int userId) { + debugPrint("findMessageByGroup: $userId"); + return _queryAdapter.queryList( + 'SELECT * FROM Message WHERE toId = ?1 OR fromId = ?2 GROUP BY toId,fromId ORDER BY time DESC', + mapper: (Map row) => Message.fromJson(row), + arguments: [userId, userId]); + } + + @override + Future insertMessage(Message message) async { + await _messageInsertionAdapter.insert(message, OnConflictStrategy.abort); + } +} diff --git a/lib/im/database/message.dart b/lib/im/database/message.dart new file mode 100644 index 00000000..cc16be6f --- /dev/null +++ b/lib/im/database/message.dart @@ -0,0 +1,61 @@ +import 'package:floor/floor.dart'; + +@entity +class Message { + @primaryKey + int id; + + int fromId; + + int toId; + + String content; + + String attach; + + int msgType; + + int time; + + int state; + + int isDelete; + + Message(id, fromId, toId, content, attach, msgType, time, state, isDelete); + + factory Message.fromJson(Map json) => Message( + json["id"], + json["fromId"], + json["toId"], + json["content"], + json["attach"], + json["msgType"], + json["time"], + json["state"], + json["isDelete"]); + + Map toJson() => { + "id": id, + "fromId": fromId, + "toId": toId, + "content": content, + "attach": attach, + "msgType": msgType, + "time": time, + "state": state, + "isDelete": isDelete == null ? 0 : isDelete + }; +} + +createMessage(var toId, String content, {String attach, int msgType, userId}) { + return Message.fromJson({ + "fromId": userId, + "toId": toId, + "content": content, + "attach": attach, + "msgType": msgType ?? 0, + "time": DateTime.now().millisecondsSinceEpoch, + "state": 0, + "isDelete": 0 + }); +} diff --git a/lib/im/database/message_dao.dart b/lib/im/database/message_dao.dart new file mode 100644 index 00000000..0946b741 --- /dev/null +++ b/lib/im/database/message_dao.dart @@ -0,0 +1,17 @@ +import 'package:floor/floor.dart'; +import 'package:huixiang/im/database/message.dart'; + + +@dao +abstract class MessageDao { + + @Query('SELECT * FROM Message WHERE toId = :toId') + Stream> findMessageByToId(int toId); + + @insert + Future insertMessage(Message message); + + @Query('SELECT * FROM Message WHERE toId = :userId OR fromId = :userId GROUP BY toId,fromId ORDER BY time DESC') + Future> findMessageByGroup(int userId); + +} \ No newline at end of file diff --git a/lib/im/im_view/im_page.dart b/lib/im/im_view/im_page.dart index b99d55ab..18805a7a 100644 --- a/lib/im/im_view/im_page.dart +++ b/lib/im/im_view/im_page.dart @@ -1,9 +1,12 @@ +import 'dart:async'; + import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/im/database/message.dart'; +import 'package:huixiang/main.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; -import 'package:huixiang/retrofit/data/message.dart'; import 'package:huixiang/retrofit/data/msg_stats.dart'; import 'package:huixiang/retrofit/data/page.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; @@ -18,8 +21,8 @@ import 'on_chat_message.dart'; import 'on_chat_msg_instance.dart'; class IMPage extends StatefulWidget { + IMPage(Key key) : super(key: key); - IMPage(Key key): super(key: key); @override State createState() { return _IMPage(); @@ -42,7 +45,7 @@ class _IMPage extends State implements OnChatMessage { final TextEditingController imEditingController = TextEditingController(); @override - void onMessage(txt){ + void onMessage(txt) { // SmartDialog.showToast("列表 $txt", alignment: Alignment.center); } @@ -57,57 +60,87 @@ class _IMPage extends State implements OnChatMessage { super.initState(); OnChatMsgInstance.instance.onChatMessage = this; + loadMessageList(); SharedPreferences.getInstance().then((value) { apiService = ApiService(Dio(), token: value.getString("token"), context: context); - queryMessage(); queryMsgStats(); }); } _refresh() { pageNum = 1; - queryMessage(); + loadMessageList(); queryMsgStats(); } - queryMessage() async { - BaseData> baseData = await apiService.msgList({ - "pageNum": pageNum, - "pageSize": 10, - "searchKey": "", - "state": "", - "typed": "" - }).catchError((onError) { - _refreshController.loadFailed(); - _refreshController.refreshFailed(); + List userIds = []; + + Stream streamSubscription ; + + loadMessageList() async { + int userId = 123456; + + hxDatabase.changeListener.stream.listen((event) { + debugPrint("messages: 1111"); + }, onError: (Object error, stackTrace) { + debugPrint("messages: 3333"); }); + hxDatabase.changeListener.onListen = () { + debugPrint("messages: 2222"); + }; - if (baseData != null && baseData.isSuccess) { - if (pageNum == 1) { - messages.clear(); - } - List message = []; - message.addAll(baseData.data.list); - message.forEach((element) { - if (element.typed == 2 || element.typed == 3) { - messages.add(element); - } - }); - _refreshController.loadComplete(); - _refreshController.refreshCompleted(); - if (mounted) setState(() {}); - if (pageNum * 10 > int.tryParse(baseData.data.total)) { - _refreshController.loadNoData(); - } else { - pageNum += 1; - } - } else { - _refreshController.loadFailed(); - _refreshController.refreshFailed(); + messages = await hxDatabase.messageDao.findMessageByGroup(userId); + messages.forEach((element) { + debugPrint("messages: $element"); + }); + userIds = messages + .map((e) => e.toId != userId ? e.toId : e.fromId) + .toSet() + .toList(); + if (mounted) { + setState(() {}); } + } + // queryMessage() async { + // BaseData> baseData = await apiService.msgList({ + // "pageNum": pageNum, + // "pageSize": 10, + // "searchKey": "", + // "state": "", + // "typed": "" + // }).catchError((onError) { + // _refreshController.loadFailed(); + // _refreshController.refreshFailed(); + // }); + // + // if (baseData != null && baseData.isSuccess) { + // if (pageNum == 1) { + // messages.clear(); + // } + // List message = []; + // message.addAll(baseData.data.list); + // message.forEach((element) { + // if (element.typed == 2 || element.typed == 3) { + // messages.add(element); + // } + // }); + // _refreshController.loadComplete(); + // _refreshController.refreshCompleted(); + // if (mounted) setState(() {}); + // if (pageNum * 10 > int.tryParse(baseData.data.total)) { + // _refreshController.loadNoData(); + // } else { + // pageNum += 1; + // } + // } else { + // _refreshController.loadFailed(); + // _refreshController.refreshFailed(); + // } + // } + queryMsgStats() async { if (apiService == null) { SharedPreferences value = await SharedPreferences.getInstance(); @@ -164,20 +197,16 @@ class _IMPage extends State implements OnChatMessage { // color: Colors.white, decoration: BoxDecoration( gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color(0xFFD9FFDE), - Color(0xFFD9FFDE), - Color(0xFFFFFFFF), - Color(0xFFFFFFFF), - ], - stops: [ - 0, - 0.2, - 0.4, - 1 - ]), + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0xFFD9FFDE), + Color(0xFFD9FFDE), + Color(0xFFFFFFFF), + Color(0xFFFFFFFF), + ], + stops: [0, 0.2, 0.4, 1], + ), ), child: SingleChildScrollView( physics: BouncingScrollPhysics(), @@ -188,24 +217,28 @@ class _IMPage extends State implements OnChatMessage { Container( padding: EdgeInsets.only( top: MediaQuery.of(context).padding.top + 12.h, - bottom: 15.h,right: 16.w,left: 16.w), + bottom: 15.h, + right: 16.w, + left: 16.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( - child: Text( - S.of(context).xiaoxi, - style: TextStyle( - color: Colors.black, - fontSize: 18.sp, - fontWeight: MyFontWeight.bold, - ), - )), + child: Text( + S.of(context).xiaoxi, + style: TextStyle( + color: Colors.black, + fontSize: 18.sp, + fontWeight: MyFontWeight.bold, + ), + ), + ), GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { - Navigator.of(context).pushNamed('/router/chat_friend_group'); + Navigator.of(context) + .pushNamed('/router/chat_friend_group'); }, child: Container( padding: EdgeInsets.all(12), @@ -216,7 +249,8 @@ class _IMPage extends State implements OnChatMessage { child: Image.asset( "assets/image/friend_grouping.webp", fit: BoxFit.fill, - height: 14.h,width: 14.h, + height: 14.h, + width: 14.h, ), ), ), @@ -239,7 +273,7 @@ class _IMPage extends State implements OnChatMessage { Widget imSearchItem() { return Container( margin: EdgeInsets.fromLTRB(16.w, 0, 16.w, 0), - padding: EdgeInsets.symmetric(vertical:13.h), + padding: EdgeInsets.symmetric(vertical: 13.h), decoration: BoxDecoration( color: Color(0xFFFFFFFF), borderRadius: BorderRadius.circular(4), @@ -255,6 +289,7 @@ class _IMPage extends State implements OnChatMessage { child: TextField( textInputAction: TextInputAction.search, onEditingComplete: () { + socketClient.sendMessage(654321, "hello~"); FocusScope.of(context).requestFocus(FocusNode()); }, controller: imEditingController, @@ -285,29 +320,30 @@ class _IMPage extends State implements OnChatMessage { } ///聊天列表 - Widget chatList(){ + Widget chatList() { return Container( child: ListView.builder( - padding: EdgeInsets.only(top: 16), - itemCount: 6, - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - itemBuilder: (context, position) { - return GestureDetector( - behavior:HitTestBehavior.opaque, - onTap: () { - Navigator.of(context).pushNamed('/router/chat_details_page'); - }, - child: chatItem(), - ); - }), + padding: EdgeInsets.only(top: 16), + itemCount: userIds.length, + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (context, position) { + return GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + Navigator.of(context).pushNamed('/router/chat_details_page'); + }, + child: chatItem(userIds[position]), + ); + }, + ), ); } - Widget chatItem(){ + Widget chatItem(userId) { return Container( - padding: EdgeInsets.only(left: 16.w,right: 17.w,bottom:18.h), - child: Row( + padding: EdgeInsets.only(left: 16.w, right: 17.w, bottom: 18.h), + child: Row( children: [ // MImage( // "", @@ -320,49 +356,58 @@ class _IMPage extends State implements OnChatMessage { // ), Image.asset( "assets/image/fuka_zj.webp", - height:54.h, - width:54.h, + height: 54.h, + width: 54.h, ), - SizedBox(width: 12.w,), - Expanded(child: - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded(child: Text( - "喽哈", - overflow: TextOverflow.ellipsis, - maxLines: 1, + SizedBox( + width: 12.w, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + "喽哈$userId", + overflow: TextOverflow.ellipsis, + maxLines: 1, + style: TextStyle( + fontSize: 16.sp, + color: Color(0xFF060606), + fontWeight: MyFontWeight.semi_bold, + ), + ), + ), + Text( + "2021.03.08 13:22", style: TextStyle( - fontSize: 16.sp, - color: Color(0xFF060606), - fontWeight: MyFontWeight.semi_bold, - )),), - Text( - "2021.03.08 13:22", - style: TextStyle( - fontSize: 12.sp, - color: Color(0xFFA29E9E), - fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + color: Color(0xFFA29E9E), + fontWeight: MyFontWeight.regular, + ), ), - ), - ], - ), - SizedBox(height: 7.h,), - Row( - children: [ - Expanded(child:Text( - "新开的火锅店好吃得很", - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 12.sp, - color: Color(0xFF353535), - fontWeight: MyFontWeight.regular, + ], + ), + SizedBox( + height: 7.h, + ), + Row( + children: [ + Expanded( + child: Text( + "新开的火锅店好吃得很", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFF353535), + fontWeight: MyFontWeight.regular, + ), + ), ), - )), - Container( + Container( width: 16, height: 16, decoration: BoxDecoration( @@ -370,17 +415,19 @@ class _IMPage extends State implements OnChatMessage { color: Color(0xFFFF441A), ), child: RoundButton( - text:"99", + text: "99", textColor: Colors.white, fontWeight: MyFontWeight.regular, backgroup: Color(0xFFFF441A), fontSize: 10.sp, radius: 100, - )) - ], - ) - ], - )), + ), + ), + ], + ), + ], + ), + ), ], ), ); diff --git a/lib/main.dart b/lib/main.dart index e18e4e79..af51ef2f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,6 +15,7 @@ import 'package:huixiang/community/release_dynamic.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/home/founder_story_page.dart'; import 'package:huixiang/im/SocketClient.dart'; +import 'package:huixiang/im/database/hx_database.dart'; import 'package:huixiang/integral/integral_detailed_page.dart'; import 'package:huixiang/integral/integral_page.dart'; import 'package:huixiang/integral_store/integral_store_details_page.dart'; @@ -207,6 +208,8 @@ void main() async { // initSdk(); bool isFirst = sharedPreferences.getBool("isFirst"); + initDatabase(); + runApp(MyApp(locale, isFirst)); // FlutterBugly.postCatchedException((){ // }); @@ -215,7 +218,11 @@ void main() async { // final XgFlutterPlugin xgFlutterPlugin = XgFlutterPlugin(); +HxDatabase hxDatabase; +initDatabase() async { + hxDatabase = await $FloorHxDatabase.databaseBuilder('huixiang_database.db').build(); +} final SocketClient socketClient = new SocketClient(); EventBus eventBus = EventBus(sync: true); diff --git a/lib/main_page.dart b/lib/main_page.dart index d34d5aec..ba5f1400 100644 --- a/lib/main_page.dart +++ b/lib/main_page.dart @@ -68,6 +68,7 @@ class _MainPage extends State with WidgetsBindingObserver { @override void dispose() { super.dispose(); + socketClient.dispose(); WidgetsBinding.instance.removeObserver(this); } @@ -92,25 +93,9 @@ class _MainPage extends State with WidgetsBindingObserver { } } + //在主页面链接socket服务 connectSocket() async { - final socket = await Socket.connect('192.168.10.129', 9090); - - // 监听服务器响应 - socket.listen((Uint8List data) { - - print("123"); - Proto proto = Proto.fromBytes(data); - print("1234,$proto"); - MsgData data1 = MsgData.fromBuffer(proto.body); - print('收到来自:${data1.from},消息内容: ${utf8.decode(data1.data)} '); - - }, onDone: () { - print('Server closed connection'); - socket.destroy(); - }, onError: (error) { - print('Error: $error'); - socket.destroy(); - }); + socketClient.connect(); } @override diff --git a/lib/message/mine_message.dart b/lib/message/mine_message.dart index aace545f..2e8e6028 100644 --- a/lib/message/mine_message.dart +++ b/lib/message/mine_message.dart @@ -36,7 +36,8 @@ class _MineMessagePage extends State { spreadRadius: 0, ) ], - borderRadius: BorderRadius.circular(8.w)), + borderRadius: BorderRadius.circular(8.w), + ), child: ListView.builder( itemCount: 1, shrinkWrap: true, diff --git a/pubspec.lock b/pubspec.lock index ad880523..8c9cac60 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: ai_decimal_accuracy sha256: "2a0f195a0bf9f36e7481a66e03d5b1e4e90b4861438910d63e99e42ddcdebdbb" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" android_intent_plus: @@ -14,7 +14,7 @@ packages: description: name: android_intent_plus sha256: e49b4d9e26135dd7ef83606aac56bd3105345e8243de903939a15c5aa07cc0ec - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" args: @@ -22,7 +22,7 @@ packages: description: name: args sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.2" asn1lib: @@ -30,7 +30,7 @@ packages: description: name: asn1lib sha256: b74e3842a52c61f8819a1ec8444b4de5419b41a7465e69d4aa681445377398b0 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" async: @@ -38,7 +38,7 @@ packages: description: name: async sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.10.0" barcode: @@ -46,7 +46,7 @@ packages: description: name: barcode sha256: "6f4e44699843c336fcb4a14a4f4221f03d21ae47dd8c4ae4c25ffc7b7dd1cfb8" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" barcode_widget: @@ -54,7 +54,7 @@ packages: description: name: barcode_widget sha256: "4fb82c63a008972bc5f0ca83865bd3a5728f596c80f44658aefd7d55b6e65f45" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" boolean_selector: @@ -62,7 +62,7 @@ packages: description: name: boolean_selector sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" bubble_tab_indicator: @@ -70,7 +70,7 @@ packages: description: name: bubble_tab_indicator sha256: "0aa37980a00e3374d917f9da8e83acd7f59ba872a3d05c306220063f28f945aa" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.6" characters: @@ -78,7 +78,7 @@ packages: description: name: characters sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" charcode: @@ -86,7 +86,7 @@ packages: description: name: charcode sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" charts_common: @@ -94,7 +94,7 @@ packages: description: name: charts_common sha256: "7b8922f9b0d9b134122756a787dab1c3946ae4f3fc5022ff323ba0014998ea02" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.0" charts_flutter: @@ -102,7 +102,7 @@ packages: description: name: charts_flutter sha256: "4172c3f4b85322fdffe1896ffbed79ae4689ae72cb6fe6690dcaaea620a9c558" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.0" chewie: @@ -110,7 +110,7 @@ packages: description: name: chewie sha256: "90a75721f8cb881be0a38878b246183f69a0490e409f1d8f294b686b89a25f24" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.3" chewie_audio: @@ -118,7 +118,7 @@ packages: description: name: chewie_audio sha256: ac29d37382c4f0d9da8e6f53c78b3e74ffff102040b1e77c7e49e4fa35cd425f - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" clock: @@ -126,7 +126,7 @@ packages: description: name: clock sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" collection: @@ -134,7 +134,7 @@ packages: description: name: collection sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.17.0" convert: @@ -142,7 +142,7 @@ packages: description: name: convert sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.1" crypto: @@ -150,7 +150,7 @@ packages: description: name: crypto sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.3" csslib: @@ -158,7 +158,7 @@ packages: description: name: csslib sha256: "831883fb353c8bdc1d71979e5b342c7d88acfbc643113c14ae51e2442ea0f20f" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.17.3" cupertino_icons: @@ -166,7 +166,7 @@ packages: description: name: cupertino_icons sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.6" dio: @@ -174,7 +174,7 @@ packages: description: name: dio sha256: "11979099d9ea182d74b6734340704d628b99c7a8316f9edd7718a297d1bcdd27" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.10" emoji_picker_flutter: @@ -182,7 +182,7 @@ packages: description: name: emoji_picker_flutter sha256: a0e8b36a98ca2257b0edd9cb6ef5b4aa2a6fbf3ed67cf11eab96100778741b8a - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" encrypt: @@ -190,7 +190,7 @@ packages: description: name: encrypt sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.1" equatable: @@ -198,7 +198,7 @@ packages: description: name: equatable sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.5" event_bus: @@ -206,7 +206,7 @@ packages: description: name: event_bus sha256: "44baa799834f4c803921873e7446a2add0f3efa45e101a054b1f0ab9b95f8edc" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" fake_async: @@ -214,7 +214,7 @@ packages: description: name: fake_async sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" fast_gbk: @@ -222,7 +222,7 @@ packages: description: name: fast_gbk sha256: "3f0dc0309986f615404ea8d1fccf00a535dc00ee90b88d71492866bd95586489" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" ffi: @@ -230,7 +230,7 @@ packages: description: name: ffi sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" file: @@ -238,7 +238,7 @@ packages: description: name: file sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.4" fixnum: @@ -246,7 +246,7 @@ packages: description: name: fixnum sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" fl_chart: @@ -254,7 +254,7 @@ packages: description: name: fl_chart sha256: "48a1b69be9544e2b03d9a8e843affd89e43f3194c9248776222efcb4206bb1ec" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.62.0" flare_flutter: @@ -262,9 +262,25 @@ packages: description: name: flare_flutter sha256: "99d63c60f00fac81249ce6410ee015d7b125c63d8278a30da81edf3317a1f6a0" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" + floor: + dependency: "direct main" + description: + name: floor + sha256: "52a8eac2c8d274e7c0c54251226f59786bb5b749365a2d8537d8095aa5132d92" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.2" + floor_annotation: + dependency: transitive + description: + name: floor_annotation + sha256: fa3fa4f198cdd1d922a69ceb06e54663fe59256bf1cb3c036eff206b445a6960 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.2" flutter: dependency: "direct main" description: flutter @@ -275,7 +291,7 @@ packages: description: name: flutter_datetime_picker sha256: "8e695c63c769350e541951227c2775190ec73ceda774a315b1dc9a99d5facfe5" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.1" flutter_easyloading: @@ -283,7 +299,7 @@ packages: description: name: flutter_easyloading sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.5" flutter_html: @@ -291,7 +307,7 @@ packages: description: name: flutter_html sha256: ccb810fcabfce3a7ffaca46e458323915ac7e7fc59082c7357ff848972c02230 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" flutter_layout_grid: @@ -299,7 +315,7 @@ packages: description: name: flutter_layout_grid sha256: "86c1b21520612edfbb93f189b3ec05058470570f3a5c08ce10c92cc76a6e814e" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.6" flutter_localizations: @@ -312,7 +328,7 @@ packages: description: name: flutter_math_fork sha256: cfec964c4975c6becc64291eb9b782fe70df5e0c5bfe0763d9e856432fcc6fcd - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.2+2" flutter_page_indicator: @@ -320,7 +336,7 @@ packages: description: name: flutter_page_indicator sha256: a5b2992228c2827b69faed3977681a3f5c313c7f13d72272decbb2923d1d7176 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.3" flutter_pdfview: @@ -328,7 +344,7 @@ packages: description: name: flutter_pdfview sha256: a9055bf920c7095bf08c2781db431ba23577aa5da5a056a7152dc89a18fbec6f - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.2" flutter_screenutil: @@ -336,7 +352,7 @@ packages: description: name: flutter_screenutil sha256: c04bf2f9a41b5130c1071daa34acc04b5e4f479181287a958ece9b31a5b8f89c - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.0+1" flutter_slidable: @@ -344,7 +360,7 @@ packages: description: name: flutter_slidable sha256: "90787334388211e6810065550119b015e6fd3893584641194d500bf5bc7e6235" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.2" flutter_smart_dialog: @@ -352,7 +368,7 @@ packages: description: name: flutter_smart_dialog sha256: "0db3450d40de1664dbcb49cd82ebf4b1a3609b2510532ee122821a7dd5806b40" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.5.0" flutter_spinkit: @@ -360,7 +376,7 @@ packages: description: name: flutter_spinkit sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.2.1" flutter_staggered_grid_view: @@ -368,7 +384,7 @@ packages: description: name: flutter_staggered_grid_view sha256: f0b6d8c0fa7b4b444985cdde68492c0138a4fb6fc57a641b24cb234b7ee0f5c4 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.1" flutter_svg: @@ -376,7 +392,7 @@ packages: description: name: flutter_svg sha256: "9ac1967e2f72a08af11b05b39167920f90d043cf67163d13a544a358c8f31afa" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.22.0" flutter_swiper: @@ -384,7 +400,7 @@ packages: description: name: flutter_swiper sha256: e52a0e894abfa4099a5d4e5098a00597f3b55e25617cdd19e6fe6be5d24858c7 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.6" flutter_test: @@ -402,7 +418,7 @@ packages: description: name: fluwx sha256: e54837349819d51261be00692071db43fc1ff79dd06cf3a50175a5940249691e - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.9.0+2" font_awesome_flutter: @@ -410,7 +426,7 @@ packages: description: name: font_awesome_flutter sha256: "1f93e5799f0e6c882819e8393a05c6ca5226010f289190f2242ec19f3f0fdba5" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "9.2.0" geolocator: @@ -418,7 +434,7 @@ packages: description: name: geolocator sha256: "01fed879aa87185efebfb1d23de619077bcc7d83ffdebd0aad6f74392f84fb40" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.2.1" geolocator_platform_interface: @@ -426,7 +442,7 @@ packages: description: name: geolocator_platform_interface sha256: aa11c4cb9eb31f096ffc62cf54858f869bd437de327cba660577ddd594a8f3fa - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.9" geolocator_web: @@ -434,7 +450,7 @@ packages: description: name: geolocator_web sha256: "9a7f3c5061fb8fb26103fc67e07343eebd4d3b15d18c6d75766e2a1a8b0618f8" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" gradient_widgets: @@ -442,7 +458,7 @@ packages: description: name: gradient_widgets sha256: d337a8a329da9aefa50b82155d11875c1b9992982f65d15c805aa057a2670536 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.0" graphs: @@ -450,7 +466,7 @@ packages: description: name: graphs sha256: db4e50f399d69bf7349d4e99e8dabd74fad51c0574f36b8d3613ef465715af52 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" html: @@ -458,7 +474,7 @@ packages: description: name: html sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.15.4" http_parser: @@ -466,7 +482,7 @@ packages: description: name: http_parser sha256: "9d2b0626e9e402fc98e6868360da8f256064d6c0b8e4c3edcca5e02fb0b95da9" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.4" image_gallery_saver: @@ -474,7 +490,7 @@ packages: description: name: image_gallery_saver sha256: "0aba74216a4d9b0561510cb968015d56b701ba1bd94aace26aacdd8ae5761816" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" image_pickers: @@ -482,7 +498,7 @@ packages: description: name: image_pickers sha256: "3175436eec5136773230cf25bb0feba7e58bded93c6f4159bd4bae2b90b4c2d3" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" infinite_listview: @@ -490,7 +506,7 @@ packages: description: name: infinite_listview sha256: f6062c1720eb59be553dfa6b89813d3e8dd2f054538445aaa5edaddfa5195ce6 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" intl: @@ -498,7 +514,7 @@ packages: description: name: intl sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.17.0" js: @@ -506,7 +522,7 @@ packages: description: name: js sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.5" json_annotation: @@ -514,7 +530,7 @@ packages: description: name: json_annotation sha256: "6cec7404b25d6338c8cb7b30131cd6c760079a4ec1fa7846c55bdda91f9d2819" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.1" keframe: @@ -522,7 +538,7 @@ packages: description: name: keframe sha256: a84add1826c54cd68e6095dbcc00cdd84fd4d97820712bfc8e1d06f41b0bfac3 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" like_button: @@ -530,7 +546,7 @@ packages: description: name: like_button sha256: "08e6a45b78888412df5d351786c550205ad3a677e72a0820d5bbc0b063c8a463" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.5" logger: @@ -538,7 +554,7 @@ packages: description: name: logger sha256: "697d067c60c20999686a0add96cf6aba723b3aa1f83ecf806a8097231529ec32" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" logging: @@ -546,7 +562,7 @@ packages: description: name: logging sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" matcher: @@ -554,7 +570,7 @@ packages: description: name: matcher sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.13" material_color_utilities: @@ -562,7 +578,7 @@ packages: description: name: material_color_utilities sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" meta: @@ -570,7 +586,7 @@ packages: description: name: meta sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0" mqtt_client: @@ -578,7 +594,7 @@ packages: description: name: mqtt_client sha256: ba10ec490ded55dc4e77bbc992529d823fb15d0d5ec68c2895f960312060c541 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "9.8.1" nested: @@ -586,7 +602,7 @@ packages: description: name: nested sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" network_to_file_image: @@ -594,7 +610,7 @@ packages: description: name: network_to_file_image sha256: "47528730539abf61ea9b5edf30fe2803b5f8212b2049e1a6cb3b564acadc46dc" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.1" number_precision: @@ -602,7 +618,7 @@ packages: description: name: number_precision sha256: "397639f584cdd4fb5965e3b91c03b911b0c8fa9c5be7e7236bbf102bf6f75681" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2+1" numerus: @@ -610,7 +626,7 @@ packages: description: name: numerus sha256: "0087ef729d63b96cb347a9c44b9c592f21cecb3605b415bbd18710aef80ce5cb" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" package_info: @@ -618,7 +634,7 @@ packages: description: name: package_info sha256: "6c07d9d82c69e16afeeeeb6866fe43985a20b3b50df243091bfc4a4ad2b03b75" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" path: @@ -626,7 +642,7 @@ packages: description: name: path sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.2" path_drawing: @@ -634,7 +650,7 @@ packages: description: name: path_drawing sha256: "3bdd251dae9ffaef944450b73f168610db7e968e7b20daf0c3907f8b4aafc8a2" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.1+1" path_parsing: @@ -642,7 +658,7 @@ packages: description: name: path_parsing sha256: ee5c47c1058ad66b4a41746ec3996af9593d0858872807bcd64ac118f0700337 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1" path_provider: @@ -650,7 +666,7 @@ packages: description: name: path_provider sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.11" path_provider_android: @@ -658,7 +674,7 @@ packages: description: name: path_provider_android sha256: "1667b3926378bba6bbd1c8c4ddd68fab6a2825f27a285bd55370c1b12f21440a" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.9" path_provider_ios: @@ -666,7 +682,7 @@ packages: description: name: path_provider_ios sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.11" path_provider_linux: @@ -674,7 +690,7 @@ packages: description: name: path_provider_linux sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.11" path_provider_macos: @@ -682,7 +698,7 @@ packages: description: name: path_provider_macos sha256: "4e9a9637dfeba8c35f598238c63adc6e77121b16d81ae97ad21b952a67c83a64" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" path_provider_platform_interface: @@ -690,7 +706,7 @@ packages: description: name: path_provider_platform_interface sha256: "2e14fc474b8acfc4111ac8eb0e37c2fe70234f9f8cd796f1560d03aa1689fa51" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" path_provider_windows: @@ -698,7 +714,7 @@ packages: description: name: path_provider_windows sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.7" permission_handler: @@ -706,7 +722,7 @@ packages: description: name: permission_handler sha256: fb4666087528b1cbf91d98771cf50b14f36f4d8756ec7e7a8629dd3cb55442b7 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.0+2" permission_handler_platform_interface: @@ -714,7 +730,7 @@ packages: description: name: permission_handler_platform_interface sha256: f7e3c798f7c4dd215e4ca8843695b3a63a5b79c9aa04f296d316f13a15d518ba - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" petitparser: @@ -722,7 +738,7 @@ packages: description: name: petitparser sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.0" photo_view: @@ -730,7 +746,7 @@ packages: description: name: photo_view sha256: "26cb153080a2673bebccaf72d3283e82f8f41a47fe5f9bc5ba8634d2e8a9fc8e" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.13.0" pin_input_text_field: @@ -738,7 +754,7 @@ packages: description: name: pin_input_text_field sha256: f45683032283d30b670ec343781660655e3e1953438b281a0bc6e2d358486236 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "4.5.2" platform: @@ -746,7 +762,7 @@ packages: description: name: platform sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.3" plugin_platform_interface: @@ -754,7 +770,7 @@ packages: description: name: plugin_platform_interface sha256: c3ebbff365bfb1b5f7b690c9857d2dabea167f35b05eb7586186499b407efb37 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.3" pointycastle: @@ -762,7 +778,7 @@ packages: description: name: pointycastle sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.7.3" protobuf: @@ -770,7 +786,7 @@ packages: description: name: protobuf sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" provider: @@ -778,7 +794,7 @@ packages: description: name: provider sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.2" pull_to_refresh: @@ -786,7 +802,7 @@ packages: description: name: pull_to_refresh sha256: bbadd5a931837b57739cf08736bea63167e284e71fb23b218c8c9a6e042aad12 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" qr: @@ -794,7 +810,7 @@ packages: description: name: qr sha256: "5c4208b4dc0d55c3184d10d83ee0ded6212dc2b5e2ba17c5a0c0aab279128d21" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" qr_flutter: @@ -802,7 +818,7 @@ packages: description: name: qr_flutter sha256: c5c121c54cb6dd837b9b9d57eb7bc7ec6df4aee741032060c8833a678c80b87e - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" quiver: @@ -810,7 +826,7 @@ packages: description: name: quiver sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.2" retrofit: @@ -818,7 +834,7 @@ packages: description: name: retrofit sha256: bd4d2817ecb01cdf7ce6d7de62a44716639e82e6b62bd295984c12eb916fb341 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.4+1" rive: @@ -826,7 +842,7 @@ packages: description: name: rive sha256: cf420a4440bc072698432bd176e70c70cbec01b8c1debe5c56edf2a19b310fbf - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.8" rxdart: @@ -834,7 +850,7 @@ packages: description: name: rxdart sha256: "2ef8b4e91cb3b55d155e0e34eeae0ac7107974e451495c955ac04ddee8cc21fd" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.26.0" scan: @@ -842,7 +858,7 @@ packages: description: name: scan sha256: b343ec36f863a88d41eb4c174b810c055c6bd1f1822b2188ab31aab684fb7cdb - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.6.0" shared_preferences: @@ -850,7 +866,7 @@ packages: description: name: shared_preferences sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.20" shared_preferences_android: @@ -858,7 +874,7 @@ packages: description: name: shared_preferences_android sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.17" shared_preferences_foundation: @@ -866,7 +882,7 @@ packages: description: name: shared_preferences_foundation sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" shared_preferences_linux: @@ -874,7 +890,7 @@ packages: description: name: shared_preferences_linux sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" shared_preferences_platform_interface: @@ -882,7 +898,7 @@ packages: description: name: shared_preferences_platform_interface sha256: "992f0fdc46d0a3c0ac2e5859f2de0e577bbe51f78a77ee8f357cbe626a2ad32d" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" shared_preferences_web: @@ -890,7 +906,7 @@ packages: description: name: shared_preferences_web sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.6" shared_preferences_windows: @@ -898,7 +914,7 @@ packages: description: name: shared_preferences_windows sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" sharesdk_plugin: @@ -906,7 +922,7 @@ packages: description: name: sharesdk_plugin sha256: a1a18d01f362c119df1931082e3694591a24b3b00eef2576522e00ef8da3b25e - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.10" shimmer: @@ -914,7 +930,7 @@ packages: description: name: shimmer sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" simple_gesture_detector: @@ -922,7 +938,7 @@ packages: description: name: simple_gesture_detector sha256: "7ab8ee2027f4323a1574e9eeda55d4279ae499190e119d6b872b3a52b501eb42" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.6" sky_engine: @@ -935,15 +951,55 @@ packages: description: name: source_span sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.1" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.8+4" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "8f7603f3f8f126740bc55c4ca2d1027aab4b74a1267a3e31ce51fe40e3b65b8f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.4.5+1" + sqflite_common_ffi: + dependency: transitive + description: + name: sqflite_common_ffi + sha256: f86de82d37403af491b21920a696b19f01465b596f545d1acd4d29a0a72418ad + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.5" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "281b672749af2edf259fc801f0fcba092257425bcd32a0ce1c8237130bc934c7" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.11.2" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "91f47610aa54d8abf9d795a7b4e49b2a788f65d7493d5a68fbf180c3cbcc6f38" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.27.0" stack_trace: dependency: transitive description: name: stack_trace sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.11.0" steel_crypt: @@ -951,7 +1007,7 @@ packages: description: name: steel_crypt sha256: "4f86a8ddc690ed1adff486faeb4ceece9e09f59cd90c8bd7e2ff48c42ca271dd" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0+1" stream_channel: @@ -959,7 +1015,7 @@ packages: description: name: stream_channel sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" string_scanner: @@ -967,7 +1023,7 @@ packages: description: name: string_scanner sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" syncfusion_flutter_core: @@ -975,7 +1031,7 @@ packages: description: name: syncfusion_flutter_core sha256: "9be1bb9bbdb42823439a18da71484f1964c14dbe1c255ab1b931932b12fa96e8" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "19.4.56" syncfusion_flutter_datepicker: @@ -983,15 +1039,23 @@ packages: description: name: syncfusion_flutter_datepicker sha256: ff428c4e2ebd753c2f8f3b2aa60e96e014c9ca2653ce7007c7a603e560973f34 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "19.4.56" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.0" table_calendar: dependency: "direct main" description: name: table_calendar sha256: "82dc932c6e07af6e7eeafb2c91e87969746f3b9b59ac222ecf8d75f51c3a4844" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.3" term_glyph: @@ -999,7 +1063,7 @@ packages: description: name: term_glyph sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" test_api: @@ -1007,7 +1071,7 @@ packages: description: name: test_api sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.16" tobias: @@ -1015,7 +1079,7 @@ packages: description: name: tobias sha256: "61b35145cdebde36da7a54d211d807a3cb1681c50456d40495fa7109dddd7a44" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" tpns_flutter_plugin: @@ -1032,7 +1096,7 @@ packages: description: name: transformer_page_view sha256: "2210531bc4148831061c575070173f32693415be8bbbf5bd2159a38f2adff61c" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.6" tuple: @@ -1040,7 +1104,7 @@ packages: description: name: tuple sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" typed_data: @@ -1048,7 +1112,7 @@ packages: description: name: typed_data sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.2" umeng_common_sdk: @@ -1056,7 +1120,7 @@ packages: description: name: umeng_common_sdk sha256: "60d7ac8093d42e236dbecb5fc8558b16644808a70d24514ad926be7ddf56d5e9" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.7" url_launcher: @@ -1064,7 +1128,7 @@ packages: description: name: url_launcher sha256: e1e0c46fcd777c0f0bd7f4541b747c28ad4e925f93344cebf667ef76c695533a - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.7.10" url_launcher_linux: @@ -1072,7 +1136,7 @@ packages: description: name: url_launcher_linux sha256: c489023cdd864a19c0be63bb3796bec21ea4bc16bfe09568953f1828e02151c9 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.1+4" url_launcher_macos: @@ -1080,7 +1144,7 @@ packages: description: name: url_launcher_macos sha256: be04eac5076414469027ce068c360478c3e56e43205bb7efaaa61cbdd3ba890d - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.1+9" url_launcher_platform_interface: @@ -1088,7 +1152,7 @@ packages: description: name: url_launcher_platform_interface sha256: c6bd00f46e8c348703d0ae691850eb2052be8e1338dc3ae6f72af53b962da157 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.9" url_launcher_web: @@ -1096,7 +1160,7 @@ packages: description: name: url_launcher_web sha256: eaa6de8ac353681794533edcedd69dd8b39ed987bf2360d172185eff8283dbc2 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.5+3" url_launcher_windows: @@ -1104,7 +1168,7 @@ packages: description: name: url_launcher_windows sha256: "034479b1dafd8f01de81267d8117eb5ae019e0dddcc23f4b14ed31253a2635d9" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.1+3" vector_math: @@ -1112,7 +1176,7 @@ packages: description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" video_player: @@ -1120,7 +1184,7 @@ packages: description: name: video_player sha256: "743b57d45251101344057d3b886a5f9a4fbb3eb3e275ac8bb64c3a7fa0c79d4c" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.19" video_player_android: @@ -1128,7 +1192,7 @@ packages: description: name: video_player_android sha256: b41889c6bc9eaf51790863885349fb5ff8edef2da940291a2da96b80dd649686 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.4" video_player_avfoundation: @@ -1136,7 +1200,7 @@ packages: description: name: video_player_avfoundation sha256: "90468226c8687adf7b567d9bb42c25588783c4d30509af1fbd663b2dd049f700" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.2" video_player_platform_interface: @@ -1144,7 +1208,7 @@ packages: description: name: video_player_platform_interface sha256: a1d56477752271a7a0de872d8962bce1dd5fecf463beaf66da417ebebb9ba0f7 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "4.2.0" video_player_web: @@ -1152,7 +1216,7 @@ packages: description: name: video_player_web sha256: fb3bbeaf0302cb0c31340ebd6075487939aa1fe3b379d1a8784ef852b679940e - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.15" visibility_detector: @@ -1160,7 +1224,7 @@ packages: description: name: visibility_detector sha256: "15c54a459ec2c17b4705450483f3d5a2858e733aee893dcee9d75fd04814940d" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.3" wakelock: @@ -1168,7 +1232,7 @@ packages: description: name: wakelock sha256: "769ecf42eb2d07128407b50cb93d7c10bd2ee48f0276ef0119db1d25cc2f87db" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.2" wakelock_macos: @@ -1176,7 +1240,7 @@ packages: description: name: wakelock_macos sha256: "047c6be2f88cb6b76d02553bca5a3a3b95323b15d30867eca53a19a0a319d4cd" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.0" wakelock_platform_interface: @@ -1184,7 +1248,7 @@ packages: description: name: wakelock_platform_interface sha256: "1f4aeb81fb592b863da83d2d0f7b8196067451e4df91046c26b54a403f9de621" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.0" wakelock_web: @@ -1192,7 +1256,7 @@ packages: description: name: wakelock_web sha256: "1b256b811ee3f0834888efddfe03da8d18d0819317f20f6193e2922b41a501b5" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.0" wakelock_windows: @@ -1200,7 +1264,7 @@ packages: description: name: wakelock_windows sha256: "857f77b3fe6ae82dd045455baa626bc4b93cb9bb6c86bf3f27c182167c3a5567" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1" webview_flutter: @@ -1208,7 +1272,7 @@ packages: description: name: webview_flutter sha256: "15900bc32e210fc5a87b08e65473c45ff4fa0ed707f05a84ea2547aaf1d2cfc7" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.14" widgetpicker: @@ -1216,7 +1280,7 @@ packages: description: name: widgetpicker sha256: "1ab0ef91a279d0dfbbddc6d2b0c2624ea02b8ab7030d51d27d97dad2a1233a15" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.1" win32: @@ -1224,7 +1288,7 @@ packages: description: name: win32 sha256: a6f0236dbda0f63aa9a25ad1ff9a9d8a4eaaa5012da0dc59d21afdb1dc361ca4 - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.4" xdg_directories: @@ -1232,7 +1296,7 @@ packages: description: name: xdg_directories sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.3" xml: @@ -1240,7 +1304,7 @@ packages: description: name: xml sha256: "80d494c09849dc3f899d227a78c30c5b949b985ededf884cb3f3bcd39f4b447a" - url: "https://mirrors.cloud.tencent.com/dart-pub/" + url: "https://pub.flutter-io.cn" source: hosted version: "5.4.1" sdks: diff --git a/pubspec.yaml b/pubspec.yaml index 162508dc..ade313dd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -123,7 +123,7 @@ dependencies: flutter_datetime_picker: ^1.5.1 widgetpicker: ^0.1.1 - + floor: ^1.4.2 syncfusion_flutter_datepicker: ^19.4.38 protobuf: ^3.1.0