mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-18 05:51:34 +02:00
feat(dev): add secrets dev screen (used to recover corrupted wallet) (#2234)
* feat(dev): add secrets dev screen (used to recover corrupted wallet) * fix(dev): decode only password fields
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||
import 'package:cake_wallet/view_model/dev/secure_preferences.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
|
||||
class DevSecurePreferencesPage extends BasePage {
|
||||
final DevSecurePreferences viewModel;
|
||||
|
||||
DevSecurePreferencesPage(this.viewModel);
|
||||
|
||||
@override
|
||||
String? get title => "[dev] secure preferences";
|
||||
|
||||
@override
|
||||
Widget body(BuildContext context) {
|
||||
return Observer(
|
||||
builder: (_) {
|
||||
if (viewModel.values.isEmpty) {
|
||||
return Center(child: Text("No secure preferences found"));
|
||||
}
|
||||
final keys = viewModel.keys;
|
||||
Map<String, dynamic> values = {};
|
||||
for (final key in keys) {
|
||||
values[key] = viewModel.get(key);
|
||||
}
|
||||
Map<String, PreferenceType> types = {};
|
||||
for (final key in keys) {
|
||||
types[key] = viewModel.getPreferenceType(key);
|
||||
}
|
||||
return ListView.builder(
|
||||
itemCount: keys.length,
|
||||
itemBuilder: (context, index) {
|
||||
final key = keys[index];
|
||||
final type = types[key]!;
|
||||
return ListTile(
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(text: key + ": " + values[key].toString()));
|
||||
},
|
||||
title: switch (type) {
|
||||
PreferenceType.bool => Text(key, style: TextStyle(color: Colors.blue)),
|
||||
PreferenceType.int => Text(key, style: TextStyle(color: Colors.green)),
|
||||
PreferenceType.double => Text(key, style: TextStyle(color: Colors.yellow)),
|
||||
PreferenceType.listString => Text(key, style: TextStyle(color: Colors.purple)),
|
||||
PreferenceType.string => Text(key),
|
||||
PreferenceType.unknown => Text(key),
|
||||
},
|
||||
subtitle: switch (type) {
|
||||
PreferenceType.bool => Text("bool: ${values[key]}"),
|
||||
PreferenceType.int => Text("int: ${values[key]}"),
|
||||
PreferenceType.double => Text("double: ${values[key]}"),
|
||||
PreferenceType.listString => values[key].isEmpty as bool ? Text("listString: []") : Text("listString:\n- ${values[key].join("\n- ")}"),
|
||||
PreferenceType.string => Text("string: ${values[key]}"),
|
||||
PreferenceType.unknown => Text("UNKNOWN(${values[key].runtimeType}): ${values[key]}"),
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -81,6 +81,12 @@ class OtherSettingsPage extends BasePage {
|
||||
handler: (BuildContext context) =>
|
||||
Navigator.of(context).pushNamed(Routes.devSharedPreferences),
|
||||
),
|
||||
if (FeatureFlag.hasDevOptions)
|
||||
SettingsCellWithArrow(
|
||||
title: '[dev] secure storage preferences',
|
||||
handler: (BuildContext context) =>
|
||||
Navigator.of(context).pushNamed(Routes.devSecurePreferences),
|
||||
),
|
||||
if (FeatureFlag.hasDevOptions)
|
||||
SettingsCellWithArrow(
|
||||
title: '[dev] background sync logs',
|
||||
|
||||
Reference in New Issue
Block a user