mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 03:29:36 +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
|
||||
- SwiftProtobuf (1.12.0)
|
||||
- SwiftyGif (5.3.0)
|
||||
- uni_links (0.0.1):
|
||||
- Flutter
|
||||
- UnstoppableDomainsResolution (2.0.1):
|
||||
- BigInt
|
||||
- CryptoSwift
|
||||
|
@ -109,6 +111,7 @@ DEPENDENCIES:
|
|||
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
|
||||
- share (from `.symlinks/plugins/share/ios`)
|
||||
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
|
||||
- uni_links (from `.symlinks/plugins/uni_links/ios`)
|
||||
- UnstoppableDomainsResolution (~> 2.0.1)
|
||||
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
||||
- webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
|
||||
|
@ -155,6 +158,8 @@ EXTERNAL SOURCES:
|
|||
:path: ".symlinks/plugins/share/ios"
|
||||
shared_preferences:
|
||||
:path: ".symlinks/plugins/shared_preferences/ios"
|
||||
uni_links:
|
||||
:path: ".symlinks/plugins/uni_links/ios"
|
||||
url_launcher:
|
||||
:path: ".symlinks/plugins/url_launcher/ios"
|
||||
webview_flutter:
|
||||
|
@ -184,10 +189,11 @@ SPEC CHECKSUMS:
|
|||
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
|
||||
SwiftProtobuf: 4ef85479c18ca85b5482b343df9c319c62bda699
|
||||
SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40
|
||||
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
|
||||
UnstoppableDomainsResolution: 856ba43f08b31f3f34157c7257092bd0c6e31cf8
|
||||
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
||||
webview_flutter: 9f491a9b5a66f2573946a389b2677987b0ff8c0b
|
||||
webview_flutter: 3603125dfd3bcbc9d8d418c3f80aeecf331c068b
|
||||
|
||||
PODFILE CHECKSUM: bc2591d23316907c9c90ca1cd2fce063fd866508
|
||||
|
||||
COCOAPODS: 1.10.2
|
||||
COCOAPODS: 1.9.3
|
||||
|
|
|
@ -362,7 +362,7 @@
|
|||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 59;
|
||||
CURRENT_PROJECT_VERSION = 62;
|
||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||
ENABLE_BITCODE = NO;
|
||||
EXCLUDED_SOURCE_FILE_NAMES = "";
|
||||
|
@ -380,7 +380,7 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
MARKETING_VERSION = 4.2.7;
|
||||
MARKETING_VERSION = 4.2.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
|
@ -506,7 +506,7 @@
|
|||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 59;
|
||||
CURRENT_PROJECT_VERSION = 62;
|
||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||
ENABLE_BITCODE = NO;
|
||||
EXCLUDED_SOURCE_FILE_NAMES = "";
|
||||
|
@ -524,7 +524,7 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
MARKETING_VERSION = 4.2.7;
|
||||
MARKETING_VERSION = 4.2.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
|
@ -542,7 +542,7 @@
|
|||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 59;
|
||||
CURRENT_PROJECT_VERSION = 62;
|
||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||
ENABLE_BITCODE = NO;
|
||||
EXCLUDED_SOURCE_FILE_NAMES = "";
|
||||
|
@ -560,7 +560,7 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
MARKETING_VERSION = 4.2.7;
|
||||
MARKETING_VERSION = 4.2.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
|
|
|
@ -20,6 +20,19 @@
|
|||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<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>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
@ -57,19 +70,6 @@
|
|||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</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>
|
||||
<false/>
|
||||
</dict>
|
||||
|
|
|
@ -2,7 +2,9 @@ import 'dart:async';
|
|||
import 'package:cake_wallet/bitcoin/unspent_coins_info.dart';
|
||||
import 'package:cake_wallet/entities/language_service.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/utils/show_pop_up.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.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';
|
||||
|
||||
final navigatorKey = GlobalKey<NavigatorState>();
|
||||
final rootKey = GlobalKey<RootState>();
|
||||
|
||||
Future<void> main() async {
|
||||
try {
|
||||
|
@ -106,6 +109,9 @@ Future<void> main() async {
|
|||
await Hive.openBox<ExchangeTemplate>(ExchangeTemplate.boxName);
|
||||
final unspentCoinsInfoSource =
|
||||
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(
|
||||
sharedPreferences: await SharedPreferences.getInstance(),
|
||||
nodes: nodes,
|
||||
|
@ -203,6 +209,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
|||
Future<void> _handleInitialUri() async {
|
||||
try {
|
||||
final uri = await getInitialUri();
|
||||
print('uri: $uri');
|
||||
if (uri == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -217,6 +224,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
|||
void _handleIncomingLinks() {
|
||||
if (!kIsWeb) {
|
||||
stream = getUriLinksStream().listen((Uri uri) {
|
||||
print('uri: $uri');
|
||||
if (!mounted) return;
|
||||
_fetchEmojiFromUri(uri);
|
||||
}, onError: (Object error) {
|
||||
|
@ -238,6 +246,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
|||
}
|
||||
yatStore.emoji = emoji;
|
||||
yatStore.refreshToken = refreshToken;
|
||||
yatStore.emojiIncommingSC.add(emoji);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -263,6 +272,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
|||
statusBarIconBrightness: statusBarIconBrightness));
|
||||
|
||||
return Root(
|
||||
key: rootKey,
|
||||
authenticationStore: authenticationStore,
|
||||
navigatorKey: navigatorKey,
|
||||
child: MaterialApp(
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import 'dart:async';
|
||||
import 'package:cake_wallet/entities/wallet_type.dart';
|
||||
import 'package:cake_wallet/generated/i18n.dart';
|
||||
import 'package:cake_wallet/routes.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/themes/theme_base.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:smooth_page_indicator/smooth_page_indicator.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:cake_wallet/main.dart';
|
||||
|
||||
class DashboardPage extends BasePage {
|
||||
DashboardPage({
|
||||
|
@ -78,6 +81,7 @@ class DashboardPage extends BasePage {
|
|||
|
||||
var pages = <Widget>[];
|
||||
bool _isEffectsInstalled = false;
|
||||
StreamSubscription<bool> _onInactiveSub;
|
||||
|
||||
@override
|
||||
Widget body(BuildContext context) {
|
||||
|
@ -156,6 +160,8 @@ class DashboardPage extends BasePage {
|
|||
pages.add(BalancePage(dashboardViewModel: walletViewModel));
|
||||
pages.add(TransactionsPage(dashboardViewModel: walletViewModel));
|
||||
|
||||
_isEffectsInstalled = true;
|
||||
|
||||
if (walletViewModel.shouldShowYatPopup) {
|
||||
await Future<void>.delayed(Duration(seconds: 1));
|
||||
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 {
|
||||
|
|
|
@ -150,7 +150,7 @@ class QRWidget extends StatelessWidget {
|
|||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
S.of(context).yat_address,
|
||||
S.of(context).yat,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
|
@ -160,14 +160,21 @@ class QRWidget extends StatelessWidget {
|
|||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 5),
|
||||
child: Text(
|
||||
addressListViewModel.emoji,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 26,
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
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:cake_wallet/routes.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 {
|
||||
Stream<bool> get isInactive => _isInactiveController.stream;
|
||||
StreamController<bool> _isInactiveController;
|
||||
bool _isInactive;
|
||||
bool _postFrameCallback;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_isInactiveController = StreamController<bool>();
|
||||
_isInactive = false;
|
||||
_postFrameCallback = false;
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
|
@ -45,7 +49,7 @@ class RootState extends State<Root> with WidgetsBindingObserver {
|
|||
|
||||
if (!_isInactive &&
|
||||
widget.authenticationStore.state == AuthenticationState.allowed) {
|
||||
setState(() => _isInactive = true);
|
||||
setState(() => _setInactive(true));
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -77,7 +81,12 @@ class RootState extends State<Root> with WidgetsBindingObserver {
|
|||
void _reset() {
|
||||
setState(() {
|
||||
_postFrameCallback = false;
|
||||
_isInactive = false;
|
||||
_setInactive(false);
|
||||
});
|
||||
}
|
||||
|
||||
void _setInactive(bool value) {
|
||||
_isInactive = value;
|
||||
_isInactiveController.add(value);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'dart:ui';
|
||||
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/template_tile.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/screens/send/widgets/confirm_sending_alert.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 {
|
||||
SendPage({@required this.sendViewModel}) :_formKey = GlobalKey<FormState>();
|
||||
|
@ -301,6 +304,10 @@ class SendPage extends BasePage {
|
|||
}
|
||||
|
||||
await sendViewModel.createTransaction();
|
||||
|
||||
if (!sendViewModel.isBatchSending && sendViewModel.hasYat) {
|
||||
Navigator.of(context).push<void>(YatSending.createRoute(sendViewModel));
|
||||
}
|
||||
},
|
||||
text: S.of(context).send,
|
||||
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((_) {
|
||||
showPopUp<void>(
|
||||
context: context,
|
||||
|
|
|
@ -29,6 +29,6 @@ class SettingsLinkProviderCell extends StandardListRow {
|
|||
color: Palette.blueCraiola));
|
||||
|
||||
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';
|
||||
|
||||
class YatAlert extends StatelessWidget {
|
||||
YatAlert(this.yatStore)
|
||||
: baseUrl = YatLink.isDevMode
|
||||
? YatLink.baseDevUrl
|
||||
: YatLink.baseReleaseUrl;
|
||||
YatAlert(this.yatStore);
|
||||
|
||||
final YatStore yatStore;
|
||||
final String baseUrl;
|
||||
static const aspectRatioImage = 1.133;
|
||||
final animation = Lottie.asset('assets/animation/anim1.json');
|
||||
|
||||
|
@ -88,8 +84,15 @@ class YatAlert extends StatelessWidget {
|
|||
.arrow_up_right_square,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
onPressed: () {
|
||||
final url = baseUrl + YatLink.createSuffix;
|
||||
launch(url);
|
||||
var createNewYatUrl = YatLink.startFlowUrl;
|
||||
final createNewYatUrlParameters =
|
||||
yatStore.defineQueryParameters();
|
||||
|
||||
if (createNewYatUrlParameters.isNotEmpty) {
|
||||
createNewYatUrl += '?sub1=' + createNewYatUrlParameters;
|
||||
}
|
||||
|
||||
launch(createNewYatUrl, forceSafariVC: false);
|
||||
}),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 24),
|
||||
|
@ -104,13 +107,13 @@ class YatAlert extends StatelessWidget {
|
|||
.arrow_up_right_square,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
onPressed: () {
|
||||
String url = baseUrl + YatLink.signInSuffix;
|
||||
String url = YatLink.baseUrl + YatLink.signInSuffix;
|
||||
final parameters =
|
||||
yatStore.defineQueryParameters();
|
||||
if (parameters.isNotEmpty) {
|
||||
url += YatLink.queryParameter + parameters;
|
||||
}
|
||||
launch(url);
|
||||
launch(url, forceSafariVC: false);
|
||||
})
|
||||
)
|
||||
]
|
||||
|
|
|
@ -160,8 +160,15 @@ class YatPopup extends StatelessWidget {
|
|||
child: ThirdIntroduction(
|
||||
onClose: onClose,
|
||||
onGet: () {
|
||||
final url = baseUrl + YatLink.createSuffix;
|
||||
launch(url);
|
||||
var createNewYatUrl = YatLink.startFlowUrl;
|
||||
final createNewYatUrlParameters = dashboardViewModel.
|
||||
yatStore.defineQueryParameters();
|
||||
|
||||
if (createNewYatUrlParameters.isNotEmpty) {
|
||||
createNewYatUrl += '?sub1=' + createNewYatUrlParameters;
|
||||
}
|
||||
|
||||
launch(createNewYatUrl, forceSafariVC: false);
|
||||
},
|
||||
onConnect: () {
|
||||
String url = baseUrl + YatLink.signInSuffix;
|
||||
|
@ -170,7 +177,7 @@ class YatPopup extends StatelessWidget {
|
|||
if (parameters.isNotEmpty) {
|
||||
url += YatLink.queryParameter + parameters;
|
||||
}
|
||||
launch(url);
|
||||
launch(url, forceSafariVC: false);
|
||||
}
|
||||
))
|
||||
: 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 'package:cake_wallet/store/yat/yat_exception.dart';
|
||||
import 'package:http/http.dart';
|
||||
import 'dart:async';
|
||||
|
||||
part 'yat_store.g.dart';
|
||||
|
||||
class YatLink {
|
||||
static const partnerId = 'CW';
|
||||
static const baseDevUrl = 'https://yat.fyi';
|
||||
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 managePath = '/partner/$partnerId/manage';
|
||||
static const queryParameter = '?addresses=';
|
||||
static const requestDevUrl = 'https://a.yat.fyi/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'],
|
||||
"BTC" : ['0x1003'], "LTC" : ['0x3fff']};
|
||||
|
||||
static String get baseUrl => YatLink.isDevMode
|
||||
? YatLink.baseDevUrl
|
||||
: YatLink.baseReleaseUrl;
|
||||
}
|
||||
|
||||
Future<List<String>> fetchYatAddress(String emojiId, String ticker) async {
|
||||
|
@ -65,6 +73,18 @@ Future<List<String>> fetchYatAddress(String emojiId, String ticker) async {
|
|||
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;
|
||||
|
||||
abstract class YatStoreBase with Store {
|
||||
|
@ -74,6 +94,7 @@ abstract class YatStoreBase with Store {
|
|||
refreshToken = _wallet?.walletInfo?.yatToken ?? '';
|
||||
reaction((_) => appStore.wallet, _onWalletChange);
|
||||
reaction((_) => emoji, (String emoji) => _onEmojiChange());
|
||||
emojiIncommingSC = StreamController<String>();
|
||||
}
|
||||
|
||||
AppStore appStore;
|
||||
|
@ -84,6 +105,10 @@ abstract class YatStoreBase with Store {
|
|||
@observable
|
||||
String refreshToken;
|
||||
|
||||
StreamController<String> emojiIncommingSC;
|
||||
|
||||
Stream<String> get emojiIncommingStream => emojiIncommingSC.stream;
|
||||
|
||||
@observable
|
||||
WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo>
|
||||
_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/settings_store.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';
|
||||
|
||||
|
@ -134,6 +135,11 @@ abstract class SendViewModelBase with Store {
|
|||
@computed
|
||||
bool get isElectrumWallet => _wallet is ElectrumWallet;
|
||||
|
||||
bool get hasYat
|
||||
=> outputs.any((out) => out.isParsedAddress
|
||||
&& out.parsedAddress.parseFrom == ParseFrom.yatRecord);
|
||||
|
||||
|
||||
WalletType get walletType => _wallet.type;
|
||||
final WalletBase _wallet;
|
||||
final SettingsStore _settingsStore;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:cake_wallet/src/screens/yat/yat_alert.dart';
|
||||
import 'package:cake_wallet/store/yat/yat_store.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:mobx/mobx.dart';
|
||||
import 'package:package_info/package_info.dart';
|
||||
|
@ -69,6 +70,31 @@ abstract class SettingsViewModelBase with Store {
|
|||
_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 = [
|
||||
[
|
||||
PickerListItem(
|
||||
|
@ -158,16 +184,23 @@ abstract class SettingsViewModelBase with Store {
|
|||
_settingsStore.currentTheme = theme)
|
||||
],
|
||||
[
|
||||
RegularListItem(
|
||||
title: S.current.manage_yats,
|
||||
handler: (BuildContext context) async {
|
||||
await showPopUp<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return YatAlert(_yatStore);
|
||||
});
|
||||
},
|
||||
),
|
||||
if (_yatStore.emoji.isNotEmpty) ...[
|
||||
LinkListItem(
|
||||
title: S.current.manage_yats,
|
||||
link: manageYatUrl,
|
||||
linkTitle: ''),
|
||||
] else ...[
|
||||
LinkListItem(
|
||||
title: S.current.connect_yats,
|
||||
link: connectYatUrl,
|
||||
linkTitle: ''),
|
||||
LinkListItem(
|
||||
title: 'Create new Yats',
|
||||
link: createNewYatUrl,
|
||||
linkTitle: '')
|
||||
]
|
||||
],
|
||||
[
|
||||
RegularListItem(
|
||||
title: S.current.settings_terms_and_conditions,
|
||||
handler: (BuildContext context) =>
|
||||
|
|
54
pubspec.lock
54
pubspec.lock
|
@ -200,7 +200,7 @@ packages:
|
|||
name: cli_util
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
version: "0.3.5"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -228,21 +228,21 @@ packages:
|
|||
name: connectivity
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.3"
|
||||
version: "3.0.6"
|
||||
connectivity_for_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: connectivity_for_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.0"
|
||||
version: "0.4.0+1"
|
||||
connectivity_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: connectivity_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
version: "0.2.1+2"
|
||||
connectivity_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -277,7 +277,7 @@ packages:
|
|||
name: cupertino_icons
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
version: "1.0.3"
|
||||
cw_monero:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -312,7 +312,7 @@ packages:
|
|||
name: devicelocale
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.1"
|
||||
version: "0.4.3"
|
||||
dio:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -361,7 +361,7 @@ packages:
|
|||
name: file
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.1.0"
|
||||
version: "6.1.2"
|
||||
file_picker:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -420,7 +420,7 @@ packages:
|
|||
name: flutter_plugin_android_lifecycle
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "2.0.3"
|
||||
flutter_secure_storage:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -443,7 +443,7 @@ packages:
|
|||
name: flutter_spinkit
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.0.0"
|
||||
version: "5.1.0"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
|
@ -460,7 +460,7 @@ packages:
|
|||
name: get_it
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.0.0"
|
||||
version: "6.1.1"
|
||||
glob:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -565,14 +565,14 @@ packages:
|
|||
name: keyboard_actions
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.4.0"
|
||||
version: "3.4.4"
|
||||
local_auth:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: local_auth
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.6"
|
||||
version: "1.1.7"
|
||||
logging:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -607,7 +607,7 @@ packages:
|
|||
name: mime
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
version: "1.0.1"
|
||||
mobx:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -642,7 +642,7 @@ packages:
|
|||
name: package_info
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.0.2"
|
||||
password:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -712,7 +712,7 @@ packages:
|
|||
name: pedantic
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.11.0"
|
||||
version: "1.11.1"
|
||||
permission_handler:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -740,7 +740,7 @@ packages:
|
|||
name: platform
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
version: "3.0.2"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -768,14 +768,14 @@ packages:
|
|||
name: process
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.2.1"
|
||||
version: "4.2.3"
|
||||
protobuf:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: protobuf
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.3"
|
||||
version: "1.1.4"
|
||||
provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -789,7 +789,7 @@ packages:
|
|||
name: pub_semver
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.1.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -803,7 +803,7 @@ packages:
|
|||
name: qr
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.1.0"
|
||||
quiver:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -824,7 +824,7 @@ packages:
|
|||
name: share
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "2.0.4"
|
||||
shared_preferences:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -990,21 +990,21 @@ packages:
|
|||
name: url_launcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.0.3"
|
||||
version: "6.0.5"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_linux
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.0.2"
|
||||
url_launcher_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.0.2"
|
||||
url_launcher_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1018,14 +1018,14 @@ packages:
|
|||
name: url_launcher_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.0.4"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_windows
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.0.2"
|
||||
uuid:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -1060,7 +1060,7 @@ packages:
|
|||
name: webview_flutter
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.2"
|
||||
version: "2.0.13"
|
||||
win32:
|
||||
dependency: transitive
|
||||
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.",
|
||||
"get_your_yat" : "Holen Sie sich Ihre Yat",
|
||||
"connect_an_existing_yat" : "Verbinden Sie ein vorhandenes Yat",
|
||||
"connect_yats": "Yats verbinden",
|
||||
"yat_address" : "Yat-Adresse",
|
||||
"yat" : "Yat",
|
||||
"address_from_yat" : "Diese Adresse ist von ${emoji} auf Yat",
|
||||
"yat_error" : "Yat-Fehler",
|
||||
"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.",
|
||||
"get_your_yat" : "Get your Yat",
|
||||
"connect_an_existing_yat" : "Connect an existing Yat",
|
||||
"connect_yats": "Connect Yats",
|
||||
"yat_address" : "Yat Address",
|
||||
"yat" : "Yat",
|
||||
"address_from_yat" : "This address is from ${emoji} on Yat",
|
||||
"yat_error" : "Yat error",
|
||||
"yat_error_content" : "No addresses linked with this Yat. Try another Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "Obtén tu Yat",
|
||||
"connect_an_existing_yat" : "Conectar un Yat existente",
|
||||
"yat_address" : "Dirección de Yat",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Conectar Yats",
|
||||
"address_from_yat" : "Esta dirección es de ${emoji} en Yat",
|
||||
"yat_error" : "Error de Yat",
|
||||
"yat_error_content" : "No hay direcciones vinculadas con este Yat. Prueba con otro Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "अपना प्राप्त करें Yat",
|
||||
"connect_an_existing_yat" : "मौजूदा Yat कनेक्ट करें",
|
||||
"yat_address" : "Yat पता",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "कनेक्ट Yats",
|
||||
"address_from_yat" : "यह पता ${emoji} से है Yat",
|
||||
"yat_error" : "Yat त्रुटि",
|
||||
"yat_error_content" : "इसके साथ कोई पता लिंक नहीं है Yat. कोई दूसरा आज़माएं Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "Uzmi svoj Yat",
|
||||
"connect_an_existing_yat" : "Povežite postojeći Yat",
|
||||
"yat_address" : "Yat adresa",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Povežite Yats",
|
||||
"address_from_yat" : "To je adresa od ${emoji} na Yat",
|
||||
"yat_error" : "Yat pogreška",
|
||||
"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",
|
||||
"connect_an_existing_yat" : "Collegare un Yat esistente",
|
||||
"yat_address" : "Indirizzo Yat",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Connetti Yats",
|
||||
"address_from_yat" : "Questo indirizzo è da ${emoji} in poi Yat",
|
||||
"yat_error" : "Yat errore",
|
||||
"yat_error_content" : "Nessun indirizzo collegato a questo Yat. Prova un altro Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "あなたのYatを入手してください",
|
||||
"connect_an_existing_yat" : "既存のYatを接続します",
|
||||
"yat_address" : "Yat住所",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Yatsを接続します",
|
||||
"address_from_yat" : "このアドレスは ${emoji} からのものです Yat",
|
||||
"yat_error" : "Yatエラー",
|
||||
"yat_error_content" : "このYatにリンクされているアドレスはありません。別のYatを試してください",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "당신의 Yat를 얻으십시오",
|
||||
"connect_an_existing_yat" : "기존 Yat 연결",
|
||||
"yat_address" : "Yat 주소",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "야츠 연결",
|
||||
"address_from_yat" : "이 주소는 ${emoji} 의 주소입니다 Yat",
|
||||
"yat_error" : "Yat 오류",
|
||||
"yat_error_content" : "이 Yat와 연결된 주소가 없습니다. 다른 Yat 시도",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "Haal je Yato",
|
||||
"connect_an_existing_yat" : "Verbind een bestaande Yat",
|
||||
"yat_address" : "Yat-adres",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Verbind Yats",
|
||||
"address_from_yat" : "Dit adres is van ${emoji} op Yat",
|
||||
"yat_error" : "Yat fout",
|
||||
"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",
|
||||
"connect_an_existing_yat" : "Podłącz istniejący Yat",
|
||||
"yat_address" : "Adres Yat",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Połącz Yats",
|
||||
"address_from_yat" : "Ten adres jest od ${emoji} na Yat",
|
||||
"yat_error" : "Pomyłka Yata",
|
||||
"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",
|
||||
"connect_an_existing_yat" : "Conecte um Yat existente",
|
||||
"yat_address" : "Endereço Yat",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Connect Yats",
|
||||
"address_from_yat" : "Este endereço é de ${emoji} em Yat",
|
||||
"yat_error" : "Yat erro",
|
||||
"yat_error_content" : "Nenhum endereço vinculado a este Yat. Tente outro Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "Получить свой Yat",
|
||||
"connect_an_existing_yat" : "Подключить существующий Yat",
|
||||
"yat_address" : "Yat адрес",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Подключить Yats",
|
||||
"address_from_yat" : "Этот адрес от ${emoji} на Yat",
|
||||
"yat_error" : "Ошибка Yat",
|
||||
"yat_error_content" : "Нет адресов, связанных с этим Yat. Попробуйте другой Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "Одержати свій Yat",
|
||||
"connect_an_existing_yat" : "Підключити існуючий Yat",
|
||||
"yat_address" : "Yat адреса",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "Підключіть Yats",
|
||||
"address_from_yat" : "Ця адреса від ${emoji} на Yat",
|
||||
"yat_error" : "Помилка Yat",
|
||||
"yat_error_content" : "Немає адрес, пов'язаних з цим Yat. Спробуйте інший Yat",
|
||||
|
|
|
@ -502,6 +502,8 @@
|
|||
"get_your_yat" : "得到你的 Yat",
|
||||
"connect_an_existing_yat" : "連接現有 Yat",
|
||||
"yat_address" : "Yat 地址",
|
||||
"yat" : "Yat",
|
||||
"connect_yats": "连接 Yats",
|
||||
"address_from_yat" : "此地址來自 Yat 上的 ${emoji}",
|
||||
"yat_error" : "Yat 誤差",
|
||||
"yat_error_content" : "沒有與此 Yat 相關聯的地址。 嘗試另一個 Yat",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
MIN_IOS_VERSION=10.0
|
||||
BOOST_URL="https://github.com/cake-tech/Apple-Boost-BuildScript.git"
|
||||
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"
|
||||
|
||||
echo "============================ Boost ============================"
|
||||
|
|
Loading…
Reference in a new issue