mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 11:39:22 +00:00
Fixes for yat
This commit is contained in:
parent
c9482caa19
commit
fe3d00f1a8
36 changed files with 543 additions and 88 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -85,6 +85,8 @@ PODS:
|
||||||
- Flutter
|
- Flutter
|
||||||
- SwiftProtobuf (1.12.0)
|
- SwiftProtobuf (1.12.0)
|
||||||
- SwiftyGif (5.3.0)
|
- SwiftyGif (5.3.0)
|
||||||
|
- uni_links (0.0.1):
|
||||||
|
- Flutter
|
||||||
- UnstoppableDomainsResolution (2.0.1):
|
- UnstoppableDomainsResolution (2.0.1):
|
||||||
- BigInt
|
- BigInt
|
||||||
- CryptoSwift
|
- CryptoSwift
|
||||||
|
@ -109,6 +111,7 @@ DEPENDENCIES:
|
||||||
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
|
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
|
||||||
- share (from `.symlinks/plugins/share/ios`)
|
- share (from `.symlinks/plugins/share/ios`)
|
||||||
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
|
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
|
||||||
|
- uni_links (from `.symlinks/plugins/uni_links/ios`)
|
||||||
- UnstoppableDomainsResolution (~> 2.0.1)
|
- UnstoppableDomainsResolution (~> 2.0.1)
|
||||||
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
||||||
- webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
|
- webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
|
||||||
|
@ -155,6 +158,8 @@ EXTERNAL SOURCES:
|
||||||
:path: ".symlinks/plugins/share/ios"
|
:path: ".symlinks/plugins/share/ios"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
:path: ".symlinks/plugins/shared_preferences/ios"
|
:path: ".symlinks/plugins/shared_preferences/ios"
|
||||||
|
uni_links:
|
||||||
|
:path: ".symlinks/plugins/uni_links/ios"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
:path: ".symlinks/plugins/url_launcher/ios"
|
:path: ".symlinks/plugins/url_launcher/ios"
|
||||||
webview_flutter:
|
webview_flutter:
|
||||||
|
@ -184,10 +189,11 @@ SPEC CHECKSUMS:
|
||||||
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
|
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
|
||||||
SwiftProtobuf: 4ef85479c18ca85b5482b343df9c319c62bda699
|
SwiftProtobuf: 4ef85479c18ca85b5482b343df9c319c62bda699
|
||||||
SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40
|
SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40
|
||||||
|
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
|
||||||
UnstoppableDomainsResolution: 856ba43f08b31f3f34157c7257092bd0c6e31cf8
|
UnstoppableDomainsResolution: 856ba43f08b31f3f34157c7257092bd0c6e31cf8
|
||||||
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
||||||
webview_flutter: 9f491a9b5a66f2573946a389b2677987b0ff8c0b
|
webview_flutter: 3603125dfd3bcbc9d8d418c3f80aeecf331c068b
|
||||||
|
|
||||||
PODFILE CHECKSUM: bc2591d23316907c9c90ca1cd2fce063fd866508
|
PODFILE CHECKSUM: bc2591d23316907c9c90ca1cd2fce063fd866508
|
||||||
|
|
||||||
COCOAPODS: 1.10.2
|
COCOAPODS: 1.9.3
|
||||||
|
|
|
@ -362,7 +362,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 59;
|
CURRENT_PROJECT_VERSION = 62;
|
||||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
EXCLUDED_SOURCE_FILE_NAMES = "";
|
EXCLUDED_SOURCE_FILE_NAMES = "";
|
||||||
|
@ -380,7 +380,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.2.7;
|
MARKETING_VERSION = 4.2.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
@ -506,7 +506,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 59;
|
CURRENT_PROJECT_VERSION = 62;
|
||||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
EXCLUDED_SOURCE_FILE_NAMES = "";
|
EXCLUDED_SOURCE_FILE_NAMES = "";
|
||||||
|
@ -524,7 +524,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.2.7;
|
MARKETING_VERSION = 4.2.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
@ -542,7 +542,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 59;
|
CURRENT_PROJECT_VERSION = 62;
|
||||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
EXCLUDED_SOURCE_FILE_NAMES = "";
|
EXCLUDED_SOURCE_FILE_NAMES = "";
|
||||||
|
@ -560,7 +560,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.2.7;
|
MARKETING_VERSION = 4.2.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
|
|
@ -20,6 +20,19 @@
|
||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
|
<key>CFBundleURLTypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Editor</string>
|
||||||
|
<key>CFBundleURLName</key>
|
||||||
|
<string>y.at</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>cakewallet</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
@ -57,19 +70,6 @@
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleURLTypes</key>
|
|
||||||
<array>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleTypeRole</key>
|
|
||||||
<string>Editor</string>
|
|
||||||
<key>CFBundleURLName</key>
|
|
||||||
<string>y.at</string>
|
|
||||||
<key>CFBundleURLSchemes</key>
|
|
||||||
<array>
|
|
||||||
<string>cakewallet</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</array>
|
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -2,7 +2,9 @@ import 'dart:async';
|
||||||
import 'package:cake_wallet/bitcoin/unspent_coins_info.dart';
|
import 'package:cake_wallet/bitcoin/unspent_coins_info.dart';
|
||||||
import 'package:cake_wallet/entities/language_service.dart';
|
import 'package:cake_wallet/entities/language_service.dart';
|
||||||
import 'package:cake_wallet/buy/order.dart';
|
import 'package:cake_wallet/buy/order.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat_emoji_id.dart';
|
||||||
import 'package:cake_wallet/store/yat/yat_store.dart';
|
import 'package:cake_wallet/store/yat/yat_store.dart';
|
||||||
|
import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
@ -35,6 +37,7 @@ import 'package:cake_wallet/src/screens/root/root.dart';
|
||||||
import 'package:uni_links/uni_links.dart';
|
import 'package:uni_links/uni_links.dart';
|
||||||
|
|
||||||
final navigatorKey = GlobalKey<NavigatorState>();
|
final navigatorKey = GlobalKey<NavigatorState>();
|
||||||
|
final rootKey = GlobalKey<RootState>();
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
try {
|
try {
|
||||||
|
@ -106,6 +109,9 @@ Future<void> main() async {
|
||||||
await Hive.openBox<ExchangeTemplate>(ExchangeTemplate.boxName);
|
await Hive.openBox<ExchangeTemplate>(ExchangeTemplate.boxName);
|
||||||
final unspentCoinsInfoSource =
|
final unspentCoinsInfoSource =
|
||||||
await Hive.openBox<UnspentCoinsInfo>(UnspentCoinsInfo.boxName);
|
await Hive.openBox<UnspentCoinsInfo>(UnspentCoinsInfo.boxName);
|
||||||
|
|
||||||
|
await visualisationForEmojiId('%E2%98%A0%EF%B8%8F%F0%9F%90%99%E2%98%A0%EF%B8%8F');
|
||||||
|
|
||||||
await initialSetup(
|
await initialSetup(
|
||||||
sharedPreferences: await SharedPreferences.getInstance(),
|
sharedPreferences: await SharedPreferences.getInstance(),
|
||||||
nodes: nodes,
|
nodes: nodes,
|
||||||
|
@ -203,6 +209,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
||||||
Future<void> _handleInitialUri() async {
|
Future<void> _handleInitialUri() async {
|
||||||
try {
|
try {
|
||||||
final uri = await getInitialUri();
|
final uri = await getInitialUri();
|
||||||
|
print('uri: $uri');
|
||||||
if (uri == null) {
|
if (uri == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -217,6 +224,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
||||||
void _handleIncomingLinks() {
|
void _handleIncomingLinks() {
|
||||||
if (!kIsWeb) {
|
if (!kIsWeb) {
|
||||||
stream = getUriLinksStream().listen((Uri uri) {
|
stream = getUriLinksStream().listen((Uri uri) {
|
||||||
|
print('uri: $uri');
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
_fetchEmojiFromUri(uri);
|
_fetchEmojiFromUri(uri);
|
||||||
}, onError: (Object error) {
|
}, onError: (Object error) {
|
||||||
|
@ -238,6 +246,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
||||||
}
|
}
|
||||||
yatStore.emoji = emoji;
|
yatStore.emoji = emoji;
|
||||||
yatStore.refreshToken = refreshToken;
|
yatStore.refreshToken = refreshToken;
|
||||||
|
yatStore.emojiIncommingSC.add(emoji);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -263,6 +272,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
||||||
statusBarIconBrightness: statusBarIconBrightness));
|
statusBarIconBrightness: statusBarIconBrightness));
|
||||||
|
|
||||||
return Root(
|
return Root(
|
||||||
|
key: rootKey,
|
||||||
authenticationStore: authenticationStore,
|
authenticationStore: authenticationStore,
|
||||||
navigatorKey: navigatorKey,
|
navigatorKey: navigatorKey,
|
||||||
child: MaterialApp(
|
child: MaterialApp(
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
import 'dart:async';
|
||||||
import 'package:cake_wallet/entities/wallet_type.dart';
|
import 'package:cake_wallet/entities/wallet_type.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
import 'package:cake_wallet/routes.dart';
|
import 'package:cake_wallet/routes.dart';
|
||||||
import 'package:cake_wallet/src/screens/yat/yat_popup.dart';
|
import 'package:cake_wallet/src/screens/yat/yat_popup.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat_emoji_id.dart';
|
||||||
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
||||||
import 'package:cake_wallet/themes/theme_base.dart';
|
import 'package:cake_wallet/themes/theme_base.dart';
|
||||||
import 'package:cake_wallet/utils/show_pop_up.dart';
|
import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||||
|
@ -20,6 +22,7 @@ import 'package:flutter_mobx/flutter_mobx.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
import 'package:smooth_page_indicator/smooth_page_indicator.dart';
|
import 'package:smooth_page_indicator/smooth_page_indicator.dart';
|
||||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||||
|
import 'package:cake_wallet/main.dart';
|
||||||
|
|
||||||
class DashboardPage extends BasePage {
|
class DashboardPage extends BasePage {
|
||||||
DashboardPage({
|
DashboardPage({
|
||||||
|
@ -78,6 +81,7 @@ class DashboardPage extends BasePage {
|
||||||
|
|
||||||
var pages = <Widget>[];
|
var pages = <Widget>[];
|
||||||
bool _isEffectsInstalled = false;
|
bool _isEffectsInstalled = false;
|
||||||
|
StreamSubscription<bool> _onInactiveSub;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget body(BuildContext context) {
|
Widget body(BuildContext context) {
|
||||||
|
@ -156,6 +160,8 @@ class DashboardPage extends BasePage {
|
||||||
pages.add(BalancePage(dashboardViewModel: walletViewModel));
|
pages.add(BalancePage(dashboardViewModel: walletViewModel));
|
||||||
pages.add(TransactionsPage(dashboardViewModel: walletViewModel));
|
pages.add(TransactionsPage(dashboardViewModel: walletViewModel));
|
||||||
|
|
||||||
|
_isEffectsInstalled = true;
|
||||||
|
|
||||||
if (walletViewModel.shouldShowYatPopup) {
|
if (walletViewModel.shouldShowYatPopup) {
|
||||||
await Future<void>.delayed(Duration(seconds: 1));
|
await Future<void>.delayed(Duration(seconds: 1));
|
||||||
await showPopUp<void>(
|
await showPopUp<void>(
|
||||||
|
@ -186,7 +192,29 @@ class DashboardPage extends BasePage {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
_isEffectsInstalled = true;
|
var needToPresentYat = false;
|
||||||
|
var isInactive = false;
|
||||||
|
|
||||||
|
_onInactiveSub = rootKey.currentState.isInactive.listen((inactive) {
|
||||||
|
isInactive = inactive;
|
||||||
|
|
||||||
|
if (needToPresentYat) {
|
||||||
|
Future<void>.delayed(Duration(milliseconds: 500)).then((_) {
|
||||||
|
showPopUp<void>(
|
||||||
|
context: navigatorKey.currentContext,
|
||||||
|
builder: (_) => YatEmojiId(walletViewModel.yatStore.emoji));
|
||||||
|
needToPresentYat = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
walletViewModel.yatStore.emojiIncommingStream.listen((String emoji) {
|
||||||
|
if (!_isEffectsInstalled || emoji.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
needToPresentYat = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _onClickBuyButton(BuildContext context) async {
|
Future<void> _onClickBuyButton(BuildContext context) async {
|
||||||
|
|
|
@ -150,7 +150,7 @@ class QRWidget extends StatelessWidget {
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
S.of(context).yat_address,
|
S.of(context).yat,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
|
@ -160,14 +160,21 @@ class QRWidget extends StatelessWidget {
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 5),
|
padding: EdgeInsets.only(top: 5),
|
||||||
child: Text(
|
child: Row(
|
||||||
addressListViewModel.emoji,
|
mainAxisSize: MainAxisSize.max,
|
||||||
textAlign: TextAlign.center,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
style: TextStyle(
|
children: <Widget>[
|
||||||
fontSize: 26,
|
Expanded(child:Text(
|
||||||
|
addressListViewModel.emoji,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 26))),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(left: 12),
|
||||||
|
child: copyImage,
|
||||||
|
)]
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
)
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)),
|
)),
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cake_wallet/routes.dart';
|
import 'package:cake_wallet/routes.dart';
|
||||||
import 'package:cake_wallet/src/screens/auth/auth_page.dart';
|
import 'package:cake_wallet/src/screens/auth/auth_page.dart';
|
||||||
|
@ -24,11 +25,14 @@ class Root extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class RootState extends State<Root> with WidgetsBindingObserver {
|
class RootState extends State<Root> with WidgetsBindingObserver {
|
||||||
|
Stream<bool> get isInactive => _isInactiveController.stream;
|
||||||
|
StreamController<bool> _isInactiveController;
|
||||||
bool _isInactive;
|
bool _isInactive;
|
||||||
bool _postFrameCallback;
|
bool _postFrameCallback;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
_isInactiveController = StreamController<bool>();
|
||||||
_isInactive = false;
|
_isInactive = false;
|
||||||
_postFrameCallback = false;
|
_postFrameCallback = false;
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
|
@ -45,7 +49,7 @@ class RootState extends State<Root> with WidgetsBindingObserver {
|
||||||
|
|
||||||
if (!_isInactive &&
|
if (!_isInactive &&
|
||||||
widget.authenticationStore.state == AuthenticationState.allowed) {
|
widget.authenticationStore.state == AuthenticationState.allowed) {
|
||||||
setState(() => _isInactive = true);
|
setState(() => _setInactive(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -77,7 +81,12 @@ class RootState extends State<Root> with WidgetsBindingObserver {
|
||||||
void _reset() {
|
void _reset() {
|
||||||
setState(() {
|
setState(() {
|
||||||
_postFrameCallback = false;
|
_postFrameCallback = false;
|
||||||
_isInactive = false;
|
_setInactive(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _setInactive(bool value) {
|
||||||
|
_isInactive = value;
|
||||||
|
_isInactiveController.add(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:cake_wallet/src/screens/send/widgets/send_card.dart';
|
import 'package:cake_wallet/src/screens/send/widgets/send_card.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/widgets/yat_close_button.dart';
|
||||||
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
|
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
|
||||||
import 'package:cake_wallet/src/widgets/template_tile.dart';
|
import 'package:cake_wallet/src/widgets/template_tile.dart';
|
||||||
import 'package:cake_wallet/view_model/send/output.dart';
|
import 'package:cake_wallet/view_model/send/output.dart';
|
||||||
|
@ -21,6 +22,8 @@ import 'package:dotted_border/dotted_border.dart';
|
||||||
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
||||||
import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
|
import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
|
||||||
import 'package:smooth_page_indicator/smooth_page_indicator.dart';
|
import 'package:smooth_page_indicator/smooth_page_indicator.dart';
|
||||||
|
import 'package:cake_wallet/store/yat/yat_store.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/yat_sending.dart';
|
||||||
|
|
||||||
class SendPage extends BasePage {
|
class SendPage extends BasePage {
|
||||||
SendPage({@required this.sendViewModel}) :_formKey = GlobalKey<FormState>();
|
SendPage({@required this.sendViewModel}) :_formKey = GlobalKey<FormState>();
|
||||||
|
@ -301,6 +304,10 @@ class SendPage extends BasePage {
|
||||||
}
|
}
|
||||||
|
|
||||||
await sendViewModel.createTransaction();
|
await sendViewModel.createTransaction();
|
||||||
|
|
||||||
|
if (!sendViewModel.isBatchSending && sendViewModel.hasYat) {
|
||||||
|
Navigator.of(context).push<void>(YatSending.createRoute(sendViewModel));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
text: S.of(context).send,
|
text: S.of(context).send,
|
||||||
color: Theme.of(context).accentTextTheme.body2.color,
|
color: Theme.of(context).accentTextTheme.body2.color,
|
||||||
|
@ -336,7 +343,8 @@ class SendPage extends BasePage {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state is ExecutedSuccessfullyState) {
|
if (state is ExecutedSuccessfullyState
|
||||||
|
&& !(!sendViewModel.isBatchSending && sendViewModel.hasYat)) {
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
showPopUp<void>(
|
showPopUp<void>(
|
||||||
context: context,
|
context: context,
|
||||||
|
|
|
@ -29,6 +29,6 @@ class SettingsLinkProviderCell extends StandardListRow {
|
||||||
color: Palette.blueCraiola));
|
color: Palette.blueCraiola));
|
||||||
|
|
||||||
static void _launchUrl(String url) async {
|
static void _launchUrl(String url) async {
|
||||||
if (await canLaunch(url)) await launch(url);
|
if (await canLaunch(url)) await launch(url, forceSafariVC: false);
|
||||||
}
|
}
|
||||||
}
|
}
|
15
lib/src/screens/yat/circle_clipper.dart
Normal file
15
lib/src/screens/yat/circle_clipper.dart
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class CircleClipper extends CustomClipper<Path> {
|
||||||
|
CircleClipper(this.center, this.radius);
|
||||||
|
|
||||||
|
final Offset center;
|
||||||
|
final double radius;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Path getClip(Size size) =>
|
||||||
|
Path()..addOval(Rect.fromCircle(radius: radius, center: center));
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldReclip(covariant CustomClipper<Path> oldClipper) => true;
|
||||||
|
}
|
|
@ -10,13 +10,9 @@ import 'package:cake_wallet/generated/i18n.dart';
|
||||||
import 'package:lottie/lottie.dart';
|
import 'package:lottie/lottie.dart';
|
||||||
|
|
||||||
class YatAlert extends StatelessWidget {
|
class YatAlert extends StatelessWidget {
|
||||||
YatAlert(this.yatStore)
|
YatAlert(this.yatStore);
|
||||||
: baseUrl = YatLink.isDevMode
|
|
||||||
? YatLink.baseDevUrl
|
|
||||||
: YatLink.baseReleaseUrl;
|
|
||||||
|
|
||||||
final YatStore yatStore;
|
final YatStore yatStore;
|
||||||
final String baseUrl;
|
|
||||||
static const aspectRatioImage = 1.133;
|
static const aspectRatioImage = 1.133;
|
||||||
final animation = Lottie.asset('assets/animation/anim1.json');
|
final animation = Lottie.asset('assets/animation/anim1.json');
|
||||||
|
|
||||||
|
@ -88,8 +84,15 @@ class YatAlert extends StatelessWidget {
|
||||||
.arrow_up_right_square,
|
.arrow_up_right_square,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
final url = baseUrl + YatLink.createSuffix;
|
var createNewYatUrl = YatLink.startFlowUrl;
|
||||||
launch(url);
|
final createNewYatUrlParameters =
|
||||||
|
yatStore.defineQueryParameters();
|
||||||
|
|
||||||
|
if (createNewYatUrlParameters.isNotEmpty) {
|
||||||
|
createNewYatUrl += '?sub1=' + createNewYatUrlParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
launch(createNewYatUrl, forceSafariVC: false);
|
||||||
}),
|
}),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 24),
|
padding: EdgeInsets.only(top: 24),
|
||||||
|
@ -104,13 +107,13 @@ class YatAlert extends StatelessWidget {
|
||||||
.arrow_up_right_square,
|
.arrow_up_right_square,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
String url = baseUrl + YatLink.signInSuffix;
|
String url = YatLink.baseUrl + YatLink.signInSuffix;
|
||||||
final parameters =
|
final parameters =
|
||||||
yatStore.defineQueryParameters();
|
yatStore.defineQueryParameters();
|
||||||
if (parameters.isNotEmpty) {
|
if (parameters.isNotEmpty) {
|
||||||
url += YatLink.queryParameter + parameters;
|
url += YatLink.queryParameter + parameters;
|
||||||
}
|
}
|
||||||
launch(url);
|
launch(url, forceSafariVC: false);
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -160,8 +160,15 @@ class YatPopup extends StatelessWidget {
|
||||||
child: ThirdIntroduction(
|
child: ThirdIntroduction(
|
||||||
onClose: onClose,
|
onClose: onClose,
|
||||||
onGet: () {
|
onGet: () {
|
||||||
final url = baseUrl + YatLink.createSuffix;
|
var createNewYatUrl = YatLink.startFlowUrl;
|
||||||
launch(url);
|
final createNewYatUrlParameters = dashboardViewModel.
|
||||||
|
yatStore.defineQueryParameters();
|
||||||
|
|
||||||
|
if (createNewYatUrlParameters.isNotEmpty) {
|
||||||
|
createNewYatUrl += '?sub1=' + createNewYatUrlParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
launch(createNewYatUrl, forceSafariVC: false);
|
||||||
},
|
},
|
||||||
onConnect: () {
|
onConnect: () {
|
||||||
String url = baseUrl + YatLink.signInSuffix;
|
String url = baseUrl + YatLink.signInSuffix;
|
||||||
|
@ -170,7 +177,7 @@ class YatPopup extends StatelessWidget {
|
||||||
if (parameters.isNotEmpty) {
|
if (parameters.isNotEmpty) {
|
||||||
url += YatLink.queryParameter + parameters;
|
url += YatLink.queryParameter + parameters;
|
||||||
}
|
}
|
||||||
launch(url);
|
launch(url, forceSafariVC: false);
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
: Container()
|
: Container()
|
||||||
|
|
141
lib/src/screens/yat/yat_sending.dart
Normal file
141
lib/src/screens/yat/yat_sending.dart
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||||
|
import 'package:mobx/mobx.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/widgets/yat_close_button.dart';
|
||||||
|
import 'package:cake_wallet/view_model/send/send_view_model_state.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/circle_clipper.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||||
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
||||||
|
import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||||
|
import 'package:cake_wallet/src/widgets/primary_button.dart';
|
||||||
|
import 'package:cake_wallet/store/yat/yat_store.dart';
|
||||||
|
import 'package:cake_wallet/core/execution_state.dart';
|
||||||
|
import 'package:cake_wallet/view_model/send/send_view_model.dart';
|
||||||
|
|
||||||
|
class YatSending extends BasePage {
|
||||||
|
YatSending(this.sendViewModel);
|
||||||
|
|
||||||
|
static Route createRoute(SendViewModel sendViewModel) {
|
||||||
|
return PageRouteBuilder<void>(
|
||||||
|
transitionDuration: Duration(seconds: 1),
|
||||||
|
reverseTransitionDuration: Duration(seconds: 1),
|
||||||
|
opaque: false,
|
||||||
|
barrierDismissible: false,
|
||||||
|
pageBuilder: (context, animation, secondaryAnimation) => YatSending(sendViewModel),
|
||||||
|
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
||||||
|
final screenSize = MediaQuery.of(context).size;
|
||||||
|
final center = Offset(screenSize.width / 2, screenSize.height / 2);
|
||||||
|
final endRadius = screenSize.height * 1.2;
|
||||||
|
final tween = Tween(begin: 0.0, end: endRadius);
|
||||||
|
|
||||||
|
return ClipPath(
|
||||||
|
clipper: CircleClipper(center, animation.drive(tween).value),
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final SendViewModel sendViewModel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Color get titleColor => Colors.white;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get resizeToAvoidBottomInset => false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get extendBodyBehindAppBar => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
AppBarStyle get appBarStyle => AppBarStyle.transparent;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget trailing(context) =>
|
||||||
|
YatCloseButton(onClose: () => Navigator.of(context).pop());
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget leading(BuildContext context) => Container();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget body(BuildContext context) {
|
||||||
|
final screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
return Container(
|
||||||
|
color: Colors.black,
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child:FutureBuilder<String>(
|
||||||
|
future: visualisationForEmojiId(sendViewModel.outputs.first.address),
|
||||||
|
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
|
||||||
|
switch (snapshot.connectionState) {
|
||||||
|
case ConnectionState.done:
|
||||||
|
if (snapshot.hasError || snapshot.data.isEmpty) {
|
||||||
|
return Image.asset('assets/images/yat_logo.png', width: screenWidth, color: Colors.white);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Image.network(
|
||||||
|
snapshot.data,
|
||||||
|
scale: 0.7,
|
||||||
|
loadingBuilder: (Object z, Widget child, ImageChunkEvent loading)
|
||||||
|
=> loading != null
|
||||||
|
? CupertinoActivityIndicator(animating: true)
|
||||||
|
: child);
|
||||||
|
default:
|
||||||
|
return Image.asset('assets/images/yat_logo.png', width: screenWidth, color: Colors.white);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 20,
|
||||||
|
child: Container(
|
||||||
|
width: screenWidth,
|
||||||
|
padding: EdgeInsets.fromLTRB(20, 0, 20, 10),
|
||||||
|
child: Column(children: [
|
||||||
|
Text(
|
||||||
|
'You are sending ${sendViewModel.outputs.first.cryptoAmount} ${sendViewModel.currency.title} to ${sendViewModel.outputs.first.address}'.toUpperCase(),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
color: Theme.of(context).accentTextTheme.display3.backgroundColor),
|
||||||
|
textAlign: TextAlign.center),
|
||||||
|
Container(height: 30),
|
||||||
|
LoadingPrimaryButton(
|
||||||
|
onPressed: () {
|
||||||
|
sendViewModel.commitTransaction();
|
||||||
|
showPopUp<void>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext popContext) {
|
||||||
|
return Observer(builder: (_) {
|
||||||
|
final state = sendViewModel.state;
|
||||||
|
|
||||||
|
if (state is FailureState) {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state is TransactionCommitted) {
|
||||||
|
return AlertWithOneAction(
|
||||||
|
alertTitle: '',
|
||||||
|
alertContent: S.of(popContext).send_success(
|
||||||
|
sendViewModel.currency
|
||||||
|
.toString()),
|
||||||
|
buttonText: S.of(popContext).ok,
|
||||||
|
buttonAction: () {
|
||||||
|
Navigator.of(popContext).pop();
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Offstage();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
text: S.of(context).confirm_sending,
|
||||||
|
color: Theme.of(context).accentTextTheme.body2.color,
|
||||||
|
textColor: Colors.white,
|
||||||
|
isLoading: sendViewModel.state is IsExecutingState ||
|
||||||
|
sendViewModel.state is TransactionCommitting)])))]));
|
||||||
|
}
|
||||||
|
}
|
129
lib/src/screens/yat_emoji_id.dart
Normal file
129
lib/src/screens/yat_emoji_id.dart
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
import 'package:cake_wallet/palette.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/widgets/first_introduction.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/widgets/second_introduction.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/widgets/third_introduction.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/yat/widgets/yat_close_button.dart';
|
||||||
|
import 'package:cake_wallet/src/widgets/alert_background.dart';
|
||||||
|
import 'package:cake_wallet/src/widgets/primary_button.dart';
|
||||||
|
import 'package:cake_wallet/store/yat/yat_store.dart';
|
||||||
|
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:animate_do/animate_do.dart';
|
||||||
|
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
|
||||||
|
class YatEmojiId extends StatelessWidget {
|
||||||
|
YatEmojiId(this.emojiId);
|
||||||
|
static const durationInMilliseconds = 250;
|
||||||
|
|
||||||
|
final String emojiId;
|
||||||
|
final image = Image.asset('assets/images/emoji_popup.png');
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
|
||||||
|
return Stack(
|
||||||
|
clipBehavior: Clip.none,
|
||||||
|
alignment: Alignment.bottomCenter,
|
||||||
|
children: [
|
||||||
|
AlertBackground(child: Container()),
|
||||||
|
SlideInUp(
|
||||||
|
from: 420,
|
||||||
|
duration: Duration(milliseconds: durationInMilliseconds),
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(24),
|
||||||
|
topRight: Radius.circular(24)),
|
||||||
|
child: Container(
|
||||||
|
height: 420,
|
||||||
|
color: Theme.of(context).buttonColor,
|
||||||
|
padding: EdgeInsets.fromLTRB(24, 15, 24, 24),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
YatCloseButton(onClose: () => Navigator.of(context).pop())
|
||||||
|
]
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.fromLTRB(10, 5, 10, 5),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border.all(color: Colors.white),
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(50))
|
||||||
|
),
|
||||||
|
child:
|
||||||
|
Text(
|
||||||
|
emojiId,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 46,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
)
|
||||||
|
))
|
||||||
|
]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(left: 6, right: 6),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"That's one nice Yat!",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 32,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context).accentTextTheme.display3.backgroundColor,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 20),
|
||||||
|
child: Text(
|
||||||
|
'You can manage your Yat or purchase additional Yats in your account settings',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: FontWeight.normal,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context)
|
||||||
|
.accentTextTheme
|
||||||
|
.display2
|
||||||
|
.backgroundColor,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
),
|
||||||
|
PrimaryButton(
|
||||||
|
text: 'Got it',
|
||||||
|
textColor: Colors.white,
|
||||||
|
color: Palette.protectiveBlue,
|
||||||
|
onPressed: () => Navigator.of(context).pop()
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,20 +12,28 @@ import 'package:cake_wallet/monero/monero_wallet.dart';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:cake_wallet/store/yat/yat_exception.dart';
|
import 'package:cake_wallet/store/yat/yat_exception.dart';
|
||||||
import 'package:http/http.dart';
|
import 'package:http/http.dart';
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
part 'yat_store.g.dart';
|
part 'yat_store.g.dart';
|
||||||
|
|
||||||
class YatLink {
|
class YatLink {
|
||||||
|
static const partnerId = 'CW';
|
||||||
static const baseDevUrl = 'https://yat.fyi';
|
static const baseDevUrl = 'https://yat.fyi';
|
||||||
static const baseReleaseUrl = 'https://y.at';
|
static const baseReleaseUrl = 'https://y.at';
|
||||||
static const signInSuffix = '/partner/CW/link-email';
|
static const signInSuffix = '/partner/$partnerId/link-email';
|
||||||
static const createSuffix = '/create';
|
static const createSuffix = '/create';
|
||||||
|
static const managePath = '/partner/$partnerId/manage';
|
||||||
static const queryParameter = '?addresses=';
|
static const queryParameter = '?addresses=';
|
||||||
static const requestDevUrl = 'https://a.yat.fyi/emoji_id/';
|
static const requestDevUrl = 'https://a.yat.fyi/emoji_id/';
|
||||||
static const requestReleaseUrl = 'https://a.y.at/emoji_id/';
|
static const requestReleaseUrl = 'https://a.y.at/emoji_id/';
|
||||||
static const isDevMode = true;
|
static const startFlowUrl = 'https://www.y03btrk.com/4RQSJ/55M6S/';
|
||||||
|
static const isDevMode = false;
|
||||||
static const tags = <String, List<String>>{"XMR" : ['0x1001', '0x1002'],
|
static const tags = <String, List<String>>{"XMR" : ['0x1001', '0x1002'],
|
||||||
"BTC" : ['0x1003'], "LTC" : ['0x3fff']};
|
"BTC" : ['0x1003'], "LTC" : ['0x3fff']};
|
||||||
|
|
||||||
|
static String get baseUrl => YatLink.isDevMode
|
||||||
|
? YatLink.baseDevUrl
|
||||||
|
: YatLink.baseReleaseUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<String>> fetchYatAddress(String emojiId, String ticker) async {
|
Future<List<String>> fetchYatAddress(String emojiId, String ticker) async {
|
||||||
|
@ -65,6 +73,18 @@ Future<List<String>> fetchYatAddress(String emojiId, String ticker) async {
|
||||||
return addresses;
|
return addresses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<String> visualisationForEmojiId(String emojiId) async {
|
||||||
|
final requestURL = YatLink.isDevMode
|
||||||
|
? YatLink.requestDevUrl
|
||||||
|
: YatLink.requestReleaseUrl;
|
||||||
|
final url = requestURL + emojiId + '/json/VisualizerFileLocations';
|
||||||
|
final response = await get(url);
|
||||||
|
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
||||||
|
final data = responseJSON['data'] as Map<String, dynamic>;
|
||||||
|
final result = data['gif'] as String ?? '';
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
class YatStore = YatStoreBase with _$YatStore;
|
class YatStore = YatStoreBase with _$YatStore;
|
||||||
|
|
||||||
abstract class YatStoreBase with Store {
|
abstract class YatStoreBase with Store {
|
||||||
|
@ -74,6 +94,7 @@ abstract class YatStoreBase with Store {
|
||||||
refreshToken = _wallet?.walletInfo?.yatToken ?? '';
|
refreshToken = _wallet?.walletInfo?.yatToken ?? '';
|
||||||
reaction((_) => appStore.wallet, _onWalletChange);
|
reaction((_) => appStore.wallet, _onWalletChange);
|
||||||
reaction((_) => emoji, (String emoji) => _onEmojiChange());
|
reaction((_) => emoji, (String emoji) => _onEmojiChange());
|
||||||
|
emojiIncommingSC = StreamController<String>();
|
||||||
}
|
}
|
||||||
|
|
||||||
AppStore appStore;
|
AppStore appStore;
|
||||||
|
@ -84,6 +105,10 @@ abstract class YatStoreBase with Store {
|
||||||
@observable
|
@observable
|
||||||
String refreshToken;
|
String refreshToken;
|
||||||
|
|
||||||
|
StreamController<String> emojiIncommingSC;
|
||||||
|
|
||||||
|
Stream<String> get emojiIncommingStream => emojiIncommingSC.stream;
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo>
|
WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo>
|
||||||
_wallet;
|
_wallet;
|
||||||
|
|
|
@ -25,6 +25,7 @@ import 'package:cake_wallet/entities/wallet_type.dart';
|
||||||
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/view_model/send/send_view_model_state.dart';
|
import 'package:cake_wallet/view_model/send/send_view_model_state.dart';
|
||||||
|
import 'package:cake_wallet/entities/parsed_address.dart';
|
||||||
|
|
||||||
part 'send_view_model.g.dart';
|
part 'send_view_model.g.dart';
|
||||||
|
|
||||||
|
@ -134,6 +135,11 @@ abstract class SendViewModelBase with Store {
|
||||||
@computed
|
@computed
|
||||||
bool get isElectrumWallet => _wallet is ElectrumWallet;
|
bool get isElectrumWallet => _wallet is ElectrumWallet;
|
||||||
|
|
||||||
|
bool get hasYat
|
||||||
|
=> outputs.any((out) => out.isParsedAddress
|
||||||
|
&& out.parsedAddress.parseFrom == ParseFrom.yatRecord);
|
||||||
|
|
||||||
|
|
||||||
WalletType get walletType => _wallet.type;
|
WalletType get walletType => _wallet.type;
|
||||||
final WalletBase _wallet;
|
final WalletBase _wallet;
|
||||||
final SettingsStore _settingsStore;
|
final SettingsStore _settingsStore;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:cake_wallet/src/screens/yat/yat_alert.dart';
|
import 'package:cake_wallet/src/screens/yat/yat_alert.dart';
|
||||||
import 'package:cake_wallet/store/yat/yat_store.dart';
|
import 'package:cake_wallet/store/yat/yat_store.dart';
|
||||||
import 'package:cake_wallet/utils/show_pop_up.dart';
|
import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||||
|
import 'package:cake_wallet/view_model/settings/link_list_item.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info/package_info.dart';
|
||||||
|
@ -69,6 +70,31 @@ abstract class SettingsViewModelBase with Store {
|
||||||
_settingsStore.priority[wallet.type] = priorities.first;
|
_settingsStore.priority[wallet.type] = priorities.first;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var connectYatUrl = YatLink.baseUrl + YatLink.signInSuffix;
|
||||||
|
final connectYatUrlParameters =
|
||||||
|
_yatStore.defineQueryParameters();
|
||||||
|
|
||||||
|
if (connectYatUrlParameters.isNotEmpty) {
|
||||||
|
connectYatUrl += YatLink.queryParameter + connectYatUrlParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
var manageYatUrl = YatLink.baseUrl + YatLink.managePath;
|
||||||
|
final manageYatUrlParameters =
|
||||||
|
_yatStore.defineQueryParameters();
|
||||||
|
|
||||||
|
if (manageYatUrlParameters.isNotEmpty) {
|
||||||
|
manageYatUrl += YatLink.queryParameter + manageYatUrlParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
var createNewYatUrl = YatLink.startFlowUrl;
|
||||||
|
final createNewYatUrlParameters =
|
||||||
|
_yatStore.defineQueryParameters();
|
||||||
|
|
||||||
|
if (createNewYatUrlParameters.isNotEmpty) {
|
||||||
|
createNewYatUrl += '?sub1=' + createNewYatUrlParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sections = [
|
sections = [
|
||||||
[
|
[
|
||||||
PickerListItem(
|
PickerListItem(
|
||||||
|
@ -158,16 +184,23 @@ abstract class SettingsViewModelBase with Store {
|
||||||
_settingsStore.currentTheme = theme)
|
_settingsStore.currentTheme = theme)
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
RegularListItem(
|
if (_yatStore.emoji.isNotEmpty) ...[
|
||||||
title: S.current.manage_yats,
|
LinkListItem(
|
||||||
handler: (BuildContext context) async {
|
title: S.current.manage_yats,
|
||||||
await showPopUp<void>(
|
link: manageYatUrl,
|
||||||
context: context,
|
linkTitle: ''),
|
||||||
builder: (BuildContext context) {
|
] else ...[
|
||||||
return YatAlert(_yatStore);
|
LinkListItem(
|
||||||
});
|
title: S.current.connect_yats,
|
||||||
},
|
link: connectYatUrl,
|
||||||
),
|
linkTitle: ''),
|
||||||
|
LinkListItem(
|
||||||
|
title: 'Create new Yats',
|
||||||
|
link: createNewYatUrl,
|
||||||
|
linkTitle: '')
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
RegularListItem(
|
RegularListItem(
|
||||||
title: S.current.settings_terms_and_conditions,
|
title: S.current.settings_terms_and_conditions,
|
||||||
handler: (BuildContext context) =>
|
handler: (BuildContext context) =>
|
||||||
|
|
54
pubspec.lock
54
pubspec.lock
|
@ -200,7 +200,7 @@ packages:
|
||||||
name: cli_util
|
name: cli_util
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.0"
|
version: "0.3.5"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -228,21 +228,21 @@ packages:
|
||||||
name: connectivity
|
name: connectivity
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.3"
|
version: "3.0.6"
|
||||||
connectivity_for_web:
|
connectivity_for_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: connectivity_for_web
|
name: connectivity_for_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.0"
|
version: "0.4.0+1"
|
||||||
connectivity_macos:
|
connectivity_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: connectivity_macos
|
name: connectivity_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "0.2.1+2"
|
||||||
connectivity_platform_interface:
|
connectivity_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -277,7 +277,7 @@ packages:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
cw_monero:
|
cw_monero:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -312,7 +312,7 @@ packages:
|
||||||
name: devicelocale
|
name: devicelocale
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.1"
|
version: "0.4.3"
|
||||||
dio:
|
dio:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -361,7 +361,7 @@ packages:
|
||||||
name: file
|
name: file
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.0"
|
version: "6.1.2"
|
||||||
file_picker:
|
file_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -420,7 +420,7 @@ packages:
|
||||||
name: flutter_plugin_android_lifecycle
|
name: flutter_plugin_android_lifecycle
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.3"
|
||||||
flutter_secure_storage:
|
flutter_secure_storage:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -443,7 +443,7 @@ packages:
|
||||||
name: flutter_spinkit
|
name: flutter_spinkit
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.0"
|
version: "5.1.0"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -460,7 +460,7 @@ packages:
|
||||||
name: get_it
|
name: get_it
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.0"
|
version: "6.1.1"
|
||||||
glob:
|
glob:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -565,14 +565,14 @@ packages:
|
||||||
name: keyboard_actions
|
name: keyboard_actions
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.4.0"
|
version: "3.4.4"
|
||||||
local_auth:
|
local_auth:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: local_auth
|
name: local_auth
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.6"
|
version: "1.1.7"
|
||||||
logging:
|
logging:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -607,7 +607,7 @@ packages:
|
||||||
name: mime
|
name: mime
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.0.1"
|
||||||
mobx:
|
mobx:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -642,7 +642,7 @@ packages:
|
||||||
name: package_info
|
name: package_info
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
password:
|
password:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -712,7 +712,7 @@ packages:
|
||||||
name: pedantic
|
name: pedantic
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.11.1"
|
||||||
permission_handler:
|
permission_handler:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -740,7 +740,7 @@ packages:
|
||||||
name: platform
|
name: platform
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.2"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -768,14 +768,14 @@ packages:
|
||||||
name: process
|
name: process
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.1"
|
version: "4.2.3"
|
||||||
protobuf:
|
protobuf:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: protobuf
|
name: protobuf
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.3"
|
version: "1.1.4"
|
||||||
provider:
|
provider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -789,7 +789,7 @@ packages:
|
||||||
name: pub_semver
|
name: pub_semver
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.0"
|
||||||
pubspec_parse:
|
pubspec_parse:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -803,7 +803,7 @@ packages:
|
||||||
name: qr
|
name: qr
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.0"
|
||||||
quiver:
|
quiver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -824,7 +824,7 @@ packages:
|
||||||
name: share
|
name: share
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.4"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -990,21 +990,21 @@ packages:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.3"
|
version: "6.0.5"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_linux
|
name: url_launcher_linux
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1018,14 +1018,14 @@ packages:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.4"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_windows
|
name: url_launcher_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
uuid:
|
uuid:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1060,7 +1060,7 @@ packages:
|
||||||
name: webview_flutter
|
name: webview_flutter
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.2"
|
version: "2.0.13"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -501,7 +501,9 @@
|
||||||
"yat_alert_content" : "Cake Wallet-Benutzer können jetzt alle ihre Lieblingswährungen mit einem einzigartigen Emoji-basierten Benutzernamen senden und empfangen.",
|
"yat_alert_content" : "Cake Wallet-Benutzer können jetzt alle ihre Lieblingswährungen mit einem einzigartigen Emoji-basierten Benutzernamen senden und empfangen.",
|
||||||
"get_your_yat" : "Holen Sie sich Ihre Yat",
|
"get_your_yat" : "Holen Sie sich Ihre Yat",
|
||||||
"connect_an_existing_yat" : "Verbinden Sie ein vorhandenes Yat",
|
"connect_an_existing_yat" : "Verbinden Sie ein vorhandenes Yat",
|
||||||
|
"connect_yats": "Yats verbinden",
|
||||||
"yat_address" : "Yat-Adresse",
|
"yat_address" : "Yat-Adresse",
|
||||||
|
"yat" : "Yat",
|
||||||
"address_from_yat" : "Diese Adresse ist von ${emoji} auf Yat",
|
"address_from_yat" : "Diese Adresse ist von ${emoji} auf Yat",
|
||||||
"yat_error" : "Yat-Fehler",
|
"yat_error" : "Yat-Fehler",
|
||||||
"yat_error_content" : "Keine Adressen mit diesem Yat verknüpft. Versuchen Sie es mit einem anderen Yat",
|
"yat_error_content" : "Keine Adressen mit diesem Yat verknüpft. Versuchen Sie es mit einem anderen Yat",
|
||||||
|
|
|
@ -501,7 +501,9 @@
|
||||||
"yat_alert_content" : "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.",
|
"yat_alert_content" : "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.",
|
||||||
"get_your_yat" : "Get your Yat",
|
"get_your_yat" : "Get your Yat",
|
||||||
"connect_an_existing_yat" : "Connect an existing Yat",
|
"connect_an_existing_yat" : "Connect an existing Yat",
|
||||||
|
"connect_yats": "Connect Yats",
|
||||||
"yat_address" : "Yat Address",
|
"yat_address" : "Yat Address",
|
||||||
|
"yat" : "Yat",
|
||||||
"address_from_yat" : "This address is from ${emoji} on Yat",
|
"address_from_yat" : "This address is from ${emoji} on Yat",
|
||||||
"yat_error" : "Yat error",
|
"yat_error" : "Yat error",
|
||||||
"yat_error_content" : "No addresses linked with this Yat. Try another Yat",
|
"yat_error_content" : "No addresses linked with this Yat. Try another Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Obtén tu Yat",
|
"get_your_yat" : "Obtén tu Yat",
|
||||||
"connect_an_existing_yat" : "Conectar un Yat existente",
|
"connect_an_existing_yat" : "Conectar un Yat existente",
|
||||||
"yat_address" : "Dirección de Yat",
|
"yat_address" : "Dirección de Yat",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Conectar Yats",
|
||||||
"address_from_yat" : "Esta dirección es de ${emoji} en Yat",
|
"address_from_yat" : "Esta dirección es de ${emoji} en Yat",
|
||||||
"yat_error" : "Error de Yat",
|
"yat_error" : "Error de Yat",
|
||||||
"yat_error_content" : "No hay direcciones vinculadas con este Yat. Prueba con otro Yat",
|
"yat_error_content" : "No hay direcciones vinculadas con este Yat. Prueba con otro Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "अपना प्राप्त करें Yat",
|
"get_your_yat" : "अपना प्राप्त करें Yat",
|
||||||
"connect_an_existing_yat" : "मौजूदा Yat कनेक्ट करें",
|
"connect_an_existing_yat" : "मौजूदा Yat कनेक्ट करें",
|
||||||
"yat_address" : "Yat पता",
|
"yat_address" : "Yat पता",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "कनेक्ट Yats",
|
||||||
"address_from_yat" : "यह पता ${emoji} से है Yat",
|
"address_from_yat" : "यह पता ${emoji} से है Yat",
|
||||||
"yat_error" : "Yat त्रुटि",
|
"yat_error" : "Yat त्रुटि",
|
||||||
"yat_error_content" : "इसके साथ कोई पता लिंक नहीं है Yat. कोई दूसरा आज़माएं Yat",
|
"yat_error_content" : "इसके साथ कोई पता लिंक नहीं है Yat. कोई दूसरा आज़माएं Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Uzmi svoj Yat",
|
"get_your_yat" : "Uzmi svoj Yat",
|
||||||
"connect_an_existing_yat" : "Povežite postojeći Yat",
|
"connect_an_existing_yat" : "Povežite postojeći Yat",
|
||||||
"yat_address" : "Yat adresa",
|
"yat_address" : "Yat adresa",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Povežite Yats",
|
||||||
"address_from_yat" : "To je adresa od ${emoji} na Yat",
|
"address_from_yat" : "To je adresa od ${emoji} na Yat",
|
||||||
"yat_error" : "Yat pogreška",
|
"yat_error" : "Yat pogreška",
|
||||||
"yat_error_content" : "Nema adresa povezanih s ovim Yat -om. Pokušajte s drugim Yat -om",
|
"yat_error_content" : "Nema adresa povezanih s ovim Yat -om. Pokušajte s drugim Yat -om",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Ottieni il tuo Yat",
|
"get_your_yat" : "Ottieni il tuo Yat",
|
||||||
"connect_an_existing_yat" : "Collegare un Yat esistente",
|
"connect_an_existing_yat" : "Collegare un Yat esistente",
|
||||||
"yat_address" : "Indirizzo Yat",
|
"yat_address" : "Indirizzo Yat",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Connetti Yats",
|
||||||
"address_from_yat" : "Questo indirizzo è da ${emoji} in poi Yat",
|
"address_from_yat" : "Questo indirizzo è da ${emoji} in poi Yat",
|
||||||
"yat_error" : "Yat errore",
|
"yat_error" : "Yat errore",
|
||||||
"yat_error_content" : "Nessun indirizzo collegato a questo Yat. Prova un altro Yat",
|
"yat_error_content" : "Nessun indirizzo collegato a questo Yat. Prova un altro Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "あなたのYatを入手してください",
|
"get_your_yat" : "あなたのYatを入手してください",
|
||||||
"connect_an_existing_yat" : "既存のYatを接続します",
|
"connect_an_existing_yat" : "既存のYatを接続します",
|
||||||
"yat_address" : "Yat住所",
|
"yat_address" : "Yat住所",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Yatsを接続します",
|
||||||
"address_from_yat" : "このアドレスは ${emoji} からのものです Yat",
|
"address_from_yat" : "このアドレスは ${emoji} からのものです Yat",
|
||||||
"yat_error" : "Yatエラー",
|
"yat_error" : "Yatエラー",
|
||||||
"yat_error_content" : "このYatにリンクされているアドレスはありません。別のYatを試してください",
|
"yat_error_content" : "このYatにリンクされているアドレスはありません。別のYatを試してください",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "당신의 Yat를 얻으십시오",
|
"get_your_yat" : "당신의 Yat를 얻으십시오",
|
||||||
"connect_an_existing_yat" : "기존 Yat 연결",
|
"connect_an_existing_yat" : "기존 Yat 연결",
|
||||||
"yat_address" : "Yat 주소",
|
"yat_address" : "Yat 주소",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "야츠 연결",
|
||||||
"address_from_yat" : "이 주소는 ${emoji} 의 주소입니다 Yat",
|
"address_from_yat" : "이 주소는 ${emoji} 의 주소입니다 Yat",
|
||||||
"yat_error" : "Yat 오류",
|
"yat_error" : "Yat 오류",
|
||||||
"yat_error_content" : "이 Yat와 연결된 주소가 없습니다. 다른 Yat 시도",
|
"yat_error_content" : "이 Yat와 연결된 주소가 없습니다. 다른 Yat 시도",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Haal je Yato",
|
"get_your_yat" : "Haal je Yato",
|
||||||
"connect_an_existing_yat" : "Verbind een bestaande Yat",
|
"connect_an_existing_yat" : "Verbind een bestaande Yat",
|
||||||
"yat_address" : "Yat-adres",
|
"yat_address" : "Yat-adres",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Verbind Yats",
|
||||||
"address_from_yat" : "Dit adres is van ${emoji} op Yat",
|
"address_from_yat" : "Dit adres is van ${emoji} op Yat",
|
||||||
"yat_error" : "Yat fout",
|
"yat_error" : "Yat fout",
|
||||||
"yat_error_content" : "Geen adressen gekoppeld aan deze Yat. Probeer een andere Yato",
|
"yat_error_content" : "Geen adressen gekoppeld aan deze Yat. Probeer een andere Yato",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Zdobądź swój Yat",
|
"get_your_yat" : "Zdobądź swój Yat",
|
||||||
"connect_an_existing_yat" : "Podłącz istniejący Yat",
|
"connect_an_existing_yat" : "Podłącz istniejący Yat",
|
||||||
"yat_address" : "Adres Yat",
|
"yat_address" : "Adres Yat",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Połącz Yats",
|
||||||
"address_from_yat" : "Ten adres jest od ${emoji} na Yat",
|
"address_from_yat" : "Ten adres jest od ${emoji} na Yat",
|
||||||
"yat_error" : "Pomyłka Yata",
|
"yat_error" : "Pomyłka Yata",
|
||||||
"yat_error_content" : "Brak adresów powiązanych z tym Yat. Wypróbuj inny Yat",
|
"yat_error_content" : "Brak adresów powiązanych z tym Yat. Wypróbuj inny Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Pegue seu Yat",
|
"get_your_yat" : "Pegue seu Yat",
|
||||||
"connect_an_existing_yat" : "Conecte um Yat existente",
|
"connect_an_existing_yat" : "Conecte um Yat existente",
|
||||||
"yat_address" : "Endereço Yat",
|
"yat_address" : "Endereço Yat",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Connect Yats",
|
||||||
"address_from_yat" : "Este endereço é de ${emoji} em Yat",
|
"address_from_yat" : "Este endereço é de ${emoji} em Yat",
|
||||||
"yat_error" : "Yat erro",
|
"yat_error" : "Yat erro",
|
||||||
"yat_error_content" : "Nenhum endereço vinculado a este Yat. Tente outro Yat",
|
"yat_error_content" : "Nenhum endereço vinculado a este Yat. Tente outro Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Получить свой Yat",
|
"get_your_yat" : "Получить свой Yat",
|
||||||
"connect_an_existing_yat" : "Подключить существующий Yat",
|
"connect_an_existing_yat" : "Подключить существующий Yat",
|
||||||
"yat_address" : "Yat адрес",
|
"yat_address" : "Yat адрес",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Подключить Yats",
|
||||||
"address_from_yat" : "Этот адрес от ${emoji} на Yat",
|
"address_from_yat" : "Этот адрес от ${emoji} на Yat",
|
||||||
"yat_error" : "Ошибка Yat",
|
"yat_error" : "Ошибка Yat",
|
||||||
"yat_error_content" : "Нет адресов, связанных с этим Yat. Попробуйте другой Yat",
|
"yat_error_content" : "Нет адресов, связанных с этим Yat. Попробуйте другой Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "Одержати свій Yat",
|
"get_your_yat" : "Одержати свій Yat",
|
||||||
"connect_an_existing_yat" : "Підключити існуючий Yat",
|
"connect_an_existing_yat" : "Підключити існуючий Yat",
|
||||||
"yat_address" : "Yat адреса",
|
"yat_address" : "Yat адреса",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "Підключіть Yats",
|
||||||
"address_from_yat" : "Ця адреса від ${emoji} на Yat",
|
"address_from_yat" : "Ця адреса від ${emoji} на Yat",
|
||||||
"yat_error" : "Помилка Yat",
|
"yat_error" : "Помилка Yat",
|
||||||
"yat_error_content" : "Немає адрес, пов'язаних з цим Yat. Спробуйте інший Yat",
|
"yat_error_content" : "Немає адрес, пов'язаних з цим Yat. Спробуйте інший Yat",
|
||||||
|
|
|
@ -502,6 +502,8 @@
|
||||||
"get_your_yat" : "得到你的 Yat",
|
"get_your_yat" : "得到你的 Yat",
|
||||||
"connect_an_existing_yat" : "連接現有 Yat",
|
"connect_an_existing_yat" : "連接現有 Yat",
|
||||||
"yat_address" : "Yat 地址",
|
"yat_address" : "Yat 地址",
|
||||||
|
"yat" : "Yat",
|
||||||
|
"connect_yats": "连接 Yats",
|
||||||
"address_from_yat" : "此地址來自 Yat 上的 ${emoji}",
|
"address_from_yat" : "此地址來自 Yat 上的 ${emoji}",
|
||||||
"yat_error" : "Yat 誤差",
|
"yat_error" : "Yat 誤差",
|
||||||
"yat_error_content" : "沒有與此 Yat 相關聯的地址。 嘗試另一個 Yat",
|
"yat_error_content" : "沒有與此 Yat 相關聯的地址。 嘗試另一個 Yat",
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
MIN_IOS_VERSION=10.0
|
MIN_IOS_VERSION=10.0
|
||||||
BOOST_URL="https://github.com/cake-tech/Apple-Boost-BuildScript.git"
|
BOOST_URL="https://github.com/cake-tech/Apple-Boost-BuildScript.git"
|
||||||
BOOST_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/Apple-Boost-BuildScript"
|
BOOST_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/Apple-Boost-BuildScript"
|
||||||
BOOST_VERSION=1.74.0
|
BOOST_VERSION=1.72.0
|
||||||
BOOST_LIBS="random regex graph random chrono thread filesystem system date_time locale serialization program_options"
|
BOOST_LIBS="random regex graph random chrono thread filesystem system date_time locale serialization program_options"
|
||||||
|
|
||||||
echo "============================ Boost ============================"
|
echo "============================ Boost ============================"
|
||||||
|
|
Loading…
Reference in a new issue