add save as dialog for seed on desktop (#2753)

malik1004x committed Dec 19, 2025 at 21:30 UTC fb6054cb5d0892403a1b1eecfcae885c8578fe49
1 file changed +30 -4
lib/src/screens/seed/wallet_seed_page.dart
+30 -4
@@ -1,11 +1,15 @@
1 +import 'dart:io';
2 +
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/widgets/seedphrase_grid_widget.dart';
5 import 'package:cake_wallet/src/widgets/warning_box_widget.dart';
6 import 'package:cake_wallet/utils/clipboard_util.dart';
7 import 'package:cake_wallet/utils/share_util.dart';
8 import 'package:cake_wallet/utils/show_bar.dart';
9 +import 'package:flutter/foundation.dart';
10 import 'package:flutter/material.dart';
11 import 'package:flutter/services.dart';
12 +import "package:file_picker/file_picker.dart";
13 import 'package:flutter_mobx/flutter_mobx.dart';
14 import 'package:cake_wallet/generated/i18n.dart';
15 import 'package:cake_wallet/src/widgets/primary_button.dart';
@@ -104,10 +108,7 @@ class WalletSeedPage extends BasePage {
108 child: PrimaryButton(
109 key: ValueKey('wallet_seed_page_save_seeds_button_key'),
110 onPressed: () {
107 - ShareUtil.share(
108 - text: walletSeedViewModel.seed,
109 - context: context,
110 - );
111 + _shareSeed(context);
112 },
113 text: S.of(context).save,
114 color: Theme.of(context).colorScheme.surfaceContainer,
@@ -139,4 +140,29 @@ class WalletSeedPage extends BasePage {
140 ),
141 );
142 }
143 +
144 + void _shareSeed(BuildContext context) async {
145 + switch(defaultTargetPlatform) {
146 + case TargetPlatform.android:
147 + case TargetPlatform.iOS:
148 + ShareUtil.share(
149 + text: walletSeedViewModel.seed,
150 + context: context,
151 + );
152 + break;
153 + case TargetPlatform.macOS:
154 + case TargetPlatform.windows:
155 + case TargetPlatform.linux:
156 + final path = await FilePicker.platform.saveFile(
157 + dialogTitle: "Save seed as",
158 + fileName: "${walletSeedViewModel.name}-seed.txt",
159 + );
160 + if(path != null) {
161 + final file = File(path);
162 + await file.writeAsString(walletSeedViewModel.seed);
163 + }
164 + default:
165 +break;
166 + }
167 + }
168 }