fix and improve mnemonic print pdf

This commit is contained in:
poka 2023-11-17 13:12:18 +01:00
parent b835c701b1
commit 4cbb0bba20
6 changed files with 57 additions and 166 deletions

View File

@ -9,8 +9,6 @@ import 'package:gecko/models/bip39_words.dart';
import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:polkawallet_sdk/api/apiKeyring.dart';
import 'package:provider/provider.dart';
import "package:unorm_dart/unorm_dart.dart" as unorm;
@ -151,77 +149,6 @@ class GenerateWalletsProvider with ChangeNotifier {
return pin.text;
}
Future<Uint8List> printWallet(AsyncSnapshot<List>? mnemoList) async {
final ByteData fontData =
await rootBundle.load("assets/OpenSans-Regular.ttf");
final pw.Font ttf = pw.Font.ttf(fontData.buffer.asByteData());
final pdf = pw.Document();
// const imageProvider = AssetImage('assets/icon/gecko_final.png');
// final geckoLogo = await flutterImageProvider(imageProvider);
pw.Widget arrayCell(dataWord) {
return pw.SizedBox(
width: 120,
child: pw.Column(children: <pw.Widget>[
pw.Text(
dataWord.split(':')[0],
style: pw.TextStyle(
fontSize: 15, color: const PdfColor(0.5, 0, 0), font: ttf),
),
pw.Text(
dataWord.split(':')[1],
style: pw.TextStyle(
fontSize: 20, color: const PdfColor(0, 0, 0), font: ttf),
),
pw.SizedBox(height: 10)
]),
);
}
pdf.addPage(
pw.Page(
pageFormat: PdfPageFormat.a4,
build: (context) {
return pw.Column(
// mainAxisAlignment: pw.MainAxisAlignment.center,
// mainAxisSize: pw.MainAxisSize.max,
// crossAxisAlignment: pw.CrossAxisAlignment.center,
children: <pw.Widget>[
pw.Row(children: <pw.Widget>[
arrayCell(mnemoList!.data![0]),
arrayCell(mnemoList.data![1]),
arrayCell(mnemoList.data![2]),
arrayCell(mnemoList.data![3]),
]),
pw.Row(children: <pw.Widget>[
arrayCell(mnemoList.data![4]),
arrayCell(mnemoList.data![5]),
arrayCell(mnemoList.data![6]),
arrayCell(mnemoList.data![7]),
]),
pw.Row(children: <pw.Widget>[
arrayCell(mnemoList.data![8]),
arrayCell(mnemoList.data![9]),
arrayCell(mnemoList.data![10]),
arrayCell(mnemoList.data![11])
]),
pw.Expanded(
child: pw.Align(
alignment: pw.Alignment.bottomCenter,
child: pw.Text(
"Gardez cette feuille préciseusement, à labri des lézards indiscrets.",
style: pw.TextStyle(fontSize: 15, font: ttf),
)))
],
);
},
),
);
return pdf.save();
}
Future<void> generateCesiumWalletPubkey(
String cesiumID, String cesiumPWD) async {
cesiumWallet = durt.CesiumWallet(cesiumID, cesiumPWD);

View File

@ -714,7 +714,7 @@ class SubstrateSdk with ChangeNotifier {
final seed = await sdk.api.keyring.getDecryptedSeed(keyring, pin);
String seedText;
if (seed == null) {
if (seed == null || seed.seed == null) {
seedText = '';
} else {
seedText = seed.seed!.split('//')[0];

View File

@ -120,7 +120,7 @@ class _HomeScreenState extends State<HomeScreen> {
}
//TODO: finish to implement multiqueries
// final sub = Provider.of<SubstrateSdk>(context, listen: false);
// sub.getBalanceMulti([
// '5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn',

View File

@ -242,21 +242,19 @@ class PrintWallet extends StatelessWidget {
await rootBundle.load("assets/OpenSans-Regular.ttf");
final pw.Font ttf = pw.Font.ttf(fontData.buffer.asByteData());
final pdf = pw.Document();
int nbr = 1;
final seedList = seed.split(' ');
// const imageProvider = AssetImage('assets/icon/gecko_final.png');
// final geckoLogo = await flutterImageProvider(imageProvider);
pw.Widget arrayCell(String dataWord, int nbr) {
nbr++;
const imageProvider = AssetImage('assets/icon/gecko_final.png');
final geckoLogo = await flutterImageProvider(imageProvider);
pw.Widget arrayCell(int number, String dataWord) {
return pw.SizedBox(
width: 120,
height: 70,
child: pw.Column(children: <pw.Widget>[
pw.Text(
nbr.toString(),
number.toString(),
style: pw.TextStyle(
fontSize: 15, color: const PdfColor(0.5, 0, 0), font: ttf),
),
@ -274,38 +272,44 @@ class PrintWallet extends StatelessWidget {
pw.Page(
pageFormat: PdfPageFormat.a4,
build: (context) {
return pw.Column(
// mainAxisAlignment: pw.MainAxisAlignment.center,
// mainAxisSize: pw.MainAxisSize.max,
// crossAxisAlignment: pw.CrossAxisAlignment.center,
children: <pw.Widget>[
pw.Row(children: <pw.Widget>[
arrayCell(seedList[0], nbr),
arrayCell(seedList[1], nbr),
arrayCell(seedList[2], nbr),
arrayCell(seedList[3], nbr),
]),
pw.Row(children: <pw.Widget>[
arrayCell(seedList[4], nbr),
arrayCell(seedList[5], nbr),
arrayCell(seedList[6], nbr),
arrayCell(seedList[7], nbr),
]),
pw.Row(children: <pw.Widget>[
arrayCell(seedList[8], nbr),
arrayCell(seedList[9], nbr),
arrayCell(seedList[10], nbr),
arrayCell(seedList[11], nbr)
]),
pw.Expanded(
child: pw.Align(
alignment: pw.Alignment.bottomCenter,
child: pw.Text(
"Gardez cette feuille préciseusement, à labri des lézards indiscrets.",
style: pw.TextStyle(fontSize: 15, font: ttf),
)))
],
);
return pw.Stack(children: <pw.Widget>[
pw.Positioned(top: 217, child: pw.Text('-'.padRight(130, '-'))),
pw.Positioned(bottom: 217, child: pw.Text('-'.padRight(130, '-'))),
pw.Column(
// mainAxisAlignment: pw.MainAxisAlignment.center,
// mainAxisSize: pw.MainAxisSize.max,
// crossAxisAlignment: pw.CrossAxisAlignment.center,
children: <pw.Widget>[
pw.SizedBox(height: 10),
pw.Row(children: <pw.Widget>[
arrayCell(1, seedList[0]),
arrayCell(2, seedList[1]),
arrayCell(3, seedList[2]),
arrayCell(4, seedList[3]),
]),
pw.Row(children: <pw.Widget>[
arrayCell(5, seedList[4]),
arrayCell(6, seedList[5]),
arrayCell(7, seedList[6]),
arrayCell(8, seedList[7]),
]),
pw.Row(children: <pw.Widget>[
arrayCell(9, seedList[8]),
arrayCell(10, seedList[9]),
arrayCell(11, seedList[10]),
arrayCell(12, seedList[11])
]),
pw.SizedBox(height: 105),
pw.Image(geckoLogo, height: 80),
pw.SizedBox(height: 205),
pw.Text(
"Gardez cette feuille préciseusement, à labri des lézards indiscrets.\nElle vous permettra de restaurer tous vos portefeuilles à tout moment.",
textAlign: pw.TextAlign.center,
style: pw.TextStyle(fontSize: 15, font: ttf),
)
],
)
]);
},
),
);

View File

@ -9,12 +9,12 @@ import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/generate_wallets.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/myWallets/show_seed.dart';
import 'package:gecko/widgets/commons/build_progress_bar.dart';
import 'package:gecko/widgets/commons/build_text.dart';
import 'package:gecko/screens/onBoarding/6.dart';
import 'package:gecko/widgets/commons/fader_transition.dart';
import 'package:gecko/widgets/commons/offline_info.dart';
import 'package:printing/printing.dart';
import 'package:provider/provider.dart';
AsyncSnapshot<List>? mnemoList;
@ -63,14 +63,13 @@ class _ChooseChestState extends State<OnboardingStepFive> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
// const SizedBox(height: 10),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return PrintWallet(
generateWalletProvider.generatedMnemonic);
generateWalletProvider.generatedMnemonic!);
}),
);
},
@ -79,7 +78,6 @@ class _ChooseChestState extends State<OnboardingStepFive> {
height: 42 * ratio,
),
),
SizedBox(
height: 40,
width: 120,
@ -221,44 +219,6 @@ Widget arrayCell(dataWord) {
);
}
class PrintWallet extends StatelessWidget {
const PrintWallet(this.sentence, {Key? key}) : super(key: key);
final String? sentence;
@override
Widget build(BuildContext context) {
final generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
Navigator.pop(context);
}),
backgroundColor: yellowC,
foregroundColor: Colors.black,
toolbarHeight: 60 * ratio,
title: const SizedBox(
height: 22,
child: Text(
'printMyMnemonic',
style: TextStyle(fontWeight: FontWeight.w600),
),
),
),
body: PdfPreview(
canDebug: false,
canChangeOrientation: false,
build: (format) => generateWalletProvider.printWallet(mnemoList),
),
),
);
}
}
Widget nextButton(
BuildContext context, String text, bool isFast, bool skipIntro) {
final generateWalletProvider =

View File

@ -349,10 +349,10 @@ packages:
dependency: transitive
description:
name: dbus
sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263"
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
url: "https://pub.dev"
source: hosted
version: "0.7.8"
version: "0.7.10"
decimal:
dependency: transitive
description:
@ -381,10 +381,10 @@ packages:
dependency: "direct main"
description:
name: durt
sha256: "1e1c494bd7cd8b372b89e5bc03c07f6e96aad5ef7d2159cfa28da3c181269678"
sha256: "97007458aa5ba95c78465af8489e1330d0f7d48c74e10699f6283ce4cf8a5410"
url: "https://pub.dev"
source: hosted
version: "0.1.6"
version: "0.1.7"
easy_localization:
dependency: "direct main"
description:
@ -1322,10 +1322,10 @@ packages:
dependency: "direct main"
description:
name: riverpod
sha256: "2e84315036e64c59affaff7443dea51247bc2fe704461a32f26a27986fb63d55"
sha256: "01fa385aa5d6db42fd602d8c400c28ae1c83d1fd6fbae1cbf0f4c78bac58d4b2"
url: "https://pub.dev"
source: hosted
version: "2.4.5"
version: "2.4.6"
rxdart:
dependency: transitive
description:
@ -1354,18 +1354,18 @@ packages:
dependency: transitive
description:
name: sentry
sha256: "9cfd325611ab54b57d5e26957466823f05bea9d6cfcc8d48f11817b8bcedf0d1"
sha256: e8040183ea1a0323999bce69786ed8429b1b89fbe5815a504d5bb7493a6464cc
url: "https://pub.dev"
source: hosted
version: "7.12.0"
version: "7.13.1"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
sha256: "0cd7d622cb63c94fd1b2f87ab508e158b950bd281e2a80f327ebf73bb217eaf3"
sha256: "843e317e605e5860e30ae431e9b8724c54f1a8567c9ad495e04595926bf22376"
url: "https://pub.dev"
source: hosted
version: "7.12.0"
version: "7.13.1"
shared_preferences:
dependency: "direct main"
description: