mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
* feat: initial hive -> SQLite Includes migration script and initial work done to remove dependency on hive generators. Also contains some refactoring to make sync code async. Features new dev screen that lists all SQLite tables Aspects that need testing: - backups (from this version, and from previous versions as well) - wallet loading / wallet list - almost everything else - renaming - deletion - sorting in wallet list - wallet groups - wallet seed/keys - wallet switching - wallet creation / restore - all methods - wallet address page - hardware wallet connection (and prompts from mall screens) - contacts - advanced settings in wallet creation - derivation paths - some minor wownero fixes - base, hardware wallets * fix: build errors * fix: Bad state: No element in backup restore * address comments from review * fix: HardwareWalletType
151 lines
3.8 KiB
Dart
151 lines
3.8 KiB
Dart
const textDirectionDeclaration = """
|
|
|
|
@override
|
|
TextDirection get textDirection => TextDirection.ltr;
|
|
|
|
""";
|
|
|
|
const classDeclaration = """
|
|
class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> {
|
|
const GeneratedLocalizationsDelegate();
|
|
|
|
List<Locale> get supportedLocales {
|
|
return const <Locale>[
|
|
""";
|
|
|
|
const part1 = """
|
|
import \'dart:async\';
|
|
import \'package:flutter/foundation.dart\';
|
|
import \'package:flutter/material.dart\';
|
|
|
|
class S implements WidgetsLocalizations {
|
|
const S();
|
|
|
|
static late S current;
|
|
|
|
static const GeneratedLocalizationsDelegate delegate =
|
|
GeneratedLocalizationsDelegate();
|
|
|
|
static S of(BuildContext context) => Localizations.of<S>(context, S)!;
|
|
|
|
@override
|
|
String get reorderItemToStart => "reorderItemToStart";
|
|
|
|
@override
|
|
String get reorderItemToEnd => "reorderItemToEnd";
|
|
|
|
@override
|
|
String get reorderItemUp => "reorderItemUp";
|
|
|
|
@override
|
|
String get reorderItemDown => "reorderItemDown";
|
|
|
|
@override
|
|
String get reorderItemLeft => "reorderItemLeft";
|
|
|
|
@override
|
|
String get reorderItemRight => "reorderItemRight";
|
|
|
|
@override
|
|
String get copyButtonLabel => "copyButtonLabel";
|
|
|
|
@override
|
|
String get cutButtonLabel => "cutButtonLabel";
|
|
|
|
@override
|
|
String get lookUpButtonLabel => "lookUpButtonLabel";
|
|
|
|
@override
|
|
String get pasteButtonLabel => "pasteButtonLabel";
|
|
|
|
@override
|
|
String get searchWebButtonLabel => "searchWebButtonLabel";
|
|
|
|
@override
|
|
String get selectAllButtonLabel => "selectAllButtonLabel";
|
|
|
|
@override
|
|
String get shareButtonLabel => "shareButtonLabel";
|
|
""";
|
|
|
|
const part2 = """
|
|
];
|
|
}
|
|
|
|
LocaleListResolutionCallback listResolution({required Locale fallback, bool withCountry = true}) {
|
|
return (List<Locale>? locales, Iterable<Locale> supported) {
|
|
if (locales == null || locales.isEmpty) {
|
|
return fallback ?? supported.first;
|
|
} else {
|
|
return _resolve(locales.first, fallback, supported, withCountry);
|
|
}
|
|
};
|
|
}
|
|
|
|
LocaleResolutionCallback resolution({required Locale fallback, bool withCountry = true}) {
|
|
return (Locale? locale, Iterable<Locale> supported) {
|
|
return _resolve(locale, fallback, supported, withCountry);
|
|
};
|
|
}
|
|
|
|
@override
|
|
Future<S> load(Locale locale) {
|
|
final String lang = getLang(locale);
|
|
if (lang != null) {
|
|
switch (lang) {
|
|
""";
|
|
|
|
const part3 = """
|
|
default:
|
|
}
|
|
}
|
|
S.current = const S();
|
|
return SynchronousFuture<S>(S.current);
|
|
}
|
|
|
|
@override
|
|
bool isSupported(Locale locale) => _isSupported(locale, true);
|
|
|
|
@override
|
|
bool shouldReload(GeneratedLocalizationsDelegate old) => false;
|
|
|
|
Locale _resolve(Locale? locale, Locale fallback, Iterable<Locale> supported, bool withCountry) {
|
|
if (locale == null || !_isSupported(locale, withCountry)) {
|
|
return fallback ?? supported.first;
|
|
}
|
|
|
|
final Locale languageLocale = Locale(locale.languageCode, "");
|
|
if (supported.contains(locale)) {
|
|
return locale;
|
|
} else if (supported.contains(languageLocale)) {
|
|
return languageLocale;
|
|
} else {
|
|
final Locale fallbackLocale = fallback ?? supported.first;
|
|
return fallbackLocale;
|
|
}
|
|
}
|
|
|
|
bool _isSupported(Locale locale, bool withCountry) {
|
|
if (locale != null) {
|
|
for (Locale supportedLocale in supportedLocales) {
|
|
if (supportedLocale.languageCode != locale.languageCode) {
|
|
continue;
|
|
}
|
|
if (supportedLocale.countryCode == locale.countryCode) {
|
|
return true;
|
|
}
|
|
if (true != withCountry && (supportedLocale.countryCode == null || supportedLocale.countryCode!.isEmpty)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
String getLang(Locale l) => l == null
|
|
? throw Exception('Incorrect local')
|
|
: l.countryCode != null && l.countryCode!.isEmpty
|
|
? l.languageCode
|
|
: l.toString();
|
|
"""; |