From 96c8d4de6a299460efa56cbd7009ba928f2628ef Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 22 Mar 2024 23:32:59 +0800 Subject: [PATCH] fix restore ab afer pullAb (#7480) * Opt ab name drop downdrop, more width Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 12 ++++-- flutter/lib/models/ab_model.dart | 44 +++++++++++++++----- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index fd56741d4..ce0278868 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:auto_size_text/auto_size_text.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dynamic_layouts/dynamic_layouts.dart'; import 'package:flutter/material.dart'; @@ -84,7 +85,7 @@ class _AddressBookState extends State { border: Border.all( color: Theme.of(context).colorScheme.background)), child: Container( - width: 180, + width: 200, height: double.infinity, padding: const EdgeInsets.all(8.0), child: Column( @@ -206,9 +207,12 @@ class _AddressBookState extends State { children: [ Expanded( child: Tooltip( - message: e, - child: Text(gFFI.abModel.translatedName(e), - style: TextStyle(fontSize: 14))), + waitDuration: Duration(milliseconds: 500), + message: gFFI.abModel.translatedName(e), + child: AutoSizeText( + gFFI.abModel.translatedName(e), + maxFontSize: 14, + )), ), ], ))) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 1c97c15f5..f06b78b7d 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -99,7 +99,6 @@ class AbModel { if (!force && _allInitialized) return; _allInitialized = false; try { - final tmpAddressbooks = Map.fromEntries([]).obs; // Get personal address book guid _personalAbGuid = null; await _getPersonalAbGuid(); @@ -113,21 +112,23 @@ class AbModel { // get all address book name await _getSharedAbProfiles(tmpAbProfiles); abProfiles = tmpAbProfiles; + addressbooks.removeWhere((key, value) => + abProfiles.firstWhereOrNull((e) => e.name == key) == null); for (int i = 0; i < abProfiles.length; i++) { AbProfile p = abProfiles[i]; - tmpAddressbooks[p.name] = Ab(p, p.guid == _personalAbGuid); + if (addressbooks.containsKey(p.name)) { + addressbooks[p.name]?.setSharedProfile(p); + } else { + addressbooks[p.name] = Ab(p, p.guid == _personalAbGuid); + } } } else { // only legacy address book - tmpAddressbooks[_legacyAddressBookName] = LegacyAb(); - } - addressbooks - .removeWhere((key, value) => !tmpAddressbooks.containsKey(key)); - tmpAddressbooks.forEach((key, value) { - if (!addressbooks.containsKey(key)) { - addressbooks[key] = value; + addressbooks.removeWhere((key, value) => key != _legacyAddressBookName); + if (!addressbooks.containsKey(_legacyAddressBookName)) { + addressbooks[_legacyAddressBookName] = LegacyAb(); } - }); + } // set current address book name if (!_everPulledProfiles) { _everPulledProfiles = true; @@ -756,6 +757,8 @@ abstract class BaseAb { bool isFull(); + void setSharedProfile(AbProfile profile); + AbProfile? sharedProfile(); bool canWrite(); @@ -779,6 +782,9 @@ class LegacyAb extends BaseAb { return null; } + @override + void setSharedProfile(AbProfile? profile) {} + @override bool canWrite() { return true; @@ -1039,6 +1045,9 @@ class LegacyAb extends BaseAb { if (!tagContainBy(e)) { tags.add(e); } + if (tagColors[e] == null) { + tagColors[e] = str2color2(e, existing: tagColors.values.toList()).value; + } } return await pushAb(); } @@ -1103,6 +1112,11 @@ class LegacyAb extends BaseAb { Map _serialize() { final peersJsonData = peers.map((e) => e.toPersonalAbUploadJson(true)).toList(); + for (var e in tags) { + if (tagColors[e] == null) { + tagColors[e] = str2color2(e, existing: tagColors.values.toList()).value; + } + } final tagColorJsonData = jsonEncode(tagColors); return { "tags": tags, @@ -1147,7 +1161,7 @@ class LegacyAb extends BaseAb { } class Ab extends BaseAb { - late final AbProfile profile; + AbProfile profile; late final bool personal; final sortTags = shouldSortTags().obs; final filterByIntersection = filterAbTagByIntersection().obs; @@ -1169,6 +1183,11 @@ class Ab extends BaseAb { return profile; } + @override + void setSharedProfile(AbProfile profile) { + this.profile = profile; + } + @override bool isFull() { return gFFI.abModel._maxPeerOneAb > 0 && @@ -1692,6 +1711,9 @@ class DummyAb extends BaseAb { return null; } + @override + void setSharedProfile(AbProfile profile) {} + @override Future syncFromRecent(List recents) async {} }