fix node loading on initial start for desktop, only add default node back if there are no nodes exist for a certain coin

This commit is contained in:
julian 2022-11-25 13:50:13 -06:00
parent 42aad5dcd5
commit 05bdc8c52f
3 changed files with 17 additions and 7 deletions

View file

@ -7,9 +7,9 @@ import 'package:stackwallet/notifications/show_flush_bar.dart';
import 'package:stackwallet/pages_desktop_specific/home/desktop_home_view.dart';
import 'package:stackwallet/providers/desktop/storage_crypto_handler_provider.dart';
import 'package:stackwallet/providers/global/secure_store_provider.dart';
import 'package:stackwallet/providers/providers.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/constants.dart';
import 'package:stackwallet/utilities/enums/flush_bar_type.dart';
import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart';
@ -81,6 +81,10 @@ class _CreatePasswordViewState extends ConsumerState<CreatePasswordView> {
await ref.read(storageCryptoHandlerProvider).initFromNew(passphrase);
await (ref.read(secureStoreProvider).store as DesktopSecureStore).init();
// load default nodes now as node service requires storage handler to exist
await ref.read(nodeServiceChangeNotifierProvider).updateDefaults();
} catch (e) {
unawaited(showFloatingFlushBar(
type: FlushBarType.warning,

View file

@ -24,11 +24,14 @@ class NodeService extends ChangeNotifier {
final savedNode = DB.instance
.get<NodeModel>(boxName: DB.boxNameNodeModels, key: defaultNode.id);
if (savedNode == null) {
// save the default node to hive
await DB.instance.put<NodeModel>(
// save the default node to hive only if no other nodes for the specific coin exist
if (getNodesFor(coinFromPrettyName(defaultNode.coinName)).isEmpty) {
await DB.instance.put<NodeModel>(
boxName: DB.boxNameNodeModels,
key: defaultNode.id,
value: defaultNode);
value: defaultNode,
);
}
} else {
// update all fields but copy over previously set enabled state
await DB.instance.put<NodeModel>(
@ -81,14 +84,16 @@ class NodeService extends ChangeNotifier {
final list = DB.instance
.values<NodeModel>(boxName: DB.boxNameNodeModels)
.where((e) =>
e.coinName == coin.name && e.name != DefaultNodes.defaultName)
e.coinName == coin.name &&
!e.id.startsWith(DefaultNodes.defaultNodeIdPrefix))
.toList();
// add default to end of list
list.addAll(DB.instance
.values<NodeModel>(boxName: DB.boxNameNodeModels)
.where((e) =>
e.coinName == coin.name && e.name == DefaultNodes.defaultName)
e.coinName == coin.name &&
e.id.startsWith(DefaultNodes.defaultNodeIdPrefix))
.toList());
// return reversed list so default node appears at beginning

View file

@ -4,7 +4,8 @@ import 'package:stackwallet/models/node_model.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
abstract class DefaultNodes {
static String _nodeId(Coin coin) => "default_${coin.name}";
static const String defaultNodeIdPrefix = "default_";
static String _nodeId(Coin coin) => "$defaultNodeIdPrefix${coin.name}";
static const String defaultName = "Stack Default";
static List<NodeModel> get all => [