Merge pull request #39 from cake-tech/CWA-175-seed-language

Cwa 175 seed language
This commit is contained in:
M 2020-03-04 18:13:26 +02:00
commit 00307cb55c
41 changed files with 12078 additions and 388 deletions

View file

@ -34,7 +34,7 @@ final loadWalletNative = moneroApi
void createWalletSync(
{String path,
String password,
String language = 'English',
String language,
int nettype = 0}) {
final pathPointer = Utf8.toUtf8(path);
final passwordPointer = Utf8.toUtf8(password);
@ -95,7 +95,7 @@ void restoreWalletFromSeedSync(
void restoreWalletFromKeysSync(
{String path,
String password,
String language = 'English',
String language,
String address,
String viewKey,
String spendKey,
@ -145,8 +145,9 @@ void loadWallet({String path, String password, int nettype = 0}) {
void _createWallet(Map<String, dynamic> args) {
final path = args['path'] as String;
final password = args['password'] as String;
final language = args['language'] as String;
createWalletSync(path: path, password: password);
createWalletSync(path: path, password: password, language: language);
}
void _restoreFromSeed(Map<String, dynamic> args) {
@ -162,6 +163,7 @@ void _restoreFromSeed(Map<String, dynamic> args) {
void _restoreFromKeys(Map<String, dynamic> args) {
final path = args['path'] as String;
final password = args['password'] as String;
final language = args['language'] as String;
final restoreHeight = args['restoreHeight'] as int;
final address = args['address'] as String;
final viewKey = args['viewKey'] as String;
@ -170,6 +172,7 @@ void _restoreFromKeys(Map<String, dynamic> args) {
restoreWalletFromKeysSync(
path: path,
password: password,
language: language,
restoreHeight: restoreHeight,
address: address,
viewKey: viewKey,
@ -190,7 +193,7 @@ Future<void> openWalletAsync(Map<String, String> args) async =>
Future<void> createWallet(
{String path,
String password,
String language = 'English',
String language,
int nettype = 0}) async =>
compute(_createWallet, {
'path': path,
@ -216,7 +219,7 @@ Future restoreFromSeed(
Future restoreFromKeys(
{String path,
String password,
String language = 'English',
String language,
String address,
String viewKey,
String spendKey,

File diff suppressed because it is too large Load diff

View file

@ -35,6 +35,7 @@ import 'package:cake_wallet/src/domain/common/wallet_type.dart';
import 'package:cake_wallet/src/domain/services/wallet_service.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/domain/common/language.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
@ -99,6 +100,7 @@ void main() async {
priceStore: priceStore);
final loginStore = LoginStore(
sharedPreferences: sharedPreferences, walletsService: walletListService);
final seedLanguageStore = SeedLanguageStore();
setReactions(
settingsStore: settingsStore,
@ -123,7 +125,8 @@ void main() async {
Provider(create: (_) => contacts),
Provider(create: (_) => nodes),
Provider(create: (_) => transactionDescriptions),
Provider(create: (_) => trades)
Provider(create: (_) => trades),
Provider(create: (_) => seedLanguageStore)
], child: CakeWalletApp()));
}

View file

@ -65,7 +65,7 @@ import 'package:cake_wallet/src/screens/restore/restore_wallet_from_seed_page.da
import 'package:cake_wallet/src/screens/restore/restore_wallet_from_keys_page.dart';
import 'package:cake_wallet/src/screens/send/send_page.dart';
import 'package:cake_wallet/src/screens/disclaimer/disclaimer_page.dart';
import 'package:cake_wallet/src/screens/seed_alert/seed_alert.dart';
import 'package:cake_wallet/src/screens/seed_language/seed_language_page.dart';
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart';
import 'package:cake_wallet/src/screens/accounts/account_page.dart';
import 'package:cake_wallet/src/screens/accounts/account_list_page.dart';
@ -261,8 +261,8 @@ class Router {
return CupertinoPageRoute<void>(
builder: (_) => DisclaimerPage(isReadOnly: true));
case Routes.seedAlert:
return CupertinoPageRoute<void>(builder: (_) => SeedAlert());
case Routes.seedLanguage:
return CupertinoPageRoute<void>(builder: (_) => SeedLanguage());
case Routes.walletList:
return MaterialPageRoute<void>(

View file

@ -18,7 +18,7 @@ class Routes {
static const newSubaddress = '/new_subaddress';
static const disclaimer = '/disclaimer';
static const readDisclaimer = '/read_disclaimer';
static const seedAlert = '/seed_alert';
static const seedLanguage = '/seed_language';
static const walletList = '/wallet_list';
static const auth = '/auth';
static const nodeList = '/node_list';

View file

@ -2,12 +2,12 @@ import 'package:cake_wallet/src/domain/common/wallet.dart';
import 'package:cake_wallet/src/domain/common/wallet_description.dart';
abstract class WalletsManager {
Future<Wallet> create(String name, String password);
Future<Wallet> create(String name, String password, String language);
Future<Wallet> restoreFromSeed(
String name, String password, String seed, int restoreHeight);
Future<Wallet> restoreFromKeys(String name, String password,
Future<Wallet> restoreFromKeys(String name, String password, String language,
int restoreHeight, String address, String viewKey, String spendKey);
Future<Wallet> openWallet(String name, String password);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -31,12 +31,12 @@ class MoneroWalletsManager extends WalletsManager {
Box<WalletInfo> walletInfoSource;
@override
Future<Wallet> create(String name, String password) async {
Future<Wallet> create(String name, String password, String language) async {
try {
const isRecovery = false;
final path = await pathForWallet(name: name);
await monero_wallet_manager.createWallet(path: path, password: password);
await monero_wallet_manager.createWallet(path: path, password: password, language: language);
final wallet = await MoneroWallet.createdWallet(
walletInfoSource: walletInfoSource,
@ -82,6 +82,7 @@ class MoneroWalletsManager extends WalletsManager {
Future<Wallet> restoreFromKeys(
String name,
String password,
String language,
int restoreHeight,
String address,
String viewKey,
@ -93,6 +94,7 @@ class MoneroWalletsManager extends WalletsManager {
await monero_wallet_manager.restoreFromKeys(
path: path,
password: password,
language: language,
restoreHeight: restoreHeight,
address: address,
viewKey: viewKey,

View file

@ -41,7 +41,7 @@ class WalletListService {
.map((info) => WalletDescription(name: info.name, type: info.type))
.toList();
Future create(String name) async {
Future create(String name, String language) async {
if (await walletsManager.isWalletExit(name)) {
throw WalletIsExistException(name);
}
@ -53,7 +53,7 @@ class WalletListService {
final password = Uuid().v4();
await saveWalletPassword(password: password, walletName: name);
final wallet = await walletsManager.create(name, password);
final wallet = await walletsManager.create(name, password, language);
await onWalletChange(wallet);
}
@ -76,7 +76,7 @@ class WalletListService {
await onWalletChange(wallet);
}
Future restoreFromKeys(String name, int restoreHeight, String address,
Future restoreFromKeys(String name, String language, int restoreHeight, String address,
String viewKey, String spendKey) async {
if (await walletsManager.isWalletExit(name)) {
throw WalletIsExistException(name);
@ -90,7 +90,7 @@ class WalletListService {
await saveWalletPassword(password: password, walletName: name);
final wallet = await walletsManager.restoreFromKeys(
name, password, restoreHeight, address, viewKey, spendKey);
name, password, language, restoreHeight, address, viewKey, spendKey);
await onWalletChange(wallet);
}

View file

@ -13,6 +13,8 @@ import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
import 'package:cake_wallet/src/screens/seed_language/widgets/seed_language_picker.dart';
class NewWalletPage extends BasePage {
NewWalletPage(
@ -43,6 +45,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
@override
Widget build(BuildContext context) {
final walletCreationStore = Provider.of<WalletCreationStore>(context);
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
reaction((_) => walletCreationStore.state, (WalletCreationState state) {
if (state is WalletCreatedSuccessfully) {
@ -100,6 +103,16 @@ class _WalletNameFormState extends State<WalletNameForm> {
return walletCreationStore.errorMessage;
},
)),
),
Padding(padding: EdgeInsets.only(bottom: 20),
child: Text(
S.of(context).seed_language_choose,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 16.0),
),
),
Padding(padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
child: SeedLanguagePicker(),
)
]),
bottomSection: Observer(
@ -107,7 +120,8 @@ class _WalletNameFormState extends State<WalletNameForm> {
return LoadingPrimaryButton(
onPressed: () {
if (_formKey.currentState.validate()) {
walletCreationStore.create(name: nameController.text);
walletCreationStore.create(name: nameController.text,
language: seedLanguageStore.selectedSeedLanguage);
}
},
text: S.of(context).continue_text,

View file

@ -15,6 +15,7 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
class RestoreWalletFromKeysPage extends BasePage {
RestoreWalletFromKeysPage(
@ -49,6 +50,7 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> {
@override
Widget build(BuildContext context) {
final walletRestorationStore = Provider.of<WalletRestorationStore>(context);
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
reaction((_) => walletRestorationStore.state, (WalletRestorationState state) {
if (state is WalletRestoredSuccessfully) {
@ -206,6 +208,7 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> {
if (_formKey.currentState.validate()) {
walletRestorationStore.restoreFromKeys(
name: _nameController.text,
language: seedLanguageStore.selectedSeedLanguage,
address: _addressController.text,
viewKey: _viewKeyController.text,
spendKey: _spendKeyController.text,

View file

@ -1,4 +1,3 @@
import 'package:mobx/mobx.dart';
import 'package:provider/provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
@ -11,6 +10,7 @@ import 'package:cake_wallet/src/domain/services/wallet_service.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/stores/wallet_restoration/wallet_restoration_store.dart';
import 'package:cake_wallet/src/widgets/seed_widget.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
class RestoreWalletFromSeedPage extends BasePage {
RestoreWalletFromSeedPage(
@ -53,6 +53,7 @@ class _RestoreFromSeedFormState extends State<RestoreFromSeedForm> {
@override
Widget build(BuildContext context) {
final walletRestorationStore = Provider.of<WalletRestorationStore>(context);
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
return GestureDetector(
onTap: () =>
@ -65,6 +66,7 @@ class _RestoreFromSeedFormState extends State<RestoreFromSeedForm> {
onFinish: () => Navigator.of(context).pushNamed(
Routes.restoreWalletFromSeedDetails,
arguments: _seedKey.currentState.items),
seedLanguage: seedLanguageStore.selectedSeedLanguage,
),
),
);

View file

@ -5,6 +5,8 @@ import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/screens/restore/widgets/restore_button.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
import 'package:provider/provider.dart';
class RestoreWalletOptionsPage extends BasePage {
static const _aspectRatioImage = 2.086;
@ -19,38 +21,46 @@ class RestoreWalletOptionsPage extends BasePage {
final _imageKeys = Image.asset('assets/images/keysIco.png');
@override
Widget body(BuildContext context) => Container(
padding: EdgeInsets.only(
left: 20.0,
right: 20.0,
),
child: Column(
children: <Widget>[
Flexible(
child: RestoreButton(
onPressed: () =>
Navigator.pushNamed(context, Routes.restoreWalletFromSeed),
image: _imageSeed,
aspectRatioImage: _aspectRatioImage,
titleColor: Palette.lightViolet,
color: Palette.lightViolet,
title: S.of(context).restore_title_from_seed,
description: S.of(context).restore_description_from_seed,
textButton: S.of(context).restore_next,
)),
Flexible(
child: RestoreButton(
onPressed: () =>
Navigator.pushNamed(context, Routes.restoreWalletFromKeys),
image: _imageKeys,
aspectRatioImage: _aspectRatioImage,
titleColor: Palette.cakeGreen,
color: Palette.cakeGreen,
title: S.of(context).restore_title_from_keys,
description: S.of(context).restore_description_from_keys,
textButton: S.of(context).restore_next,
))
],
),
);
Widget body(BuildContext context) {
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
return Container(
padding: EdgeInsets.only(
left: 20.0,
right: 20.0,
),
child: Column(
children: <Widget>[
Flexible(
child: RestoreButton(
onPressed: () {
seedLanguageStore.setCurrentRoute(Routes.restoreWalletFromSeed);
Navigator.pushNamed(context, Routes.seedLanguage);
},
image: _imageSeed,
aspectRatioImage: _aspectRatioImage,
titleColor: Palette.lightViolet,
color: Palette.lightViolet,
title: S.of(context).restore_title_from_seed,
description: S.of(context).restore_description_from_seed,
textButton: S.of(context).restore_next,
)),
Flexible(
child: RestoreButton(
onPressed: () {
seedLanguageStore.setCurrentRoute(Routes.restoreWalletFromKeys);
Navigator.pushNamed(context, Routes.seedLanguage);
},
image: _imageKeys,
aspectRatioImage: _aspectRatioImage,
titleColor: Palette.cakeGreen,
color: Palette.cakeGreen,
title: S.of(context).restore_title_from_keys,
description: S.of(context).restore_description_from_keys,
textButton: S.of(context).restore_next,
))
],
),
);
}
}

View file

@ -1,83 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
class SeedAlert extends StatelessWidget {
final imageSeed = Image.asset('assets/images/seedIco.png');
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomPadding: false,
backgroundColor: Theme.of(context).backgroundColor,
body: SafeArea(
child: Container(
padding: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Expanded(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
imageSeed,
Text(
S.of(context).seed_alert_first_text,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 19.0),
),
SizedBox(
height: 20.0,
),
Text(
S.of(context).seed_alert_second_text,
textAlign: TextAlign.center,
style: TextStyle(
letterSpacing: 0.2,
fontSize: 16.0,
color: Palette.lightBlue),
),
SizedBox(
height: 20.0,
),
RichText(
textAlign: TextAlign.center,
text: TextSpan(children: <TextSpan>[
TextSpan(
text: S.of(context).seed_alert_third_text,
style: TextStyle(
letterSpacing: 0.2,
fontSize: 16.0,
color: Palette.lightBlue)),
TextSpan(
text: S.of(context).seed_alert_settings,
style: TextStyle(
letterSpacing: 0.2,
fontSize: 16.0,
color: Palette.lightGreen)),
TextSpan(
text: S.of(context).seed_alert_menu,
style: TextStyle(
letterSpacing: 0.2,
fontSize: 16.0,
color: Palette.lightBlue)),
]))
],
),
),
),
PrimaryButton(
onPressed: () {},
text: S.of(context).seed_alert_understand,
color:
Theme.of(context).primaryTextTheme.button.backgroundColor,
borderColor:
Theme.of(context).primaryTextTheme.button.decorationColor),
],
),
)),
);
}
}

View file

@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/seed_language/widgets/seed_language_picker.dart';
import 'package:provider/provider.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
class SeedLanguage extends BasePage {
final imageSeed = Image.asset('assets/images/seedIco.png');
@override
Widget body(BuildContext context) {
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
return Container(
padding: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Expanded(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
imageSeed,
Text(
S.of(context).seed_language_choose,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 16.0),
),
SizedBox(
height: 20.0,
),
SeedLanguagePicker(),
],
),
),
),
PrimaryButton(
onPressed: () =>
Navigator.of(context).popAndPushNamed(seedLanguageStore.currentRoute),
text: S.of(context).seed_language_next,
color:
Theme.of(context).primaryTextTheme.button.backgroundColor,
borderColor:
Theme.of(context).primaryTextTheme.button.decorationColor),
],
),
);
}
}

View file

@ -0,0 +1,55 @@
import 'package:flutter/material.dart';
import 'package:cake_wallet/palette.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:provider/provider.dart';
import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
import 'package:cake_wallet/src/widgets/present_picker.dart';
import 'package:cake_wallet/generated/i18n.dart';
class SeedLanguagePicker extends StatelessWidget {
List<String> seedLocales = [
S.current.seed_language_english,
S.current.seed_language_chinese,
S.current.seed_language_dutch,
S.current.seed_language_german,
S.current.seed_language_japanese,
S.current.seed_language_portuguese,
S.current.seed_language_russian,
S.current.seed_language_spanish
];
@override
Widget build(BuildContext context) {
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
return Observer(
builder: (_) => InkWell(
onTap: () => _setSeedLanguage(context),
child: Container(
padding: EdgeInsets.all(8.0),
//width: double.infinity,
decoration: BoxDecoration(
border: Border.all(
color: Theme.of(context).dividerTheme.color
),
borderRadius: BorderRadius.circular(8.0)
),
child: Text(seedLocales[seedLanguages.indexOf(seedLanguageStore.selectedSeedLanguage)],
textAlign: TextAlign.center,
style: TextStyle(fontSize: 16.0, color: Palette.lightBlue),
),
),
));
}
Future<void> _setSeedLanguage(BuildContext context) async {
final seedLanguageStore = Provider.of<SeedLanguageStore>(context);
String selectedSeedLanguage =
await presentPicker(context, seedLocales);
if (selectedSeedLanguage != null) {
selectedSeedLanguage = seedLanguages[seedLocales.indexOf(selectedSeedLanguage)];
seedLanguageStore.setSelectedSeedLanguage(selectedSeedLanguage);
}
}
}

View file

@ -17,6 +17,7 @@ import 'package:cake_wallet/src/screens/settings/attributes.dart';
import 'package:cake_wallet/src/screens/disclaimer/disclaimer_page.dart';
import 'package:cake_wallet/src/screens/settings/items/settings_item.dart';
import 'package:cake_wallet/src/screens/settings/items/item_headers.dart';
import 'package:cake_wallet/src/widgets/present_picker.dart';
// Settings widgets
import 'package:cake_wallet/src/screens/settings/widgets/settings_arrow_list_row.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_header_list_row.dart';
@ -397,51 +398,10 @@ class SettingsFormState extends State<SettingsForm> {
));
}
Future<T> _presentPicker<T extends Object>(
BuildContext context, List<T> list) async {
T _value = list[0];
return await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(S.of(context).please_select),
backgroundColor: Theme.of(context).backgroundColor,
content: Container(
height: 150.0,
child: CupertinoPicker(
backgroundColor: Theme.of(context).backgroundColor,
itemExtent: 45.0,
onSelectedItemChanged: (int index) => _value = list[index],
children: List.generate(
list.length,
(index) => Center(
child: Text(
list[index].toString(),
style: TextStyle(
color: Theme.of(context)
.primaryTextTheme
.caption
.color),
),
))),
),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(S.of(context).cancel)),
FlatButton(
onPressed: () => Navigator.of(context).pop(_value),
child: Text(S.of(context).ok))
],
);
});
}
Future<void> _setBalance(BuildContext context) async {
final settingsStore = Provider.of<SettingsStore>(context);
final selectedDisplayMode =
await _presentPicker(context, BalanceDisplayMode.all);
await presentPicker(context, BalanceDisplayMode.all);
if (selectedDisplayMode != null) {
await settingsStore.setCurrentBalanceDisplayMode(
@ -451,7 +411,7 @@ class SettingsFormState extends State<SettingsForm> {
Future<void> _setCurrency(BuildContext context) async {
final settingsStore = Provider.of<SettingsStore>(context);
final selectedCurrency = await _presentPicker(context, FiatCurrency.all);
final selectedCurrency = await presentPicker(context, FiatCurrency.all);
if (selectedCurrency != null) {
await settingsStore.setCurrentFiatCurrency(currency: selectedCurrency);
@ -461,7 +421,7 @@ class SettingsFormState extends State<SettingsForm> {
Future<void> _setTransactionPriority(BuildContext context) async {
final settingsStore = Provider.of<SettingsStore>(context);
final selectedPriority =
await _presentPicker(context, TransactionPriority.all);
await presentPicker(context, TransactionPriority.all);
if (selectedPriority != null) {
await settingsStore.setCurrentTransactionPriority(

View file

@ -100,8 +100,7 @@ class WalletListBodyState extends State<WalletListBody> {
),
bottomSection: Column(children: <Widget>[
PrimaryIconButton(
onPressed: () =>
Navigator.of(context).pushNamed(Routes.newWallet),
onPressed: () => Navigator.of(context).pushNamed(Routes.newWallet),
iconData: Icons.add,
color: Theme.of(context).primaryTextTheme.button.backgroundColor,
borderColor:

View file

@ -0,0 +1,37 @@
import 'package:mobx/mobx.dart';
part 'seed_language_store.g.dart';
const List<String> seedLanguages = [
'English',
'Chinese (simplified)',
'Dutch',
'German',
'Japanese',
'Portuguese',
'Russian',
'Spanish'
];
class SeedLanguageStore = SeedLanguageStoreBase with _$SeedLanguageStore;
abstract class SeedLanguageStoreBase with Store {
SeedLanguageStoreBase() {
selectedSeedLanguage = seedLanguages[0];
currentRoute = '';
}
@observable
String selectedSeedLanguage;
String currentRoute;
@action
void setSelectedSeedLanguage(String seedLanguage) {
selectedSeedLanguage = seedLanguage;
}
void setCurrentRoute(String route) {
currentRoute = route;
}
}

View file

@ -32,12 +32,12 @@ abstract class WalletCreationStoreBase with Store {
bool isValid;
@action
Future create({String name}) async {
Future create({String name, String language}) async {
state = WalletCreationStateInitial();
try {
state = WalletIsCreating();
await walletListService.create(name);
await walletListService.create(name, language);
authStore.created();
state = WalletCreatedSuccessfully();
} catch (e) {

View file

@ -56,6 +56,7 @@ abstract class WalleRestorationStoreBase with Store {
@action
Future restoreFromKeys(
{String name,
String language,
String address,
String viewKey,
String spendKey,
@ -65,7 +66,7 @@ abstract class WalleRestorationStoreBase with Store {
try {
state = WalletIsRestoring();
await walletListService.restoreFromKeys(
name, restoreHeight, address, viewKey, spendKey);
name, language, restoreHeight, address, viewKey, spendKey);
authStore.restored();
state = WalletRestoredSuccessfully();
} catch (e) {

View file

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:cake_wallet/generated/i18n.dart';
Future<T> presentPicker<T extends Object>(
BuildContext context, List<T> list) async {
T _value = list[0];
return await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(S.of(context).please_select),
backgroundColor: Theme.of(context).backgroundColor,
content: Container(
height: 150.0,
child: CupertinoPicker(
backgroundColor: Theme.of(context).backgroundColor,
itemExtent: 45.0,
onSelectedItemChanged: (int index) => _value = list[index],
children: List.generate(
list.length,
(index) => Center(
child: Text(
list[index].toString(),
style: TextStyle(
color: Theme.of(context)
.primaryTextTheme
.caption
.color),
),
))),
),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(S.of(context).cancel)),
FlatButton(
onPressed: () => Navigator.of(context).pop(_value),
child: Text(S.of(context).ok))
],
);
});
}

View file

@ -4,14 +4,52 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/english.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/chinese_simplified.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/dutch.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/german.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/japanese.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/portuguese.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/russian.dart';
import 'package:cake_wallet/src/domain/monero/mnemonics/spanish.dart';
import 'package:cake_wallet/src/domain/common/mnemotic_item.dart';
import 'package:cake_wallet/generated/i18n.dart';
class SeedWidget extends StatefulWidget {
SeedWidget({Key key, this.onMnemoticChange, this.onFinish}) : super(key: key);
SeedWidget({Key key, this.onMnemoticChange, this.onFinish, this.seedLanguage}) : super(key: key) {
switch (seedLanguage) {
case 'English':
words = EnglishMnemonics.words;
break;
case 'Chinese (simplified)':
words = ChineseSimplifiedMnemonics.words;
break;
case 'Dutch':
words = DutchMnemonics.words;
break;
case 'German':
words = GermanMnemonics.words;
break;
case 'Japanese':
words = JapaneseMnemonics.words;
break;
case 'Portuguese':
words = PortugueseMnemonics.words;
break;
case 'Russian':
words = RussianMnemonics.words;
break;
case 'Spanish':
words = SpanishMnemonics.words;
break;
default:
words = EnglishMnemonics.words;
}
}
final Function(List<MnemoticItem>) onMnemoticChange;
final Function() onFinish;
final String seedLanguage;
List<String> words;
@override
SeedWidgetState createState() => SeedWidgetState();
@ -42,7 +80,7 @@ class SeedWidgetState extends State<SeedWidget> {
void addMnemotic(String text) {
setState(() => items.add(MnemoticItem(
text: text.trim().toLowerCase(), dic: EnglishMnemonics.words)));
text: text.trim().toLowerCase(), dic: widget.words)));
_seedController.text = '';
if (widget.onMnemoticChange != null) {
@ -141,7 +179,7 @@ class SeedWidgetState extends State<SeedWidget> {
}
currentMnemotics = splitted
.map((text) => MnemoticItem(text: text, dic: EnglishMnemonics.words))
.map((text) => MnemoticItem(text: text, dic: widget.words))
.toList();
bool isValid = true;

View file

@ -157,12 +157,16 @@
"copy" : "Kopieren",
"seed_alert_first_text" : "Die nächste Seite wird angezeigt\nDu bist ein Seed.",
"seed_alert_second_text" : "Bitte schreiben Sie diese nur in\nFalls Sie Ihr Telefon verlieren oder abwischen.",
"seed_alert_third_text" : "Sie können den Seed auch wieder sehen\nin dem ",
"seed_alert_settings" : "die Einstellungen",
"seed_alert_menu" : " Speisekarte.",
"seed_alert_understand" : "ich verstehe",
"seed_language_choose" : "Bitte wählen Sie die Ausgangssprache",
"seed_language_next" : "Nächster",
"seed_language_english" : "Englisch",
"seed_language_chinese" : "Chinesisch",
"seed_language_dutch" : "Niederländisch",
"seed_language_german" : "Deutsche",
"seed_language_japanese" : "Japanisch",
"seed_language_portuguese" : "Portugiesisch",
"seed_language_russian" : "Russisch",
"seed_language_spanish" : "Spanisch",
"send_title" : "Senden Sie Monero",

View file

@ -157,12 +157,16 @@
"copy" : "Copy",
"seed_alert_first_text" : "The next page will show\nyou a seed.",
"seed_alert_second_text" : "Please write these down just in\ncase you lose or wipe your phone.",
"seed_alert_third_text" : "You can also see the seed again\nin the ",
"seed_alert_settings" : "settings",
"seed_alert_menu" : " menu.",
"seed_alert_understand" : "I understand",
"seed_language_choose" : "Please choose seed language",
"seed_language_next" : "Next",
"seed_language_english" : "English",
"seed_language_chinese" : "Chinese",
"seed_language_dutch" : "Dutch",
"seed_language_german" : "German",
"seed_language_japanese" : "Japanese",
"seed_language_portuguese" : "Portuguese",
"seed_language_russian" : "Russian",
"seed_language_spanish" : "Spanish",
"send_title" : "Send Monero",

View file

@ -157,12 +157,16 @@
"copy" : "Dupdo",
"seed_alert_first_text" : "La siguiente página te mostrará \nuna semilla.",
"seed_alert_second_text" : "Anótelos solo en caso de que pierda\no limpie su teléfono.",
"seed_alert_third_text" : "También puede ver la semilla nuevamente \nen el ",
"seed_alert_settings" : "de configuración",
"seed_alert_menu" : " menú .",
"seed_alert_understand" : "Entiendo",
"seed_language_choose" : "Por favor elija el idioma semilla",
"seed_language_next" : "Próximo",
"seed_language_english" : "Inglés",
"seed_language_chinese" : "Chino",
"seed_language_dutch" : "Holandés",
"seed_language_german" : "Alemán",
"seed_language_japanese" : "Japonés",
"seed_language_portuguese" : "Portugués",
"seed_language_russian" : "Ruso",
"seed_language_spanish" : "Español",
"send_title" : "Enviar Monero",

View file

@ -157,12 +157,16 @@
"copy" : "प्रतिलिपि",
"seed_alert_first_text" : "अगला पेज दिखाएगा\nतुम एक बीज हो.",
"seed_alert_second_text" : "कृपया इन्हें केवल मामले में लिखें\nआप अपना फोन खो देते हैं या मिटा देते हैं.",
"seed_alert_third_text" : "आप बीज को फिर से देख सकते हैं\nमें ",
"seed_alert_settings" : "सेटिंग्स",
"seed_alert_menu" : " मेन्यू.",
"seed_alert_understand" : "मै समझता हुँ",
"seed_language_choose" : "कृपया बीज भाषा चुनें",
"seed_language_next" : "आगामी",
"seed_language_english" : "अंग्रेज़ी",
"seed_language_chinese" : "चीनी",
"seed_language_dutch" : "डच",
"seed_language_german" : "जर्मन",
"seed_language_japanese" : "जापानी",
"seed_language_portuguese" : "पुर्तगाली",
"seed_language_russian" : "रूसी",
"seed_language_spanish" : "स्पेनिश",
"send_title" : "संदेश Monero",

View file

@ -157,12 +157,16 @@
"copy" : "コピー",
"seed_alert_first_text" : "次のページが表示されます\nあなたは種.",
"seed_alert_second_text" : "これらを書き留めてください \n電話を紛失した場合や拭いた場合.",
"seed_alert_third_text" : "また、種子を見ることができます\nの中に ",
"seed_alert_settings" : "設定",
"seed_alert_menu" : " メニュー.",
"seed_alert_understand" : "わかります",
"seed_language_choose" : "シード言語を選択してください",
"seed_language_next" : "次",
"seed_language_english" : "英語",
"seed_language_chinese" : "中国語",
"seed_language_dutch" : "オランダの",
"seed_language_german" : "ドイツ人",
"seed_language_japanese" : "日本語",
"seed_language_portuguese" : "ポルトガル語",
"seed_language_russian" : "ロシア",
"seed_language_spanish" : "スペイン語",
"send_title" : "Moneroを送信",

View file

@ -157,12 +157,16 @@
"copy" : "부",
"seed_alert_first_text" : "다음 페이지가 표시됩니다\n당신은 씨앗.",
"seed_alert_second_text" : "아래에 적어주세요\n휴대 전화를 분실하거나 닦을 경우.",
"seed_alert_third_text" : "당신은 또한 씨앗을 다시 볼 수 있습니다\n에서 ",
"seed_alert_settings" : "설정",
"seed_alert_menu" : " 메뉴.",
"seed_alert_understand" : "이해 했어",
"seed_language_choose" : "종자 언어를 선택하십시오",
"seed_language_next" : "다음 것",
"seed_language_english" : "영어",
"seed_language_chinese" : "중국말",
"seed_language_dutch" : "네덜란드 사람",
"seed_language_german" : "독일 사람",
"seed_language_japanese" : "일본어",
"seed_language_portuguese" : "포르투갈 인",
"seed_language_russian" : "러시아인",
"seed_language_spanish" : "스페인의",
"send_title" : "모네로 보내기",

View file

@ -157,12 +157,16 @@
"copy" : "Kopiëren",
"seed_alert_first_text" : "De volgende pagina wordt getoond\njij een zaadje.",
"seed_alert_second_text" : "Noteer deze voor het geval dat\nje verliest of veegt je telefoon.",
"seed_alert_third_text" : "Je kunt het zaad ook weer zien\nin de ",
"seed_alert_settings" : "instellingen",
"seed_alert_menu" : " menu.",
"seed_alert_understand" : "Ik begrijp het",
"seed_language_choose" : "Kies een starttaal",
"seed_language_next" : "Volgende",
"seed_language_english" : "Engels",
"seed_language_chinese" : "Chinese",
"seed_language_dutch" : "Nederlands",
"seed_language_german" : "Duitse",
"seed_language_japanese" : "Japans",
"seed_language_portuguese" : "Portugees",
"seed_language_russian" : "Russisch",
"seed_language_spanish" : "Spaans",
"send_title" : "Stuur Monero",

View file

@ -157,12 +157,16 @@
"copy" : "Kopiuj",
"seed_alert_first_text" : "Pojawi się następna strona\nziarno.",
"seed_alert_second_text" : "Zapisz je na wszelki wypadek\nzgubisz lub wyczyścisz telefon.",
"seed_alert_third_text" : "Możesz także ponownie zobaczyć ziarno\nw ",
"seed_alert_settings" : "ustawienia",
"seed_alert_menu" : " menu.",
"seed_alert_understand" : "rozumiem",
"seed_language_choose" : "Proszę wybrać język początkowy",
"seed_language_next" : "Kolejny",
"seed_language_english" : "Angielski",
"seed_language_chinese" : "Chiński",
"seed_language_dutch" : "Holenderski",
"seed_language_german" : "Niemiecki",
"seed_language_japanese" : "Japoński",
"seed_language_portuguese" : "Portugalski",
"seed_language_russian" : "Rosyjski",
"seed_language_spanish" : "Hiszpański",
"send_title" : "Wyślij Monero",

View file

@ -157,12 +157,16 @@
"copy" : "Copiar",
"seed_alert_first_text" : "A próxima página exibirá\n uma semente.",
"seed_alert_second_text" : "Anote a semente em um papel. Ela é o seu backup\n caso o seu telefone estrague ou seja perdido/roubado.",
"seed_alert_third_text" : "Você também poderá ver a semente novamente\nna seção ",
"seed_alert_settings" : "configurações",
"seed_alert_menu" : " do menu.",
"seed_alert_understand" : "Eu entendi",
"seed_language_choose" : "Por favor, escolha o idioma da semente",
"seed_language_next" : "Próximo",
"seed_language_english" : "Inglesa",
"seed_language_chinese" : "Chinesa",
"seed_language_dutch" : "Holandesa",
"seed_language_german" : "Alemã",
"seed_language_japanese" : "Japonês",
"seed_language_portuguese" : "Português",
"seed_language_russian" : "Russa",
"seed_language_spanish" : "Espanhola",
"send_title" : "Enviar Monero",

View file

@ -157,12 +157,16 @@
"copy" : "Скопировать",
"seed_alert_first_text" : "Следущая страница содержит\nвашу мнемоническую фразу.",
"seed_alert_second_text" : "Пожалуйста, запишите ее на\nслучай, если вы потеряете или отформатируете свой телефон.",
"seed_alert_third_text" : "Вы так же можете посмотреть вашу мнемоническую фразу\nв",
"seed_alert_settings" : "настройках",
"seed_alert_menu" : " меню.",
"seed_alert_understand" : "Я понимаю",
"seed_language_choose" : "Пожалуйста, выберите язык мнемонической фразы",
"seed_language_next" : "Продолжить",
"seed_language_english" : "Английский",
"seed_language_chinese" : "Китайский",
"seed_language_dutch" : "Нидерландский",
"seed_language_german" : "Немецкий",
"seed_language_japanese" : "Японский",
"seed_language_portuguese" : "Португальский",
"seed_language_russian" : "Русский",
"seed_language_spanish" : "Испанский",
"send_title" : "Отправить Monero",

View file

@ -157,12 +157,16 @@
"copy" : "Скопіювати",
"seed_alert_first_text" : "Наступна сторінка містить\nвашу мнемонічну фразу.",
"seed_alert_second_text" : "Будь ласка, запишіть її на \nвипадок, якщо ви втратите або відформатуєте ваш телефон.",
"seed_alert_third_text" : "Також ви можете побачити вашу мнемонічну фразу\nв",
"seed_alert_settings" : "налаштуваннях",
"seed_alert_menu" : " меню.",
"seed_alert_understand" : "Я розумію",
"seed_language_choose" : "Будь ласка, виберіть мову мнемонічної фрази",
"seed_language_next" : "Продовжити",
"seed_language_english" : "Англійська",
"seed_language_chinese" : "Китайська",
"seed_language_dutch" : "Голландська",
"seed_language_german" : "Німецька",
"seed_language_japanese" : "Японська",
"seed_language_portuguese" : "Португальська",
"seed_language_russian" : "Російська",
"seed_language_spanish" : "Іспанська",
"send_title" : "Відправити Monero",

View file

@ -157,12 +157,16 @@
"copy" : "复制",
"seed_alert_first_text" : "下一页将显示\n你是种子.",
"seed_alert_second_text" : "请写下来以防万一\n万一您丢失或擦拭手机.",
"seed_alert_third_text" : "您也可以再次看到种子 \n在里面",
"seed_alert_settings" : "设定",
"seed_alert_menu" : " 菜单.",
"seed_alert_understand" : "我明白",
"seed_language_choose" : "請選擇種子語言",
"seed_language_next" : "下一个",
"seed_language_english" : "英語",
"seed_language_chinese" : "中文",
"seed_language_dutch" : "荷蘭人",
"seed_language_german" : "德語",
"seed_language_japanese" : "日本",
"seed_language_portuguese" : "葡萄牙語",
"seed_language_russian" : "俄語",
"seed_language_spanish" : "西班牙文",
"send_title" : "发送门罗币",