From 2f7313ec1c4ab0008d8e39b965d8a8b3fb42b234 Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 28 Feb 2021 02:38:52 +0100 Subject: [PATCH] 50% of OnBoarding workflow is OK --- .../phrase_de_restauration_flou.png | Bin 0 -> 25544 bytes lib/screens/commonElements.dart | 45 +++++ lib/screens/home.dart | 1 - lib/screens/onBoarding/1_noKeychainFound.dart | 56 ++---- lib/screens/onBoarding/2_stepOne.dart | 130 ++++++++++++++ lib/screens/onBoarding/3_stepTwo.dart | 134 +++++++++++++++ lib/screens/onBoarding/4_stepFor.dart | 133 +++++++++++++++ lib/screens/onBoarding/5_stepFive.dart | 133 +++++++++++++++ lib/screens/onBoarding/6_stepSix.dart | 133 +++++++++++++++ lib/screens/onBoarding/7_stepSeven.dart | 161 ++++++++++++++++++ lib/screens/onBoarding/8_stepEight.dart | 134 +++++++++++++++ lib/screens/onBoarding/9_stepNine.dart | 146 ++++++++++++++++ pubspec.yaml | 15 +- 13 files changed, 1162 insertions(+), 59 deletions(-) create mode 100755 assets/onBoarding/phrase_de_restauration_flou.png create mode 100644 lib/screens/onBoarding/2_stepOne.dart create mode 100644 lib/screens/onBoarding/3_stepTwo.dart create mode 100644 lib/screens/onBoarding/4_stepFor.dart create mode 100644 lib/screens/onBoarding/5_stepFive.dart create mode 100644 lib/screens/onBoarding/6_stepSix.dart create mode 100644 lib/screens/onBoarding/7_stepSeven.dart create mode 100644 lib/screens/onBoarding/8_stepEight.dart create mode 100644 lib/screens/onBoarding/9_stepNine.dart diff --git a/assets/onBoarding/phrase_de_restauration_flou.png b/assets/onBoarding/phrase_de_restauration_flou.png new file mode 100755 index 0000000000000000000000000000000000000000..bc69307785bc586a842af1aa2e357dbffabf9035 GIT binary patch literal 25544 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 literal 0 HcmV?d00001 diff --git a/lib/screens/commonElements.dart b/lib/screens/commonElements.dart index 9f4b07e..13ea797 100644 --- a/lib/screens/commonElements.dart +++ b/lib/screens/commonElements.dart @@ -36,3 +36,48 @@ class CommonElements { ); } } + +class SmoothTransition extends PageRouteBuilder { + final Widget page; + SmoothTransition({this.page}) + : super( + pageBuilder: ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + ) => + TweenAnimationBuilder( + duration: const Duration(seconds: 5), + tween: Tween(begin: 200, end: 200), + builder: (BuildContext context, dynamic value, Widget child) { + return page; + }, + ), + ); +} + +class SlideLeftRoute extends PageRouteBuilder { + final Widget page; + SlideLeftRoute({this.page}) + : super( + pageBuilder: ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + ) => + page, + transitionsBuilder: ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) => + SlideTransition( + position: Tween( + begin: const Offset(1, 0), + end: Offset.zero, + ).animate(animation), + child: child, + ), + ); +} diff --git a/lib/screens/home.dart b/lib/screens/home.dart index d5b33de..3ce9452 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -4,7 +4,6 @@ import 'package:gecko/models/history.dart'; import 'package:gecko/models/home.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/myWallets.dart'; -import 'package:gecko/screens/commonElements.dart'; import 'package:gecko/screens/myWallets/walletsHome.dart'; import 'package:gecko/screens/onBoarding/1_noKeychainFound.dart'; import 'dart:ui'; diff --git a/lib/screens/onBoarding/1_noKeychainFound.dart b/lib/screens/onBoarding/1_noKeychainFound.dart index 712e725..b833445 100644 --- a/lib/screens/onBoarding/1_noKeychainFound.dart +++ b/lib/screens/onBoarding/1_noKeychainFound.dart @@ -1,7 +1,8 @@ import 'package:bubble/bubble.dart'; import 'package:flutter/services.dart'; -import 'package:gecko/screens/home.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/2_stepOne.dart'; // import 'package:gecko/models/home.dart'; // import 'package:provider/provider.dart'; @@ -60,7 +61,14 @@ class NoKeyChainScreen extends StatelessWidget { child: Image( image: AssetImage('assets/onBoarding/wallet.png'), height: 75)), - onTap: () {}), + onTap: () { + Navigator.push( + context, SlideLeftRoute(page: OnboardingStepOne())); + // Navigator.push(context, + // MaterialPageRoute(builder: (context) { + // return OnboardingStepOne(); + // })); + }), ), ), decoration: BoxDecoration( @@ -122,27 +130,6 @@ class NoKeyChainScreen extends StatelessWidget { } } -// class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { - -// } -// // Widget build(BuildContext context) { -// // return AppBar( -// // leading: IconButton( -// // icon: Container( -// // height: 100, -// // child: Image.asset('assets/onBoarding/gecko_bar.png')), -// // onPressed: () => Navigator.popUntil( -// // context, -// // ModalRoute.withName('/'), -// // ), -// // ), -// // title: SizedBox( -// // height: 22, -// // child: Text('Mes portefeuilles'), -// // )); -// // } -// } - class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { @override final Size preferredSize; @@ -156,29 +143,6 @@ class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { @override Widget build(BuildContext context) { - // return PreferredSize( - // preferredSize: Size(MediaQuery.of(context).size.width, 200), - // child: Container( - // child: Stack( - // alignment: Alignment.topLeft, - // children: [ - // Container( - // color: Color(0xffFFD68E), - // width: MediaQuery.of(context).size.width, - // height: 100, - // ), - // Container( - // // width: 100, - // height: 200, - // child: Column(children: [ - // SizedBox(height: 61.5), - // Image.asset('assets/onBoarding/gecko_bar.png') - // ]), - // ), - // ], - // ), - // ), - // ); return AppBar( leading: IconButton( icon: Container( diff --git a/lib/screens/onBoarding/2_stepOne.dart b/lib/screens/onBoarding/2_stepOne.dart new file mode 100644 index 0000000..3307072 --- /dev/null +++ b/lib/screens/onBoarding/2_stepOne.dart @@ -0,0 +1,130 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/3_stepTwo.dart'; +// import 'package:gecko/models/home.dart'; +// import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class OnboardingStepOne extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 8; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Nouveau portefeuilles')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "Il semblerait que vous n’ayez pas encore de trousseau.\n\nUn trousseau vous permet de gérer un ou plusieurs portefeuilles.", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 70), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + Image.asset('assets/onBoarding/keys-and-wallets-horizontal.png'), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push(context, + SmoothTransition(page: OnboardingStepTwo())); + }, + child: Text('Créer mon trousseau', + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/3_stepTwo.dart b/lib/screens/onBoarding/3_stepTwo.dart new file mode 100644 index 0000000..b844259 --- /dev/null +++ b/lib/screens/onBoarding/3_stepTwo.dart @@ -0,0 +1,134 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/4_stepFor.dart'; +// import 'package:gecko/screens/commonElements.dart'; +// import 'package:gecko/models/home.dart'; +// import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class OnboardingStepTwo extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 17; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Nouveau portefeuilles')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "Un trousseau est créé à partir d’une phrase de restauration.", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 70), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + Image.asset( + 'assets/onBoarding/keys-and-wallets-horizontal-plus-phrase.png'), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push( + context, + SmoothTransition(page: OnboardingStepFor()), + ); + }, + child: Text("J'ai compris", + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/4_stepFor.dart b/lib/screens/onBoarding/4_stepFor.dart new file mode 100644 index 0000000..03db225 --- /dev/null +++ b/lib/screens/onBoarding/4_stepFor.dart @@ -0,0 +1,133 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/5_stepFive.dart'; + +// ignore: must_be_immutable +class OnboardingStepFor extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 20; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Ma phrase de restauration')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "Si un jour vous changez de téléphone, il vous suffira de me redonner votre phrase de restauration pour recréer votre trousseau.", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 10), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + Image.asset( + 'assets/onBoarding/plusieurs-appareils-un-trousseau.png', + height: 350, + ), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push( + context, + SmoothTransition(page: OnboardingStepFive()), + ); + }, + child: Text("J'ai compris", + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/5_stepFive.dart b/lib/screens/onBoarding/5_stepFive.dart new file mode 100644 index 0000000..d1c958e --- /dev/null +++ b/lib/screens/onBoarding/5_stepFive.dart @@ -0,0 +1,133 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/6_stepSix.dart'; + +// ignore: must_be_immutable +class OnboardingStepFive extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 25; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Ma phrase de restauration')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "Par contre, attention :\n\nDans une blockchain, il n’y a pas de procédure de récupération de trousseau.\n\nSi vous perdez votre phrase de restauration, je ne pourrai pas vous la communiquer, et vous ne pourrez donc plus jamais accéder à votre compte.", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 10), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + Image.asset( + 'assets/onBoarding/maison-qui-brule.png', + height: 200, + ), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push( + context, + SmoothTransition(page: OnboardingStepSix()), + ); + }, + child: Text("J'ai compris", + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/6_stepSix.dart b/lib/screens/onBoarding/6_stepSix.dart new file mode 100644 index 0000000..70918d0 --- /dev/null +++ b/lib/screens/onBoarding/6_stepSix.dart @@ -0,0 +1,133 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/7_stepSeven.dart'; + +// ignore: must_be_immutable +class OnboardingStepSix extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 28; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Ma phrase de restauration')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "Je vais générer votre phrase de restauration ansi que votre trousseau de clef.\n\nC’est moi qui vais décider des mots de votre phrase, parce que sans ça les gens choisissent des choses trop faciles à deviner.", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 10), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + Image.asset( + 'assets/onBoarding/good-bad-passphrase.png', + height: 300, + ), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push( + context, + SmoothTransition(page: OnboardingStepSeven()), + ); + }, + child: Text("Je comprends", + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/7_stepSeven.dart b/lib/screens/onBoarding/7_stepSeven.dart new file mode 100644 index 0000000..8369526 --- /dev/null +++ b/lib/screens/onBoarding/7_stepSeven.dart @@ -0,0 +1,161 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/8_stepEight.dart'; + +// ignore: must_be_immutable +class OnboardingStepSeven extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 33; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Ma phrase de restauration')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: RichText( + text: new TextSpan( + // Note: Styles for TextSpans must be explicitly defined. + // Child text spans will inherit styles from parent + style: new TextStyle( + fontSize: 14.0, + color: Colors.black, + ), + children: [ + new TextSpan(text: "Munissez-vous d'"), + new TextSpan( + text: 'un papier et d’un crayon\n', + style: new TextStyle(fontWeight: FontWeight.bold)), + new TextSpan( + text: + "afin de pouvoir noter votre phrase de restauration."), + ], + )), + ), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.min, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + // SizedBox(width: 50), + Container( + padding: const EdgeInsets.only(bottom: 90), + child: Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(15, 0, 0, 0), + // nip: BubbleNip.leftTop, + child: Text( + 'Moi, j’ai déjà essayé de\nmémoriser une phrase de\nrestauration, mais je n’ai\npas une mémoire\nd’éléphant.', + style: TextStyle(color: Colors.black), + ), + )), + + Image.asset( + 'assets/onBoarding/chopp-gecko.png', + height: 200, + ), + ]), + )), + SizedBox(height: 50), + SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push( + context, + SmoothTransition(page: OnboardingStepEight()), + ); + }, + child: Text("J'ai de quoi noter", + style: TextStyle(fontSize: 20))), + ), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/8_stepEight.dart b/lib/screens/onBoarding/8_stepEight.dart new file mode 100644 index 0000000..2601f20 --- /dev/null +++ b/lib/screens/onBoarding/8_stepEight.dart @@ -0,0 +1,134 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/onBoarding/7_stepSeven.dart'; +import 'package:gecko/screens/onBoarding/9_stepNine.dart'; + +// ignore: must_be_immutable +class OnboardingStepEight extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 42; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Ma phrase de restauration')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.all(15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "J’ai généré votre phrase de restauration !\nTâchez de la garder bien secrète, car elle permet à quiconque la connaît d’accéder à tous vos portefeuilles.", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 10), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + Image.asset( + 'assets/onBoarding/phrase_de_restauration_flou.png', + height: 300, + ), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + Navigator.push( + context, + SmoothTransition(page: OnboardingStepNine()), + ); + }, + child: Text("Afficher ma phrase", + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/lib/screens/onBoarding/9_stepNine.dart b/lib/screens/onBoarding/9_stepNine.dart new file mode 100644 index 0000000..973f967 --- /dev/null +++ b/lib/screens/onBoarding/9_stepNine.dart @@ -0,0 +1,146 @@ +import 'package:bubble/bubble.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/models/generateWallets.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class OnboardingStepNine extends StatelessWidget { + TextEditingController tplController = TextEditingController(); + final int progress = 50; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + GenerateWalletsProvider _generateWalletProvider = + Provider.of(context); + _generateWalletProvider.generateMnemonic(); + + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: [ + Stack(children: [ + Container(height: 100), + Positioned( + top: 0, + left: 0, + right: 0, + child: GeckoSpeechAppBar('Ma phrase de restauration')), + Positioned( + top: 0, + left: 0, + child: Image.asset( + 'assets/onBoarding/gecko_bar.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/total.png', + ), + ), + Positioned( + top: 70, + left: 50, + child: Image.asset( + 'assets/onBoarding/progress_bar/$progress.png', + ), + ), + Positioned( + top: 66, + right: 45, + child: Text('$progress%', + style: TextStyle(fontSize: 12, color: Colors.black)), + ), + ]), + Bubble( + padding: BubbleEdges.fromLTRB(40, 15, 40, 15), + elevation: 5, + color: Colors.white, + margin: BubbleEdges.fromLTRB(10, 0, 20, 10), + // nip: BubbleNip.leftTop, + child: Text( + "C’est le moment de noter votre phrase !", + style: TextStyle( + color: Colors.black, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + SizedBox(height: 64), + // Row(children: [ + // Align( + // alignment: Alignment.centerRight, + // child: + TextField( + enabled: false, + controller: _generateWalletProvider.mnemonicController, + maxLines: 3, + textAlign: TextAlign.center, + decoration: InputDecoration( + contentPadding: EdgeInsets.all(15.0), + ), + style: TextStyle( + fontSize: 22.0, + color: Colors.black, + fontWeight: FontWeight.w400)), + // ]), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 350, + height: 55, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 5, + primary: Color(0xffD28928), + onPrimary: Colors.white, // foreground + ), + onPressed: () { + // Navigator.push( + // context, + // SmoothTransition(page: OnboardingStepNince()), + // ); + }, + child: Text("J'ai noté ma phrase", + style: TextStyle(fontSize: 20))), + ))), + SizedBox(height: 80), + ]), + )); + } +} + +class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { + @override + final Size preferredSize; + final String title; + + GeckoSpeechAppBar( + this.title, { + Key key, + }) : preferredSize = Size.fromHeight(105.4), + super(key: key); + + @override + Widget build(BuildContext context) { + return AppBar( + leading: IconButton( + icon: Container( + height: 30, + child: Image.asset('assets/onBoarding/gecko_bar.png')), + onPressed: () => Navigator.popUntil( + context, + ModalRoute.withName('/'), + ), + ), + title: SizedBox( + height: 25, + child: Text(title), + )); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 07da75a..7a4f952 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,16 +57,7 @@ flutter: assets: - images/ - config/gva_endpoints.json - - assets/icon/gecko_final.png - assets/ - - assets/OpenSans-Regular.ttf - - assets/icon_user.png - - assets/qrcode-scan.png - - assets/blockchain.png - - assets/block-space.png - - assets/block-space-disabled.png - - assets/lock.png - - assets/onBoarding/gecko_bar.png - - assets/onBoarding/wallet.png - - assets/onBoarding/cesium.png - + - assets/icon/ + - assets/onBoarding/ + - assets/onBoarding/progress_bar/ \ No newline at end of file