From b409cbb05339ea0a9dc1fe50628595fde3ef24c8 Mon Sep 17 00:00:00 2001 From: lyming99 <36320663+lyming99@users.noreply.github.com> Date: Mon, 27 May 2024 22:33:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E5=AD=98=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E5=8A=A0=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 20 +++- .../card/study/mobile_study_controller.dart | 2 + .../mobile_user_forget_password_page.dart | 21 ---- .../view/user/mobile_user_info_header.dart | 15 +-- .../view/user/mobile_user_login_page.dart | 21 ---- .../mobile/view/user/mobile_user_page.dart | 39 +------ .../view/user/mobile_user_sign_page.dart | 21 ---- .../card/win_card_set_controller.dart | 4 + .../card/win_card_study_controller.dart | 2 + .../doc/win_doc_list_controller.dart | 4 + .../view/card/win_card_set_config_tab.dart | 6 +- .../windows/view/card/win_card_set_page.dart | 22 ++++ .../view/card/win_create_card_dialog.dart | 44 ++++---- .../windows/view/doc/win_doc_list_view.dart | 7 ++ lib/app/windows/view/home/win_home_page.dart | 2 +- .../windows/view/today/win_today_page.dart | 100 +++++++++++------- lib/commons/util/mehod_time_record.dart | 3 +- lib/config/app_constants.dart | 4 +- .../sync/impl/doc_sync_service_impl.dart | 6 ++ .../sync/impl/record_sync_service_impl.dart | 47 ++++---- 20 files changed, 182 insertions(+), 208 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index de098c9..458861a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -20,7 +20,13 @@ def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } - +def keyProperties = new Properties() +def keyPropertiesFile = rootProject.file('key.properties') +if (keyPropertiesFile.exists()) { + keyPropertiesFile.withReader('UTF-8') { reader -> + keyProperties.load(reader) + } +} apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" @@ -52,13 +58,23 @@ android { targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName + signingConfigs { + release { + keyAlias keyProperties.getProperty('keyAlias') + keyPassword keyProperties.getProperty('keyPassword') + storeFile file(keyProperties.getProperty('storeFile')) + storePassword keyProperties.getProperty('storePassword') + v1SigningEnabled true + v2SigningEnabled true + } + } } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug + signingConfig signingConfigs.release } } } diff --git a/lib/app/mobile/view/card/study/mobile_study_controller.dart b/lib/app/mobile/view/card/study/mobile_study_controller.dart index 94ec6c6..0050b49 100644 --- a/lib/app/mobile/view/card/study/mobile_study_controller.dart +++ b/lib/app/mobile/view/card/study/mobile_study_controller.dart @@ -259,6 +259,8 @@ class MobileStudyController extends ServiceManagerController { playCount = 3; } else if (playMode == PlayTtsMode.playAll.name) { playCount = 100000000; + } else if (playMode == PlayTtsMode.none.name) { + playCount = 0; } else { playCount = 1; } diff --git a/lib/app/mobile/view/user/mobile_user_forget_password_page.dart b/lib/app/mobile/view/user/mobile_user_forget_password_page.dart index f7240a2..f582456 100644 --- a/lib/app/mobile/view/user/mobile_user_forget_password_page.dart +++ b/lib/app/mobile/view/user/mobile_user_forget_password_page.dart @@ -169,27 +169,6 @@ class MobileUserForgetPasswordPage "assets/images/app_logo.png", ), ), - Container( - alignment: Alignment.topLeft, - width: 60, - height: 60, - child: Container( - padding: EdgeInsets.symmetric( - horizontal: 4, - ), - decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(4), - ), - child: Text( - "预览版", - style: TextStyle( - fontSize: 10, - color: Colors.white, - ), - ), - ), - ) ], ); } diff --git a/lib/app/mobile/view/user/mobile_user_info_header.dart b/lib/app/mobile/view/user/mobile_user_info_header.dart index 0c26451..8b7f103 100644 --- a/lib/app/mobile/view/user/mobile_user_info_header.dart +++ b/lib/app/mobile/view/user/mobile_user_info_header.dart @@ -82,20 +82,7 @@ class MobileUserHeaderWidget extends MvcView { SizedBox( width: 4, ), - Container( - decoration: BoxDecoration( - color: Colors.grey, - borderRadius: BorderRadius.circular(4), - ), - padding: EdgeInsets.symmetric(horizontal: 2), - child: Text( - "预览版", - style: TextStyle( - fontSize: 11, - color: Colors.white, - ), - ), - ), + ], ), SizedBox( diff --git a/lib/app/mobile/view/user/mobile_user_login_page.dart b/lib/app/mobile/view/user/mobile_user_login_page.dart index 5d3fc89..3271596 100644 --- a/lib/app/mobile/view/user/mobile_user_login_page.dart +++ b/lib/app/mobile/view/user/mobile_user_login_page.dart @@ -55,27 +55,6 @@ class MobileUserLoginPage extends MvcView { "assets/images/app_logo.png", ), ), - Container( - alignment: Alignment.topLeft, - width: 60, - height: 60, - child: Container( - padding: EdgeInsets.symmetric( - horizontal: 4, - ), - decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(4), - ), - child: Text( - "预览版", - style: TextStyle( - fontSize: 10, - color: Colors.white, - ), - ), - ), - ) ], ), SizedBox( diff --git a/lib/app/mobile/view/user/mobile_user_page.dart b/lib/app/mobile/view/user/mobile_user_page.dart index de5483e..92fc703 100644 --- a/lib/app/mobile/view/user/mobile_user_page.dart +++ b/lib/app/mobile/view/user/mobile_user_page.dart @@ -45,43 +45,6 @@ class MobileUserPage extends MvcView { Widget buildMenu(BuildContext context) { return Column( children: [ - // 会员 - buildMenuGroup( - context, - ListTile.divideTiles(context: context, tiles: [ - // fluent.FluentIcons.crown, - ListTile( - tileColor: MobileTheme.of(context).mobileNavBgColor, - leading: Icon( - fluent.FluentIcons.info, - size: 24, - ), - title: Text("预览版"), - trailing: Icon(Icons.arrow_forward_ios_outlined), - onTap: () { - // controller.openBakView(context); - // controller.openLifelongLearningPage(); - showDialog( - context: context, - builder: (context) { - return fluent.ContentDialog( - constraints: BoxConstraints(maxWidth: 300,), - content: Text("预览版,有些功能可能无法正常使用,不过可以加QQ群(568359924)反馈你想要用的功能~"), - title: Text("预览版"), - actions: [ - fluent.FilledButton( - onPressed: () { - context.pop(); - }, - child: Text("知道了"), - ) - ], - ); - }); - }, - ), - ]), - ), //关于 buildMenuGroup( context, @@ -139,7 +102,7 @@ class MobileUserPage extends MvcView { showAboutDialog( context: context, applicationName: "温知笔记", - applicationVersion: "1.0.beta(预览版)", + applicationVersion: "1.0", applicationIcon: SizedBox( width: 60, height: 60, diff --git a/lib/app/mobile/view/user/mobile_user_sign_page.dart b/lib/app/mobile/view/user/mobile_user_sign_page.dart index 17833b0..5c3a102 100644 --- a/lib/app/mobile/view/user/mobile_user_sign_page.dart +++ b/lib/app/mobile/view/user/mobile_user_sign_page.dart @@ -55,27 +55,6 @@ class MobileUserSignPage extends MvcView { "assets/images/app_logo.png", ), ), - Container( - alignment: Alignment.topLeft, - width: 60, - height: 60, - child: Container( - padding: EdgeInsets.symmetric( - horizontal: 4, - ), - decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(4), - ), - child: Text( - "预览版", - style: TextStyle( - fontSize: 10, - color: Colors.white, - ), - ), - ), - ) ], ), SizedBox( diff --git a/lib/app/windows/controller/card/win_card_set_controller.dart b/lib/app/windows/controller/card/win_card_set_controller.dart index 88246dd..1c9ebba 100644 --- a/lib/app/windows/controller/card/win_card_set_controller.dart +++ b/lib/app/windows/controller/card/win_card_set_controller.dart @@ -49,6 +49,10 @@ class WinCardSetController extends ServiceManagerController { cardSetSubscription?.cancel(); } + void refresh() { + fetchData(); + } + Future fetchData() async { var cardSets = await cardSetService.queryCardSetList(); var showItems = []; diff --git a/lib/app/windows/controller/card/win_card_study_controller.dart b/lib/app/windows/controller/card/win_card_study_controller.dart index e77e272..65db6b8 100644 --- a/lib/app/windows/controller/card/win_card_study_controller.dart +++ b/lib/app/windows/controller/card/win_card_study_controller.dart @@ -271,6 +271,8 @@ class WinCardStudyController extends WinEditTabController { playCount = 3; } else if (playMode == PlayTtsMode.playAll.name) { playCount = 100000000; + } else if (playMode == PlayTtsMode.none.name) { + playCount = 0; } else { playCount = 1; } diff --git a/lib/app/windows/controller/doc/win_doc_list_controller.dart b/lib/app/windows/controller/doc/win_doc_list_controller.dart index 135f5fa..1f19a44 100644 --- a/lib/app/windows/controller/doc/win_doc_list_controller.dart +++ b/lib/app/windows/controller/doc/win_doc_list_controller.dart @@ -187,6 +187,10 @@ class WinDocListController extends ServiceManagerController { docListService.moveToDir(dir, list.map((e) => e.doc ?? e.dir).toList()); } + void refresh(){ + searchDoc(docPageController.searchContent.value); + } + Future searchDoc(String text) async { searchTask?.cancel = true; searchResultList.clear(); diff --git a/lib/app/windows/view/card/win_card_set_config_tab.dart b/lib/app/windows/view/card/win_card_set_config_tab.dart index 643b55a..9c53da6 100644 --- a/lib/app/windows/view/card/win_card_set_config_tab.dart +++ b/lib/app/windows/view/card/win_card_set_config_tab.dart @@ -2,17 +2,17 @@ import 'package:fluent_ui/fluent_ui.dart' as fluent; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:wenznote/app/windows/controller/card/win_card_set_config_tab_controller.dart'; +import 'package:wenznote/commons/mvc/view.dart'; import 'package:wenznote/editor/theme/theme.dart'; import 'package:wenznote/editor/widget/drop_menu.dart'; import 'package:wenznote/editor/widget/toggle_item.dart'; import 'package:window_manager/window_manager.dart'; -class WinCardSetConfigTab extends StatelessWidget { - final WinCardSetConfigTabController controller; +class WinCardSetConfigTab extends MvcView { const WinCardSetConfigTab({ super.key, - required this.controller, + required super.controller, }); @override diff --git a/lib/app/windows/view/card/win_card_set_page.dart b/lib/app/windows/view/card/win_card_set_page.dart index ffb7754..3cbe12a 100644 --- a/lib/app/windows/view/card/win_card_set_page.dart +++ b/lib/app/windows/view/card/win_card_set_page.dart @@ -17,6 +17,28 @@ class WinCardSetPage extends MvcView { child: Column( children: [ buildSearch(context), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(right: 8.0), + child: Icon( + Icons.folder, + color: Colors.grey, + ), + ), + Expanded(child: fluent.Text("我的卡片")), + // 刷新按钮 + fluent.IconButton( + icon: Icon(Icons.refresh,size: 16,), + onPressed: () { + controller.refresh(); + }, + ), + ], + ), + ), Expanded(child: buildContent(context)), ], ), diff --git a/lib/app/windows/view/card/win_create_card_dialog.dart b/lib/app/windows/view/card/win_create_card_dialog.dart index c5acf56..1fbe0a9 100644 --- a/lib/app/windows/view/card/win_create_card_dialog.dart +++ b/lib/app/windows/view/card/win_create_card_dialog.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:fluent_ui/fluent_ui.dart' as fluent; import 'package:flutter/material.dart'; import 'package:future_progress_dialog/future_progress_dialog.dart'; +import 'package:get/get.dart'; import 'package:wenznote/editor/block/element/element.dart'; import 'package:wenznote/editor/block/text/text.dart'; import 'package:wenznote/editor/crdt/doc_utils.dart'; @@ -16,20 +17,7 @@ import 'package:uuid/uuid.dart'; void showGenerateCardDialog( BuildContext context, String cardName, List docList) async { List cats = ["标题1", "标题2", "标题3", "标题4", "标题5", "标题6"]; - String? spliteTitle = "标题2"; - var box = fluent.ComboBox( - value: "标题2", - items: cats.map>((e) { - return fluent.ComboBoxItem( - child: Text(e), - value: e, - ); - }).toList(), - onChanged: (val) { - spliteTitle = val; - }, - placeholder: const Text('Select a cat breed'), - ); + var splitTitle = "标题2".obs; var cardNameController = TextEditingController(text: cardName); showDialog( context: context, @@ -48,7 +36,22 @@ void showGenerateCardDialog( Row( children: [ Text("分割类型: "), - Expanded(child: box), + Expanded( + child: Obx( + () => fluent.ComboBox( + placeholder: Text("请选择分割类型 "), + value: splitTitle.value, + items: cats.map>((e) { + return fluent.ComboBoxItem( + child: Text(e), + value: e, + ); + }).toList(), + onChanged: (val) { + splitTitle.value = val ?? ""; + }, + ), + )), ], ), SizedBox( @@ -86,8 +89,11 @@ void showGenerateCardDialog( builder: (context) => FutureProgressDialog( message: const Text("正在生成中..."), () async { - await _generateCard(context, cardNameController.text, - docList, spliteTitle); + await _generateCard( + context, + cardNameController.text, + docList, + splitTitle.value); }(), )); }, @@ -159,7 +165,7 @@ Future _generateCard( } await createCard(serviceManager.cardService, cardSet, saveList, current); if (saveList.isNotEmpty) { - await serviceManager.cardService.insertCards(cardSet.uuid,saveList); + await serviceManager.cardService.insertCards(cardSet.uuid, saveList); saveList.clear(); } } @@ -180,7 +186,7 @@ Future createCard(CardService cardService, CardSetPO set, updateTime: DateTime.now().millisecondsSinceEpoch, )); if (saveList.length > 1000) { - await cardService.insertCards(set.uuid,saveList); + await cardService.insertCards(set.uuid, saveList); saveList.clear(); } } diff --git a/lib/app/windows/view/doc/win_doc_list_view.dart b/lib/app/windows/view/doc/win_doc_list_view.dart index cd533d6..9681867 100644 --- a/lib/app/windows/view/doc/win_doc_list_view.dart +++ b/lib/app/windows/view/doc/win_doc_list_view.dart @@ -37,6 +37,13 @@ class WinDocListView extends MvcView { ), ), Expanded(child: buildPath(context)), + // 刷新按钮 + fluent.IconButton( + icon: Icon(Icons.refresh,size: 16,), + onPressed: () { + controller.refresh(); + }, + ), ], ), ), diff --git a/lib/app/windows/view/home/win_home_page.dart b/lib/app/windows/view/home/win_home_page.dart index 93d7baa..4b08148 100644 --- a/lib/app/windows/view/home/win_home_page.dart +++ b/lib/app/windows/view/home/win_home_page.dart @@ -532,7 +532,7 @@ class WinHomePage extends MvcView { showAboutDialog( context: context, applicationName: "温知笔记", - applicationVersion: "1.0.beta(预览版)", + applicationVersion: "1.0", applicationIcon: SizedBox( width: 60, height: 60, diff --git a/lib/app/windows/view/today/win_today_page.dart b/lib/app/windows/view/today/win_today_page.dart index cc9a37f..cca0800 100644 --- a/lib/app/windows/view/today/win_today_page.dart +++ b/lib/app/windows/view/today/win_today_page.dart @@ -1,5 +1,7 @@ import 'package:fluent_ui/fluent_ui.dart' as fluent; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:get/get.dart'; import 'package:wenznote/app/windows/controller/home/win_home_controller.dart'; import 'package:wenznote/app/windows/model/today/search_result_vo.dart'; @@ -196,49 +198,65 @@ class WinTodayPage extends MvcView { controller.tabBarController = tabController; return Material( color: Colors.transparent, - child: Align( - alignment: Alignment.topLeft, - child: TabBar( - padding: EdgeInsets.zero, - controller: controller.tabBarController, - labelColor: theme.resources.textFillColorPrimary, - labelPadding: const EdgeInsets.symmetric(horizontal: 16,), - isScrollable: true, - tabAlignment: TabAlignment.start, - onTap: (index) { - switch (index) { - case 0: - controller.noteType.value = [ - NoteType.note, - NoteType.doc, - NoteType.dayNote, - ]; - break; - case 1: - controller.noteType.value = [ - NoteType.note, - ]; - break; - case 2: - controller.noteType.value = [ - NoteType.doc, - ]; - break; - } - }, - tabs: [ - Tab( - text: "全部", - ), - Tab( - text: "便签", + child: Row( + children: [ + Expanded( + child: Align( + alignment: Alignment.topLeft, + child: TabBar( + padding: EdgeInsets.zero, + controller: controller.tabBarController, + labelColor: theme.resources.textFillColorPrimary, + labelPadding: const EdgeInsets.symmetric(horizontal: 16,), + isScrollable: true, + tabAlignment: TabAlignment.start, + onTap: (index) { + switch (index) { + case 0: + controller.noteType.value = [ + NoteType.note, + NoteType.doc, + NoteType.dayNote, + ]; + break; + case 1: + controller.noteType.value = [ + NoteType.note, + ]; + break; + case 2: + controller.noteType.value = [ + NoteType.doc, + ]; + break; + } + }, + tabs: [ + Tab( + text: "全部", + ), + Tab( + text: "便签", + ), + Tab( + text: "笔记", + ), + + ], + ), ), - Tab( - text: "笔记", + ), + //刷新按钮 + fluent.IconButton( + icon: const Icon( + Icons.refresh, + size: 16, ), - - ], - ), + onPressed: () { + controller.startSearchTask(); + }, + ), + ], ), ); }), diff --git a/lib/commons/util/mehod_time_record.dart b/lib/commons/util/mehod_time_record.dart index 9b9da7d..6baa6d3 100644 --- a/lib/commons/util/mehod_time_record.dart +++ b/lib/commons/util/mehod_time_record.dart @@ -12,7 +12,8 @@ extension MethodTimeRecord on Object { printLog("[$logTitle] start."); var dateStart = DateTime.now(); try { - return await synchronized(computation, timeout: timeout); + var result = await synchronized(computation, timeout: timeout); + return result; } finally { var dateEnd = DateTime.now(); printLog( diff --git a/lib/config/app_constants.dart b/lib/config/app_constants.dart index 5efa597..df50ed8 100644 --- a/lib/config/app_constants.dart +++ b/lib/config/app_constants.dart @@ -1,6 +1,6 @@ class AppConstants { - // static const String apiUrl = "http://api.wenznote.com:8080"; - static const String apiUrl = "http://127.0.0.1:8080"; + static const String apiUrl = "http://api.wenznote.com:8080"; + // static const String apiUrl = "http://127.0.0.1:8080"; static const String debugApiUrl = "http://127.0.0.1:8080"; static const String success = "success"; diff --git a/lib/service/sync/impl/doc_sync_service_impl.dart b/lib/service/sync/impl/doc_sync_service_impl.dart index 66e3c66..ad60cdd 100644 --- a/lib/service/sync/impl/doc_sync_service_impl.dart +++ b/lib/service/sync/impl/doc_sync_service_impl.dart @@ -20,6 +20,7 @@ class DocSyncServiceImpl implements DocSyncService { Map queryDeltaTimeRecord = {}; Map downloadDocFileTimeRecord = {}; Timer? _downloadTimer; + bool _isFirstSync = false; final _downloadLock = {}; @@ -27,6 +28,7 @@ class DocSyncServiceImpl implements DocSyncService { @override void startDownloadTimer() { + _isFirstSync=true; stopDownloadTimer(); _downloadTimer = Timer.periodic(const Duration(minutes: 5), (timer) { _downloadDocTask(); @@ -52,6 +54,10 @@ class DocSyncServiceImpl implements DocSyncService { .map((e) => e.updateTime) .reduce((value, element) => max(value, element)); await writeDocUpdateTime(updateTime); + if(_isFirstSync){ + _isFirstSync=false; + serviceManager.docService.notifyListeners(); + } } Future readDocUpdateTime() async { diff --git a/lib/service/sync/impl/record_sync_service_impl.dart b/lib/service/sync/impl/record_sync_service_impl.dart index e6c6337..6ea45f3 100644 --- a/lib/service/sync/impl/record_sync_service_impl.dart +++ b/lib/service/sync/impl/record_sync_service_impl.dart @@ -282,24 +282,27 @@ class RecordSyncServiceImpl extends RecordSyncService { if (pullAll) { pullLock = pullAllLock; } + return pullLock.synchronizedWithLog(() async { try { /** * 1.获取 client states 数据 */ - var dataList = await documentIsar.dbDeltas.where().findAll(); + var allDataList = await documentIsar.dbDeltas.where().findAll(); + var uploadList = allDataList; if (dataIdList != null) { - dataList - .removeWhere((element) => !dataIdList.contains(element.dataId)); + uploadList = allDataList + .where((element) => !dataIdList.contains(element.dataId)) + .toList(); } var clientMap = HashMap(); - for (var value in dataList) { - var clientId = value.clientId; + for (var uploadItem in uploadList) { + var clientId = uploadItem.clientId; if (clientId == null) { continue; } var old = clientMap[clientId]; - var newValue = value.updateTime ?? 0; + var newValue = uploadItem.updateTime ?? 0; if (old == null || newValue > old) { clientMap[clientId] = newValue; } @@ -327,7 +330,7 @@ class RecordSyncServiceImpl extends RecordSyncService { clientStates: clientStates, dataIdList: dataIdList, dataType: dataType, - localDbList: dataList, + localAllList: allDataList, ); } catch (e, stack) { if (kDebugMode) { @@ -343,7 +346,7 @@ class RecordSyncServiceImpl extends RecordSyncService { await _pullDbData( token: token, pullAll: pullAll, - localDbList: dataList, + localAllList: allDataList, clientStates: clientStates, dataIdList: dataIdList, dataType: "card-${cardSet.uuid}", @@ -357,9 +360,6 @@ class RecordSyncServiceImpl extends RecordSyncService { printLog("同步时下载卡片数据失败,$e"); } } - SchedulerBinding.instance.addPostFrameCallback((timeStamp) { - serviceManager.docService.notifyListeners(); - }); } catch (e) { printLog("同步时下载记录数据失败,$e"); } @@ -369,7 +369,7 @@ class RecordSyncServiceImpl extends RecordSyncService { Future _pullDbData({ required String token, required bool pullAll, - required List localDbList, + required List localAllList, List? clientStates, List? dataIdList, String? dataType, @@ -398,14 +398,14 @@ class RecordSyncServiceImpl extends RecordSyncService { var value = entry.value; // 6.从本地查询出dataId对应的数据 var localList = - localDbList.where((element) => element.dataId == dataId).toList(); + localAllList.where((element) => element.dataId == dataId).toList(); var mergeList = []; mergeList.addAll(localList); mergeList.addAll(value); // 7.将所有的dbDelta数据合并起来计算出对应的数据 await dbDeltaToLocalData(dataId, mergeList); // 8.将下载的数据存到本地数据库 - await saveDbDelta(localList, value); + await saveDbDelta(localAllList, value); } var hasDirItem = updateList.any((element) => element.dataType == "dir"); if (hasDirItem) { @@ -415,23 +415,22 @@ class RecordSyncServiceImpl extends RecordSyncService { /// 保持或者合并DbDelta数据 Future saveDbDelta( - List localList, List remoteList) async { + List localAllList, List remoteList) async { for (var delta in remoteList) { - var existItem = documentIsar.dbDeltas - .filter() - .dataIdEqualTo(delta.dataId) - .and() - .clientIdEqualTo(delta.clientId) - .findFirstSync(); - if (existItem == null) { + var existItem = localAllList + .where((element) => + element.dataId == delta.dataId && + element.clientId == delta.clientId) + .toList(); + if (existItem.isEmpty) { delta.id = Isar.autoIncrement; delta.hasUpload = true; await documentIsar.writeTxn(() async { await documentIsar.dbDeltas.put(delta); }); } else { - if ((delta.updateTime ?? 0) > (existItem.updateTime ?? 0)) { - delta.id = existItem.id; + if ((delta.updateTime ?? 0) > (existItem.first.updateTime ?? 0)) { + delta.id = existItem.first.id; delta.hasUpload = true; await documentIsar.writeTxn(() async { await documentIsar.dbDeltas.put(delta);