Fix some colors (#2293)

* Fix some colors * fix(theme-updates): Modify condition for theme border style display when hasUnderlineBorder is true * fix(themes-updates): Adjust switch colors and modify payjoin hint text * fix: Crash report relating to success image display on successful exchange * fix(theme-updates): Adjust animated text max width to prevent overflows * fix(theme-updates): Adjust fee picker styling * fix(themes-updates): Remove text overflow on welcome screen animation --------- Co-authored-by: Blazebrain <davidadegoke16@gmail.com>

tuxsudo committed May 26, 2025 at 21:35 UTC 78bb17053374904b56d2bf8513753f35f75be94c
43 files changed +278 -230
lib/src/screens/dashboard/pages/balance/crypto_balance_widget.dart
+23 -9
@@ -247,9 +247,11 @@ class CryptoBalanceWidget extends StatelessWidget {
247 ),
248 Padding(
249 padding: const EdgeInsets.symmetric(horizontal: 4),
250 - child: Icon(Icons.help_outline,
251 - size: 16,
252 - color: Theme.of(context).colorScheme.onSurfaceVariant),
250 + child: Icon(
251 + Icons.help_outline,
252 + size: 16,
253 + color: Theme.of(context).colorScheme.onSurfaceVariant,
254 + ),
255 )
256 ],
257 ),
@@ -257,7 +259,7 @@ class CryptoBalanceWidget extends StatelessWidget {
259 Observer(
260 builder: (_) => StandardSwitch(
261 value: dashboardViewModel.silentPaymentsScanningActive,
260 - onTaped: () => _toggleSilentPaymentsScanning(context),
262 + onTapped: () => _toggleSilentPaymentsScanning(context),
263 ),
264 )
265 ],
@@ -333,13 +335,25 @@ class CryptoBalanceWidget extends StatelessWidget {
335 Uri.parse("https://docs.cakewallet.com/cryptos/bitcoin/#payjoin"),
336 mode: LaunchMode.externalApplication,
337 ),
336 - child: Text(
337 - S.of(context).learn_more,
338 - style: Theme.of(context).textTheme.bodySmall?.copyWith(
338 + child: Row(
339 + children: [
340 + Text(
341 + S.of(context).what_is_payjoin,
342 + style: Theme.of(context).textTheme.bodySmall?.copyWith(
343 + color: Theme.of(context).colorScheme.onSurfaceVariant,
344 + height: 1,
345 + ),
346 + softWrap: true,
347 + ),
348 + Padding(
349 + padding: const EdgeInsets.symmetric(horizontal: 4),
350 + child: Icon(
351 + Icons.help_outline,
352 + size: 16,
353 color: Theme.of(context).colorScheme.onSurfaceVariant,
340 - height: 1,
354 ),
342 - softWrap: true,
355 + )
356 + ],
357 ),
358 ),
359 image: 'assets/images/payjoin.png',
lib/src/screens/exchange/widgets/mobile_exchange_cards_section.dart
+1 -1
@@ -37,7 +37,7 @@ class MobileExchangeCardsSection extends StatelessWidget {
37 bottomLeft: Radius.circular(24),
38 bottomRight: Radius.circular(24),
39 ),
40 - color: Theme.of(context).colorScheme.surfaceContainerLow,
40 + color: Theme.of(context).colorScheme.surfaceContainerHighest,
41 ),
42 padding: EdgeInsets.fromLTRB(24, 105, 24, 24),
43 child: Column(
lib/src/screens/exchange_trade/exchange_trade_page.dart
+122 -116
@@ -210,127 +210,133 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
210 return;
211 }
212
213 - _exchangeStateReaction = reaction((_) => this.widget.exchangeTradeViewModel.sendViewModel.state,
214 - (ExecutionState state) async {
215 - if (dialogContext != null && dialogContext?.mounted == true) {
216 - Navigator.of(dialogContext!).pop();
217 - }
218 -
219 - if (state is! IsExecutingState &&
220 - loadingBottomSheetContext != null &&
221 - loadingBottomSheetContext!.mounted) {
222 - Navigator.of(loadingBottomSheetContext!).pop();
223 - }
224 -
225 - if (state is FailureState) {
226 - WidgetsBinding.instance.addPostFrameCallback((_) {
227 - showPopUp<void>(
228 - context: context,
229 - builder: (BuildContext popupContext) {
230 - return AlertWithOneAction(
231 - key: ValueKey('exchange_trade_page_send_failure_dialog_key'),
232 - buttonKey: ValueKey('exchange_trade_page_send_failure_dialog_button_key'),
233 - alertTitle: S.of(popupContext).error,
234 - alertContent: state.error,
235 - buttonText: S.of(popupContext).ok,
236 - buttonAction: () => Navigator.of(popupContext).pop());
237 - });
238 - });
239 - }
240 -
241 - if (state is IsExecutingState) {
242 - // wait a bit to avoid showing the loading dialog if transaction is failed
243 - await Future.delayed(const Duration(milliseconds: 300));
244 - final currentState = widget.exchangeTradeViewModel.sendViewModel.state;
245 - if (currentState is ExecutedSuccessfullyState || currentState is FailureState) {
246 - return;
213 + _exchangeStateReaction = reaction(
214 + (_) => this.widget.exchangeTradeViewModel.sendViewModel.state,
215 + (ExecutionState state) async {
216 + if (dialogContext != null && dialogContext?.mounted == true) {
217 + Navigator.of(dialogContext!).pop();
218 }
219
249 - WidgetsBinding.instance.addPostFrameCallback((_) {
250 - if (context.mounted) {
251 - showModalBottomSheet<void>(
252 - context: context,
253 - isDismissible: false,
254 - builder: (BuildContext context) {
255 - loadingBottomSheetContext = context;
256 - return LoadingBottomSheet(
257 - titleText: S.of(context).generating_transaction,
258 - );
259 - },
260 - );
261 - }
262 - });
263 - }
264 -
265 - if (state is ExecutedSuccessfullyState) {
266 - WidgetsBinding.instance.addPostFrameCallback((_) {
267 - if (context.mounted) {
268 - showModalBottomSheet<void>(
269 - context: context,
270 - isDismissible: false,
271 - isScrollControlled: true,
272 - builder: (BuildContext bottomSheetContext) {
273 - return ConfirmSendingBottomSheet(
274 - key: ValueKey('exchange_trade_page_confirm_sending_bottom_sheet_key'),
275 - currentTheme: widget.currentTheme,
276 - walletType: widget.exchangeTradeViewModel.sendViewModel.walletType,
277 - titleText: S.of(bottomSheetContext).confirm_transaction,
278 - titleIconPath:
279 - widget.exchangeTradeViewModel.sendViewModel.selectedCryptoCurrency.iconPath,
280 - currency: widget.exchangeTradeViewModel.sendViewModel.selectedCryptoCurrency,
281 - amount: S.of(bottomSheetContext).send_amount,
282 - amountValue: widget
283 - .exchangeTradeViewModel.sendViewModel.pendingTransaction!.amountFormatted,
284 - fiatAmountValue: widget
285 - .exchangeTradeViewModel.sendViewModel.pendingTransactionFiatAmountFormatted,
286 - fee: isEVMCompatibleChain(widget.exchangeTradeViewModel.sendViewModel.walletType)
287 - ? S.of(bottomSheetContext).send_estimated_fee
288 - : S.of(bottomSheetContext).send_fee,
289 - feeValue:
290 - widget.exchangeTradeViewModel.sendViewModel.pendingTransaction!.feeFormatted,
291 - feeFiatAmount: widget.exchangeTradeViewModel.sendViewModel
292 - .pendingTransactionFeeFiatAmountFormatted,
293 - outputs: widget.exchangeTradeViewModel.sendViewModel.outputs,
294 - onSlideComplete: () async {
295 - Navigator.of(bottomSheetContext).pop();
296 - widget.exchangeTradeViewModel.sendViewModel.commitTransaction(context);
297 - },
298 - );
299 - },
300 - );
220 + if (state is! IsExecutingState &&
221 + loadingBottomSheetContext != null &&
222 + loadingBottomSheetContext!.mounted) {
223 + Navigator.of(loadingBottomSheetContext!).pop();
224 + }
225 +
226 + if (state is FailureState) {
227 + WidgetsBinding.instance.addPostFrameCallback((_) {
228 + showPopUp<void>(
229 + context: context,
230 + builder: (BuildContext popupContext) {
231 + return AlertWithOneAction(
232 + key: ValueKey('exchange_trade_page_send_failure_dialog_key'),
233 + buttonKey: ValueKey('exchange_trade_page_send_failure_dialog_button_key'),
234 + alertTitle: S.of(popupContext).error,
235 + alertContent: state.error,
236 + buttonText: S.of(popupContext).ok,
237 + buttonAction: () => Navigator.of(popupContext).pop());
238 + });
239 + });
240 + }
241 +
242 + if (state is IsExecutingState) {
243 + // wait a bit to avoid showing the loading dialog if transaction is failed
244 + await Future.delayed(const Duration(milliseconds: 300));
245 + final currentState = widget.exchangeTradeViewModel.sendViewModel.state;
246 + if (currentState is ExecutedSuccessfullyState || currentState is FailureState) {
247 + return;
248 }
302 - });
303 - }
304 -
305 - if (state is TransactionCommitted) {
306 - WidgetsBinding.instance.addPostFrameCallback((_) async {
307 - if (!mounted) return;
308 -
309 - await showModalBottomSheet<void>(
310 - context: context,
311 - isScrollControlled: true,
312 - builder: (BuildContext bottomSheetContext) {
313 - return InfoBottomSheet(
314 - currentTheme: widget.currentTheme,
315 - titleText: S.of(bottomSheetContext).transaction_sent,
316 - contentImage: 'assets/images/birthday_cake.svg',
317 - actionButtonText: S.of(bottomSheetContext).close,
318 - actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'),
319 - actionButton: () {
320 - Navigator.of(bottomSheetContext).pop();
321 - if (mounted) {
322 - Navigator.of(context).pushNamedAndRemoveUntil(
323 - Routes.dashboard,
324 - (route) => false,
325 - );
326 - }
327 - RequestReviewHandler.requestReview();
328 - });
249 +
250 + WidgetsBinding.instance.addPostFrameCallback((_) {
251 + if (context.mounted) {
252 + showModalBottomSheet<void>(
253 + context: context,
254 + isDismissible: false,
255 + builder: (BuildContext context) {
256 + loadingBottomSheetContext = context;
257 + return LoadingBottomSheet(
258 + titleText: S.of(context).generating_transaction,
259 + );
260 + },
261 + );
262 + }
263 + });
264 + }
265 +
266 + if (state is ExecutedSuccessfullyState) {
267 + WidgetsBinding.instance.addPostFrameCallback((_) {
268 + if (context.mounted) {
269 + showModalBottomSheet<void>(
270 + context: context,
271 + isDismissible: false,
272 + isScrollControlled: true,
273 + builder: (BuildContext bottomSheetContext) {
274 + return ConfirmSendingBottomSheet(
275 + key: ValueKey('exchange_trade_page_confirm_sending_bottom_sheet_key'),
276 + currentTheme: widget.currentTheme,
277 + walletType: widget.exchangeTradeViewModel.sendViewModel.walletType,
278 + titleText: S.of(bottomSheetContext).confirm_transaction,
279 + titleIconPath:
280 + widget.exchangeTradeViewModel.sendViewModel.selectedCryptoCurrency.iconPath,
281 + currency: widget.exchangeTradeViewModel.sendViewModel.selectedCryptoCurrency,
282 + amount: S.of(bottomSheetContext).send_amount,
283 + amountValue: widget
284 + .exchangeTradeViewModel.sendViewModel.pendingTransaction!.amountFormatted,
285 + fiatAmountValue: widget
286 + .exchangeTradeViewModel.sendViewModel.pendingTransactionFiatAmountFormatted,
287 + fee:
288 + isEVMCompatibleChain(widget.exchangeTradeViewModel.sendViewModel.walletType)
289 + ? S.of(bottomSheetContext).send_estimated_fee
290 + : S.of(bottomSheetContext).send_fee,
291 + feeValue: widget
292 + .exchangeTradeViewModel.sendViewModel.pendingTransaction!.feeFormatted,
293 + feeFiatAmount: widget.exchangeTradeViewModel.sendViewModel
294 + .pendingTransactionFeeFiatAmountFormatted,
295 + outputs: widget.exchangeTradeViewModel.sendViewModel.outputs,
296 + onSlideComplete: () async {
297 + Navigator.of(bottomSheetContext).pop();
298 + widget.exchangeTradeViewModel.sendViewModel.commitTransaction(context);
299 + },
300 + );
301 + },
302 + );
303 + }
304 + });
305 + }
306 +
307 + if (state is TransactionCommitted) {
308 + WidgetsBinding.instance.addPostFrameCallback(
309 + (_) async {
310 + if (!mounted) return;
311 +
312 + await showModalBottomSheet<void>(
313 + context: context,
314 + isScrollControlled: true,
315 + builder: (BuildContext bottomSheetContext) {
316 + return InfoBottomSheet(
317 + currentTheme: widget.currentTheme,
318 + titleText: S.of(bottomSheetContext).transaction_sent,
319 + contentImage: 'assets/images/birthday_cake.png',
320 + actionButtonText: S.of(bottomSheetContext).close,
321 + actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'),
322 + actionButton: () {
323 + Navigator.of(bottomSheetContext).pop();
324 + if (mounted) {
325 + Navigator.of(context).pushNamedAndRemoveUntil(
326 + Routes.dashboard,
327 + (route) => false,
328 + );
329 + }
330 + RequestReviewHandler.requestReview();
331 + },
332 + );
333 + },
334 + );
335 },
336 );
331 - });
332 - }
333 - });
337 + }
338 + },
339 + );
340
341 _effectsInstalled = true;
342 }
lib/src/screens/release_notes/release_notes_screen.dart
+3 -3
@@ -33,9 +33,9 @@ class ReleaseNotesScreen extends StatelessWidget {
33 decoration: BoxDecoration(
34 borderRadius: BorderRadius.circular(30.0),
35 gradient: LinearGradient(colors: [
36 - Theme.of(context).colorScheme.primaryContainer,
37 - Theme.of(context).colorScheme.secondaryContainer,
38 - ], begin: Alignment.centerLeft, end: Alignment.centerRight)),
36 + Theme.of(context).colorScheme.surface,
37 + Theme.of(context).colorScheme.surfaceContainer,
38 + ], begin: Alignment.topLeft, end: Alignment.bottomRight)),
39 child: Padding(
40 padding: const EdgeInsets.symmetric(horizontal: 24.0),
41 child: Stack(
lib/src/screens/settings/widgets/settings_switcher_cell.dart
+5 -5
@@ -18,8 +18,10 @@ class SettingsSwitcherCell extends StandardListRow {
18 final Widget? leading;
19
20 @override
21 - Widget buildTrailing(BuildContext context) =>
22 - StandardSwitch(value: value, onTaped: () => onValueChange?.call(context, !value));
21 + Widget buildTrailing(BuildContext context) => StandardSwitch(
22 + value: value,
23 + onTapped: () => onValueChange?.call(context, !value),
24 + );
25
26 @override
27 Widget build(BuildContext context) {
@@ -40,8 +42,7 @@ class SettingsSwitcherCell extends StandardListRow {
42 //backgroundColor: MaterialStateProperty.all(Theme.of(context).colorScheme.surfaceContainer),
43 shape: WidgetStateProperty.all(
44 RoundedRectangleBorder(
43 - borderRadius: BorderRadius.all(Radius.circular(10)
44 - ),
45 + borderRadius: BorderRadius.all(Radius.circular(10)),
46 ),
47 ),
48 ),
@@ -57,7 +58,6 @@ class SettingsSwitcherCell extends StandardListRow {
58 );
59 }
60
60 -
61 @override
62 Widget? buildLeading(BuildContext context) => leading;
63 }
lib/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart
+26 -22
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
3
4 class UnspentCoinsSwitchRow extends StatelessWidget {
5 UnspentCoinsSwitchRow(
6 - {required this.title,
7 - required this.switchValue,
8 - required this.onSwitchValueChange,
9 - this.titleFontSize = 14});
6 + {required this.title,
7 + required this.switchValue,
8 + required this.onSwitchValueChange,
9 + this.titleFontSize = 14});
10
11 final String title;
12 final double titleFontSize;
@@ -19,25 +19,29 @@ class UnspentCoinsSwitchRow extends StatelessWidget {
19 width: double.infinity,
20 color: Theme.of(context).colorScheme.surface,
21 child: Padding(
22 - padding:
23 - const EdgeInsets.only(left: 24, top: 16, bottom: 16, right: 24),
22 + padding: const EdgeInsets.only(left: 24, top: 16, bottom: 16, right: 24),
23 child: Column(
25 - crossAxisAlignment: CrossAxisAlignment.start,
26 - children: <Widget>[
27 - Text(title,
28 - style: Theme.of(context).textTheme.bodyMedium!.copyWith(
29 - fontSize: titleFontSize,
30 - fontWeight: FontWeight.w500,
31 - color: Theme.of(context).colorScheme.onSurfaceVariant),
32 - textAlign: TextAlign.left),
33 - Padding(
34 - padding: EdgeInsets.only(top: 12),
35 - child: StandardSwitch(
36 - value: switchValue,
37 - onTaped: () => onSwitchValueChange(!switchValue))
38 - )
39 - ]),
24 + crossAxisAlignment: CrossAxisAlignment.start,
25 + children: <Widget>[
26 + Text(
27 + title,
28 + style: Theme.of(context).textTheme.bodyMedium!.copyWith(
29 + fontSize: titleFontSize,
30 + fontWeight: FontWeight.w500,
31 + color: Theme.of(context).colorScheme.onSurfaceVariant,
32 + ),
33 + textAlign: TextAlign.left,
34 + ),
35 + Padding(
36 + padding: EdgeInsets.only(top: 12),
37 + child: StandardSwitch(
38 + value: switchValue,
39 + onTapped: () => onSwitchValueChange(!switchValue),
40 + ),
41 + )
42 + ],
43 + ),
44 ),
45 );
46 }
43 -}
\ No newline at end of file
47 +}
lib/src/screens/welcome/create_pin_welcome_page.dart
+2 -1
@@ -164,6 +164,7 @@ class CreatePinWelcomePage extends BasePage {
164 if (!isMoneroOnly)
165 Row(
166 mainAxisAlignment: MainAxisAlignment.center,
167 + mainAxisSize: MainAxisSize.min,
168 children: [
169 AnimatedTypingText(
170 words: [S.current.payments, S.current.privacy, S.current.security],
@@ -175,7 +176,7 @@ class CreatePinWelcomePage extends BasePage {
176 cursorHeight: 24,
177 cursorWidth: 4,
178 ),
178 - SizedBox(width: 8),
179 + SizedBox(width: 4),
180 Text(
181 S.current.made_easy,
182 style: Theme.of(context).textTheme.titleLarge?.copyWith(
lib/src/widgets/animated_typing_text.dart
+29 -55
@@ -33,10 +33,9 @@ class _AnimatedTypingTextState extends State<AnimatedTypingText> with TickerProv
33
34 String _displayText = '';
35
36 - double _maxTextWidth = 0;
36 int _currentWordIndex = 0;
37 int _currentCharIndex = 0;
39 -
38 +
39 bool _isTyping = true;
40 bool _isPaused = false;
41 bool _isWaitingForPause = false;
@@ -61,10 +60,6 @@ class _AnimatedTypingTextState extends State<AnimatedTypingText> with TickerProv
60 ),
61 );
62
64 - WidgetsBinding.instance.addPostFrameCallback((_) {
65 - _calculateMaxTextWidth();
66 - });
67 -
63 _controller.addStatusListener((status) {
64 if (status == AnimationStatus.completed) {
65 _updateText();
@@ -78,24 +73,6 @@ class _AnimatedTypingTextState extends State<AnimatedTypingText> with TickerProv
73 _controller.forward();
74 }
75
81 - void _calculateMaxTextWidth() {
82 - final textStyle = widget.style ?? DefaultTextStyle.of(context).style;
83 - double maxWidth = 0;
84 - final textPainter = TextPainter(
85 - textDirection: TextDirection.ltr,
86 - );
87 - for (final word in widget.words) {
88 - textPainter.text = TextSpan(text: word, style: textStyle);
89 - textPainter.layout();
90 - if (textPainter.width > maxWidth) {
91 - maxWidth = textPainter.width;
92 - }
93 - }
94 - setState(() {
95 - _maxTextWidth = maxWidth;
96 - });
97 - }
98 -
76 void _updateText() {
77 if (_isWaitingForPause) return;
78
@@ -157,38 +134,35 @@ class _AnimatedTypingTextState extends State<AnimatedTypingText> with TickerProv
134
135 @override
136 Widget build(BuildContext context) {
160 - return SizedBox(
161 - width: _maxTextWidth + widget.cursorWidth,
162 - child: Stack(
163 - clipBehavior: Clip.none,
164 - children: [
165 - // Fixed cursor position
166 - Positioned(
167 - right: 0,
168 - child: AnimatedBuilder(
169 - animation: _cursorAnimation,
170 - builder: (context, child) {
171 - return Opacity(
172 - opacity: _cursorAnimation.value,
173 - child: Container(
174 - width: widget.cursorWidth,
175 - height: widget.cursorHeight,
176 - color: widget.cursorColor,
177 - ),
178 - );
179 - },
180 - ),
137 + return Stack(
138 + clipBehavior: Clip.none,
139 + children: [
140 + // Fixed cursor position
141 + Positioned(
142 + right: 0,
143 + child: AnimatedBuilder(
144 + animation: _cursorAnimation,
145 + builder: (context, child) {
146 + return Opacity(
147 + opacity: _cursorAnimation.value,
148 + child: Container(
149 + width: widget.cursorWidth,
150 + height: widget.cursorHeight,
151 + color: widget.cursorColor,
152 + ),
153 + );
154 + },
155 ),
182 - // Animated text
183 - Align(
184 - alignment: Alignment.centerRight,
185 - child: Text(
186 - _displayText + ' ',
187 - style: widget.style,
188 - ),
156 + ),
157 + // Animated text
158 + Align(
159 + alignment: Alignment.centerRight,
160 + child: Text(
161 + _displayText + ' ',
162 + style: widget.style,
163 ),
190 - ],
191 - ),
164 + ),
165 + ],
166 );
167 }
194 -}
\ No newline at end of file
168 +}
lib/src/widgets/base_text_form_field.dart
+10 -1
@@ -135,6 +135,15 @@ class BaseTextFormField extends StatelessWidget {
135 hintText: hasUnderlineBorder ? hintText : null,
136 labelText: !hasUnderlineBorder ? hintText : null,
137 labelStyle: !hasUnderlineBorder ? placeholderTextStyle : null,
138 + border: hasUnderlineBorder
139 + ? UnderlineInputBorder(
140 + borderSide: BorderSide(
141 + color: Theme.of(context).colorScheme.outlineVariant,
142 + style: borderWidth == 0.0 ? BorderStyle.none : BorderStyle.solid,
143 + width: borderWidth,
144 + ),
145 + )
146 + : null,
147 focusedBorder: hasUnderlineBorder
148 ? UnderlineInputBorder(
149 borderSide: BorderSide(
@@ -156,7 +165,7 @@ class BaseTextFormField extends StatelessWidget {
165 ? UnderlineInputBorder(
166 borderSide: BorderSide(
167 color: Theme.of(context).colorScheme.outlineVariant,
159 - style: borderWidth == 1 ? BorderStyle.none : BorderStyle.solid,
168 + style: borderWidth == 0.0 ? BorderStyle.none : BorderStyle.solid,
169 width: borderWidth,
170 ),
171 )
lib/src/widgets/blockchain_height_widget.dart
+1 -1
@@ -144,7 +144,7 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
144 padding: const EdgeInsets.only(right: 8),
145 child: StandardSwitch(
146 value: widget.doSingleScan,
147 - onTaped: () => widget.toggleSingleScan?.call(),
147 + onTapped: () => widget.toggleSingleScan?.call(),
148 ),
149 )
150 ],
lib/src/widgets/picker.dart
+7 -4
@@ -4,6 +4,7 @@ import 'dart:math';
4
5 import 'package:cake_wallet/entities/seed_type.dart';
6 import 'package:cake_wallet/src/widgets/search_bar_widget.dart';
7 +import 'package:cake_wallet/themes/utils/custom_theme_colors.dart';
8 import 'package:cake_wallet/utils/responsive_layout_util.dart';
9 import 'package:cw_core/transaction_priority.dart';
10 import 'package:flutter/material.dart';
@@ -157,7 +158,6 @@ class _PickerState<Item> extends State<Picker<Item>> {
158 textAlign: TextAlign.center,
159 style: Theme.of(context).textTheme.bodyMedium!.copyWith(
160 fontSize: 18,
160 -
161 fontWeight: FontWeight.bold,
162 decoration: TextDecoration.none,
163 color: Theme.of(context).colorScheme.onSurface,
@@ -358,7 +358,6 @@ class _PickerState<Item> extends State<Picker<Item>> {
358 tag,
359 style: Theme.of(context).textTheme.bodyMedium!.copyWith(
360 fontSize: 7.0,
361 -
361 color: Theme.of(context).colorScheme.primary,
362 ),
363 ),
@@ -430,7 +429,6 @@ class _PickerState<Item> extends State<Picker<Item>> {
429 softWrap: true,
430 style: Theme.of(context).textTheme.bodyMedium!.copyWith(
431 fontSize: 16,
433 -
432 fontWeight: FontWeight.w700,
433 color: Theme.of(context).colorScheme.onSurface,
434 decoration: TextDecoration.none,
@@ -448,7 +446,6 @@ class _PickerState<Item> extends State<Picker<Item>> {
446 tag,
447 style: Theme.of(context).textTheme.bodyMedium!.copyWith(
448 fontSize: 7.0,
451 -
449 color: Theme.of(context).colorScheme.primary,
450 ),
451 ),
@@ -522,10 +519,16 @@ class _PickerState<Item> extends State<Picker<Item>> {
519 }
520
521 Widget buildSlider({required int index, required bool isActivated}) {
522 + final isDarkMode = Theme.of(context).brightness == Brightness.dark;
523 return Row(
524 children: <Widget>[
525 Expanded(
526 child: Slider(
527 + activeColor: Theme.of(context).colorScheme.primary,
528 + inactiveColor: isDarkMode
529 + ? CustomThemeColors.toggleColorOffStateDark
530 + : CustomThemeColors.toggleColorOffStateLight,
531 + thumbColor: CustomThemeColors.toggleKnobStateColorLight,
532 value: widget.sliderValue == null || widget.sliderValue! < 1 ? 1 : widget.sliderValue!,
533 onChanged: isActivated ? widget.onSliderChanged : null,
534 min: widget.minValue ?? 1,
lib/src/widgets/services_updates_widget.dart
+1 -1
@@ -43,7 +43,7 @@ class _ServicesUpdatesWidgetState extends State<ServicesUpdatesWidget> {
43 child: SvgPicture.asset(
44 "assets/images/notification_icon.svg",
45 color: Theme.of(context).colorScheme.onSurface,
46 - width: 30,
46 + width: 20,
47 placeholderBuilder: (_) => Icon(Icons.error),
48 ),
49 );
lib/src/widgets/standard_switch.dart
+12 -7
@@ -1,11 +1,11 @@
1 -import 'package:flutter/cupertino.dart';
1 +import 'package:cake_wallet/themes/utils/custom_theme_colors.dart';
2 import 'package:flutter/material.dart';
3
4 class StandardSwitch extends StatefulWidget {
5 - const StandardSwitch({required this.value, required this.onTaped});
5 + const StandardSwitch({required this.value, required this.onTapped});
6
7 final bool value;
8 - final VoidCallback onTaped;
8 + final VoidCallback onTapped;
9
10 @override
11 StandardSwitchState createState() => StandardSwitchState();
@@ -14,10 +14,11 @@ class StandardSwitch extends StatefulWidget {
14 class StandardSwitchState extends State<StandardSwitch> {
15 @override
16 Widget build(BuildContext context) {
17 + final isDarkMode = Theme.of(context).brightness == Brightness.dark;
18 return Semantics(
19 toggled: widget.value,
20 child: GestureDetector(
20 - onTap: widget.onTaped,
21 + onTap: widget.onTapped,
22 child: AnimatedContainer(
23 padding: EdgeInsets.only(left: 2.0, right: 2.0),
24 alignment: widget.value ? Alignment.centerRight : Alignment.centerLeft,
@@ -26,8 +27,10 @@ class StandardSwitchState extends State<StandardSwitch> {
27 height: 28,
28 decoration: BoxDecoration(
29 color: widget.value
29 - ? Theme.of(context).colorScheme.surfaceContainerHighest
30 - : Theme.of(context).colorScheme.surfaceContainerLowest,
30 + ? Theme.of(context).colorScheme.primary
31 + : isDarkMode
32 + ? CustomThemeColors.toggleColorOffStateDark
33 + : CustomThemeColors.toggleColorOffStateLight,
34 borderRadius: BorderRadius.all(
35 Radius.circular(14.0),
36 ),
@@ -36,7 +39,9 @@ class StandardSwitchState extends State<StandardSwitch> {
39 width: 24.0,
40 height: 24.0,
41 decoration: BoxDecoration(
39 - color: Theme.of(context).colorScheme.primary,
42 + color: isDarkMode
43 + ? Theme.of(context).colorScheme.surface
44 + : CustomThemeColors.toggleKnobStateColorLight,
45 shape: BoxShape.circle,
46 ),
47 ),
lib/themes/theme_classes/dark_theme.dart
+2 -2
@@ -38,8 +38,8 @@ class DarkTheme extends MaterialThemeBase {
38 tertiaryContainer: const Color(0xFF1F2832),
39 onTertiaryContainer: const Color(0xFFA8B3C6),
40 error: errorColor,
41 - onError: const Color(0xFF690005),
42 - errorContainer: const Color(0xFFB71919),
41 + onError: const Color(0xFFB71919),
42 + errorContainer: const Color(0xFFC53636),
43 onErrorContainer: const Color(0xFFFFDAD6),
44 surface: surfaceColor,
45 onSurface: const Color(0xFFD7E2F7),
lib/themes/utils/custom_theme_colors.dart
+5 -1
@@ -11,9 +11,13 @@ class CustomThemeColors {
11
12 static const backgroundGradientColorDark = Color(0xFF0F1A36);
13 static const backgroundGradientColorLight = Color(0xFFE7E7FD);
14 -
14 +
15 static const cardGradientColorPrimaryDark = Color(0xFF2B3A67);
16 static const cardGradientColorPrimaryLight = Color(0xFFFFFFFF);
17 static const cardGradientColorSecondaryDark = Color(0xFF1C2A4F);
18 static const cardGradientColorSecondaryLight = Color(0xFFF3F3FF);
19 +
20 + static const toggleKnobStateColorLight = Color(0xFFFFFFFF);
21 + static const toggleColorOffStateLight = Color(0xFFCACAE7);
22 + static const toggleColorOffStateDark = Color(0xFF3A4F88);
23 }
res/values/strings_ar.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "إذا كنت ترغب في البدء من جديد ، فانقر فوق إنشاء محفظة جديدة أدناه وستكون خارج السباقات.",
1060 "welcome_subtitle_restore_wallet": "إذا كان لديك محفظة موجودة تريد إحضارها إلى كعكة ، فما عليك سوى اختيار استعادة المحفظة الموجودة وسنمشيك خلال العملية.",
1061 "welcome_to_cakepay": "مرحبا بكم في Cake Pay!",
1062 + "what_is_payjoin": "ما هو Payjoin?",
1063 "what_is_silent_payments": "ما هي المدفوعات الصامتة؟",
1064 "widgets_address": "عنوان",
1065 "widgets_or": "أو",
res/values/strings_bg.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Ако искате да стартирате свеж, докоснете Създайте нов портфейл по -долу и ще се откажете от състезанията.",
1060 "welcome_subtitle_restore_wallet": "Ако имате съществуващ портфейл, който искате да внесете в тортата, просто изберете възстановяване на съществуващия портфейл и ще ви преведем през процеса.",
1061 "welcome_to_cakepay": "Добре дошли в Cake Pay!",
1062 + "what_is_payjoin": "Какво е Payjoin ?",
1063 "what_is_silent_payments": "Какво са мълчаливи плащания?",
1064 "widgets_address": "Адрес",
1065 "widgets_or": "или",
res/values/strings_cs.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Pokud chcete začít čerstvě, klepněte na Vytvořit novou peněženku níže a budete na závodech.",
1060 "welcome_subtitle_restore_wallet": "Pokud máte existující peněženku, kterou chcete přinést do dortu, jednoduše si vyberte obnovení stávající peněženky a my vás projdeme procesem.",
1061 "welcome_to_cakepay": "Vítejte v Cake Pay!",
1062 + "what_is_payjoin": "Co je Payjoin ?",
1063 "what_is_silent_payments": "Co jsou tiché platby?",
1064 "widgets_address": "Adresa",
1065 "widgets_or": "nebo",
res/values/strings_de.arb
+2 -1
@@ -580,8 +580,8 @@
580 "please_choose_one": "Bitte wählen Sie einen",
581 "please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist",
582 "please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.",
583 - "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
583 "Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
584 + "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
585 "please_select": "Bitte auswählen:",
586 "please_select_backup_file": "Bitte wählen Sie die Sicherungsdatei und geben Sie das Sicherungskennwort ein.",
587 "please_try_to_connect_to_another_node": "Bitte versuchen Sie, sich mit einem anderen Knoten zu verbinden",
@@ -1062,6 +1062,7 @@
1062 "welcome_subtitle_new_wallet": "Wenn Sie frisch anfangen möchten, tippen Sie unten neue Wallet und schon sind Sie bereit.",
1063 "welcome_subtitle_restore_wallet": "Wenn Sie über eine vorhandene Wallet verfügen, die Sie in Cake Wallet öffnen möchten, drücken Sie auf Vorhandene Wallet wiederherstellen und wir werden Sie durch den Prozess führen.",
1064 "welcome_to_cakepay": "Willkommen bei Cake Pay!",
1065 + "what_is_payjoin": "Was ist Payjoin ?",
1066 "what_is_silent_payments": "Was sind Silent Payments?",
1067 "widgets_address": "Adresse",
1068 "widgets_or": "oder",
res/values/strings_en.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "If you want to start fresh, tap Create New Wallet below and you'll be off to the races.",
1061 "welcome_subtitle_restore_wallet": "If you have an existing wallet you want to bring into Cake, simply choose Restore Existing Wallet and we'll walk you through the process.",
1062 "welcome_to_cakepay": "Welcome to Cake Pay!",
1063 + "what_is_payjoin": "What is Payjoin?",
1064 "what_is_silent_payments": "What are Silent Payments?",
1065 "widgets_address": "Address",
1066 "widgets_or": "or",
res/values/strings_es.arb
+1
@@ -1061,6 +1061,7 @@
1061 "welcome_subtitle_new_wallet": "Si desea comenzar de nuevo, toque Crear nueva billetera a continuación y se irá a las carreras.",
1062 "welcome_subtitle_restore_wallet": "Si tiene una billetera existente que desea llevar al pastel, simplemente elija Restaurar la billetera existente y lo guiaremos a través del proceso.",
1063 "welcome_to_cakepay": "¡Bienvenido a Cake Pay!",
1064 + "what_is_payjoin": "¿Qué es Payjoin ?",
1065 "what_is_silent_payments": "¿Qué son los pagos silenciosos?",
1066 "widgets_address": "Dirección",
1067 "widgets_or": "o",
res/values/strings_fr.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Si vous souhaitez repartir de zéro, appuyez sur Créer un nouveau portefeuille ci-dessous et vous serez prêt à commencer.",
1060 "welcome_subtitle_restore_wallet": "Si vous avez un portefeuille existant que vous souhaitez importer dans Cake, choisissez simplement Restaurer un portefeuille existant et nous vous guiderons à travers le processus.",
1061 "welcome_to_cakepay": "Bienvenue sur Cake Pay !",
1062 + "what_is_payjoin": "Qu'est-ce que Payjoin ?",
1063 "what_is_silent_payments": "Qu'est-ce que les paiements silencieux?",
1064 "widgets_address": "Adresse",
1065 "widgets_or": "ou",
res/values/strings_ha.arb
+1
@@ -1062,6 +1062,7 @@
1062 "welcome_subtitle_new_wallet": "Idan kana son farawa sabo ne, matsa Newirƙiri Sabuwar Wallow a ƙasa kuma za ka tafi da tsere.",
1063 "welcome_subtitle_restore_wallet": "Idan kuna da walat ɗin da kuke son shigo da cake, kawai zaɓi a cikin walat ɗin da yake ciki kuma za mu bi ku ta hanyar aiwatarwa.",
1064 "welcome_to_cakepay": "Barka da zuwa Cake Pay!",
1065 + "what_is_payjoin": "Mene ne Payjoin ?",
1066 "what_is_silent_payments": "Menene biyan shiru?",
1067 "widgets_address": "Adireshin",
1068 "widgets_or": "ko",
res/values/strings_hi.arb
+1
@@ -1061,6 +1061,7 @@
1061 "welcome_subtitle_new_wallet": "यदि आप ताजा शुरू करना चाहते हैं, तो नीचे नया बटुआ बनाएं और आप दौड़ से दूर हो जाएंगे।",
1062 "welcome_subtitle_restore_wallet": "यदि आपके पास एक मौजूदा बटुआ है जिसे आप केक में लाना चाहते हैं, तो बस मौजूदा बटुए को पुनर्स्थापित करें और हम आपको प्रक्रिया के माध्यम से चलेंगे।",
1063 "welcome_to_cakepay": "केकपे में आपका स्वागत है!",
1064 + "what_is_payjoin": "Payjoin ##### क्या है",
1065 "what_is_silent_payments": "मूक भुगतान क्या है?",
1066 "widgets_address": "पता",
1067 "widgets_or": "या",
res/values/strings_hr.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Ako želite započeti svježe, dodirnite Create New Wallet u nastavku i krenite na utrke.",
1060 "welcome_subtitle_restore_wallet": "Ako imate postojeći novčanik koji želite unijeti u tortu, jednostavno odaberite Vratite postojeći novčanik i prošetat ćemo vas kroz postupak.",
1061 "welcome_to_cakepay": "Dobro došli u Cake Pay!",
1062 + "what_is_payjoin": "Što je Payjoin ?",
1063 "what_is_silent_payments": "Što je tiha plaćanja?",
1064 "widgets_address": "Adresa",
1065 "widgets_or": "ili",
res/values/strings_hy.arb
+1
@@ -1057,6 +1057,7 @@
1057 "welcome_subtitle_new_wallet": "Եթե ​​ցանկանում եք սկսել թարմ, հպեք Ստեղծեք նոր դրամապանակ ներքեւում եւ դուրս կգաք ցեղերի:",
1058 "welcome_subtitle_restore_wallet": "Եթե ​​ունեք գոյություն ունեցող դրամապանակ, որը ցանկանում եք տորթի մեջ մտցնել, պարզապես ընտրեք վերականգնել առկա դրամապանակը, եւ մենք ձեզ քայլելու ենք գործընթացի միջոցով:",
1059 "welcome_to_cakepay": "Բարի գալուստ Cake Pay!",
1060 + "what_is_payjoin": "Ինչ է վճարումը ?",
1061 "what_is_silent_payments": "Ի՞նչ է Լուռ Վճարումները:",
1062 "widgets_address": "Հասցե",
1063 "widgets_or": "կամ",
res/values/strings_id.arb
+1
@@ -1062,6 +1062,7 @@
1062 "welcome_subtitle_new_wallet": "Jika Anda ingin memulai segar, ketuk membuat dompet baru di bawah ini dan Anda akan pergi ke balapan.",
1063 "welcome_subtitle_restore_wallet": "Jika Anda memiliki dompet yang ada yang ingin Anda bawa ke dalam kue, cukup pilih kembalikan dompet yang ada dan kami akan memandu Anda melalui prosesnya.",
1064 "welcome_to_cakepay": "Selamat Datang di Cake Pay!",
1065 + "what_is_payjoin": "Apa itu Payjoin ?",
1066 "what_is_silent_payments": "Apa itu pembayaran diam?",
1067 "widgets_address": "Alamat",
1068 "widgets_or": "atau",
res/values/strings_it.arb
+1
@@ -1062,6 +1062,7 @@
1062 "welcome_subtitle_new_wallet": "Se vuoi ricominciare da capo, premi Crea un nuovo portafoglio qui sotto.",
1063 "welcome_subtitle_restore_wallet": "Se hai un portafoglio esistente che vuoi importare in Cake Wallet, scegli semplicemente il ripristino del portafoglio esistente e ti guideremo attraverso il processo.",
1064 "welcome_to_cakepay": "Benvenuto in Cake Pay!",
1065 + "what_is_payjoin": "Cos'è PayJoin ?",
1066 "what_is_silent_payments": "Che cos'è Silent Payments?",
1067 "widgets_address": "Indirizzo",
1068 "widgets_or": "o",
res/values/strings_ja.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "新鮮な開始したい場合は、以下の新しい財布を作成すると、レースに出かけることができます。",
1061 "welcome_subtitle_restore_wallet": "ケーキに持ち込みたい既存のウォレットがある場合は、既存のウォレットを復元するだけで、プロセスを説明します。",
1062 "welcome_to_cakepay": "Cake Payへようこそ!",
1063 + "what_is_payjoin": "Payjoin ?とは何ですか",
1064 "what_is_silent_payments": "サイレント支払いとは何ですか?",
1065 "widgets_address": "住所",
1066 "widgets_or": "または",
res/values/strings_ko.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "새로 시작하려면 아래의 새 지갑 생성을 탭하면 바로 시작할 수 있습니다.",
1061 "welcome_subtitle_restore_wallet": "Cake로 가져오려는 기존 지갑이 있는 경우 기존 지갑 복구를 선택하면 과정을 안내해 드립니다.",
1062 "welcome_to_cakepay": "Cake Pay에 오신 것을 환영합니다!",
1063 + "what_is_payjoin": "Payjoin ?이란?",
1064 "what_is_silent_payments": "사일런트 페이먼트란 무엇인가요?",
1065 "widgets_address": "주소",
1066 "widgets_or": "또는",
res/values/strings_my.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "လတ်ဆတ်စွာစတင်လိုပါကအောက်ကပိုက်ဆံအိတ်အသစ်ကိုဖန်တီးပါ။",
1060 "welcome_subtitle_restore_wallet": "အကယ်. သင့်တွင်သင်ကိတ်မုန့်ထဲသို့ယူဆောင်လိုသောလက်ရှိပိုက်ဆံအိတ်ရှိပါက Restore Lestore Wallet ကိုရွေးပါ။",
1061 "welcome_to_cakepay": "Cake Pay မှကြိုဆိုပါသည်။",
1062 + "what_is_payjoin": "Payjoin ဆိုတာဘာလဲ ?#",
1063 "what_is_silent_payments": "အသံတိတ်ငွေပေးချေမှုဆိုတာဘာလဲ",
1064 "widgets_address": "လိပ်စာ",
1065 "widgets_or": "သို့မဟုတ်",
res/values/strings_nl.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "Als u opnieuw wilt beginnen, tikt u op de nieuwe portemonnee hieronder en u bent op weg naar de races.",
1061 "welcome_subtitle_restore_wallet": "Als je een bestaande portemonnee hebt die je in cake wilt brengen, kies dan gewoon om de bestaande portemonnee te herstellen en we zullen je door het proces leiden.",
1062 "welcome_to_cakepay": "Welkom bij Cake Pay!",
1063 + "what_is_payjoin": "Wat is Payjoin ?",
1064 "what_is_silent_payments": "Wat zijn stille betalingen?",
1065 "widgets_address": "Adres",
1066 "widgets_or": "of",
res/values/strings_pl.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Jeśli chcesz zacząć od nowa, dotknij Utwórz nowy portfel poniżej.",
1060 "welcome_subtitle_restore_wallet": "Jeśli masz istniejący portfel, który chcesz wnieść do ciasta, po prostu wybierz przywróć istniejący portfel, a my przeprowadzimy Cię przez proces.",
1061 "welcome_to_cakepay": "Witamy w Cake Pay!",
1062 + "what_is_payjoin": "Co to jest PayJoin ?",
1063 "what_is_silent_payments": "Co to Silent Payments?",
1064 "widgets_address": "Adres",
1065 "widgets_or": "lub",
res/values/strings_pt.arb
+1
@@ -1062,6 +1062,7 @@
1062 "welcome_subtitle_new_wallet": "Se você quiser começar de novo, toque em criar uma nova carteira abaixo e você estará nas corridas.",
1063 "welcome_subtitle_restore_wallet": "Se você tem uma carteira existente que deseja trazer para o bolo, basta escolher a carteira existente e nós o guiaremos pelo processo.",
1064 "welcome_to_cakepay": "Bem-vindo ao Cake Pay!",
1065 + "what_is_payjoin": "O que é Payjoin ?",
1066 "what_is_silent_payments": "O que são pagamentos silenciosos?",
1067 "widgets_address": "Endereço",
1068 "widgets_or": "ou",
res/values/strings_ru.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "Если вы хотите начать Fresh, нажмите «Создать новый кошелек» ниже, и вы отправитесь на гонки.",
1061 "welcome_subtitle_restore_wallet": "Если у вас есть существующий кошелек, который вы хотите принести в торт, просто выберите «Восстановить существующий кошелек», и мы проведем вас через процесс.",
1062 "welcome_to_cakepay": "Добро пожаловать в Cake Pay!",
1063 + "what_is_payjoin": "Что такое Payjoin ?",
1064 "what_is_silent_payments": "Что такое молчаливые платежи?",
1065 "widgets_address": "Адрес",
1066 "widgets_or": "или",
res/values/strings_th.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "หากคุณต้องการเริ่มต้นใหม่ให้แตะสร้างกระเป๋าเงินใหม่ด้านล่างและคุณจะออกจากการแข่งขัน",
1060 "welcome_subtitle_restore_wallet": "หากคุณมีกระเป๋าเงินที่มีอยู่ที่คุณต้องการนำเข้าเค้กให้เลือกคืนกระเป๋าเงินที่มีอยู่แล้วเราจะพาคุณผ่านกระบวนการ",
1061 "welcome_to_cakepay": "ยินดีต้อนรับสู่ Cake Pay!",
1062 + "what_is_payjoin": "PayJoin ? คืออะไร",
1063 "what_is_silent_payments": "การชำระเงินเงียบคืออะไร?",
1064 "widgets_address": "ที่อยู่",
1065 "widgets_or": "หรือ",
res/values/strings_tl.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Kung nais mong simulan ang sariwa, tapikin ang Lumikha ng Bagong Wallet sa ibaba at pupunta ka sa mga karera.",
1060 "welcome_subtitle_restore_wallet": "Kung mayroon kang isang umiiral na pitaka na nais mong dalhin sa cake, piliin lamang ang ibalik ang umiiral na pitaka at lalakad ka namin sa proseso.",
1061 "welcome_to_cakepay": "Maligayang pagdating sa Cake Pay!",
1062 + "what_is_payjoin": "Ano ang Payjoin ?",
1063 "what_is_silent_payments": "Ano ang tahimik na pagbabayad?",
1064 "widgets_address": "Address",
1065 "widgets_or": "o",
res/values/strings_tr.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "Taze başlamak istiyorsanız, aşağıda yeni cüzdan oluşturun ve yarışlara gidersiniz.",
1060 "welcome_subtitle_restore_wallet": "Mevcut bir cüzdanınız varsa, kek içine getirmek istediğiniz, mevcut cüzdanı geri yüklemeyi seçin ve bu süreç boyunca size yol gösterelim.",
1061 "welcome_to_cakepay": "Cake Pay'e Hoş Geldiniz!",
1062 + "what_is_payjoin": "Payjoin nedir ?",
1063 "what_is_silent_payments": "Sessiz ödemeler nedir?",
1064 "widgets_address": "Adres",
1065 "widgets_or": "veya",
res/values/strings_uk.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "Якщо ви хочете почати спочатку, торкніться Створити новий гаманець нижче, і ви будете поза конкуренціею.",
1061 "welcome_subtitle_restore_wallet": "Якщо у вас є існуючий гаманець, який ви хочете ввести в торт, просто виберіть Відновити існуючий гаманець, і ми проведемо вас через процес.",
1062 "welcome_to_cakepay": "Ласкаво просимо до Cake Pay!",
1063 + "what_is_payjoin": "Що таке Payjoin ?",
1064 "what_is_silent_payments": "Що таке мовчазні платежі?",
1065 "widgets_address": "Адреса",
1066 "widgets_or": "або",
res/values/strings_ur.arb
+1
@@ -1061,6 +1061,7 @@
1061 "welcome_subtitle_new_wallet": "اگر آپ تازہ شروع کرنا چاہتے ہیں تو ، نیچے نیا پرس بنائیں پر تھپتھپائیں اور آپ ریسوں پر جائیں گے۔",
1062 "welcome_subtitle_restore_wallet": "اگر آپ کے پاس موجودہ پرس ہے تو آپ کیک میں لانا چاہتے ہیں تو ، موجودہ بٹوے کو بحال کریں کا انتخاب کریں اور ہم آپ کو اس عمل میں چلیں گے۔",
1063 "welcome_to_cakepay": "Cake پے میں خوش آمدید!",
1064 + "what_is_payjoin": "پے جوائن کیا ہے ?",
1065 "what_is_silent_payments": "خاموش ادائیگی کیا ہے؟",
1066 "widgets_address": "پتہ",
1067 "widgets_or": "یا",
res/values/strings_vi.arb
+1
@@ -1056,6 +1056,7 @@
1056 "welcome_subtitle_new_wallet": "Nếu bạn muốn bắt đầu mới, hãy nhấn Tạo ví mới bên dưới và bạn sẽ rời khỏi các cuộc đua.",
1057 "welcome_subtitle_restore_wallet": "Nếu bạn có một ví hiện có mà bạn muốn mang vào bánh, chỉ cần chọn khôi phục ví hiện có và chúng tôi sẽ hướng dẫn bạn qua quá trình này.",
1058 "welcome_to_cakepay": "Chào mừng đến với Cake Pay!",
1059 + "what_is_payjoin": "Payjoin là gì",
1060 "what_is_silent_payments": "Thanh toán im lặng là gì?",
1061 "widgets_address": "Địa chỉ",
1062 "widgets_or": "hoặc",
res/values/strings_yo.arb
+1
@@ -1060,6 +1060,7 @@
1060 "welcome_subtitle_new_wallet": "Ti o ba fẹ bẹrẹ alabapade, tẹ Ṣẹda apamọwọ tuntun ni isalẹ iwọ yoo wa ni pipa si awọn ere-ije.",
1061 "welcome_subtitle_restore_wallet": "Ti o ba ni apamọwọ ti o wa tẹlẹ ti o fẹ lati mu wa sinu akara oyinbo, yan omi apamọwọ wa tẹlẹ ati pe a yoo rin ọ nipasẹ ilana naa.",
1062 "welcome_to_cakepay": "Ẹ káàbọ̀ sí Cake Pay!",
1063 + "what_is_payjoin": "Kini Payjoin?",
1064 "what_is_silent_payments": "Kini awọn sisanwo ipalọlọ?",
1065 "widgets_address": "Àdírẹ́sì",
1066 "widgets_or": "tàbí",
res/values/strings_zh.arb
+1
@@ -1059,6 +1059,7 @@
1059 "welcome_subtitle_new_wallet": "如果您想开始新鲜,请点击下面的创建新钱包,您将参加比赛。",
1060 "welcome_subtitle_restore_wallet": "如果您有一个现有的钱包要把蛋糕带入蛋糕,只需选择还原现有的钱包,我们将带您完成整个过程。",
1061 "welcome_to_cakepay": "欢迎来到 Cake Pay!",
1062 + "what_is_payjoin": "什么是工资join?",
1063 "what_is_silent_payments": "什么是无声付款?",
1064 "widgets_address": "地址",
1065 "widgets_or": "或者",