From 2f7313ec1c4ab0008d8e39b965d8a8b3fb42b234 Mon Sep 17 00:00:00 2001 From: poka <poka@p2p.legal> 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 9f4b07e4..13ea7972 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<double> animation, + Animation<double> 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<double> animation, + Animation<double> secondaryAnimation, + ) => + page, + transitionsBuilder: ( + BuildContext context, + Animation<double> animation, + Animation<double> secondaryAnimation, + Widget child, + ) => + SlideTransition( + position: Tween<Offset>( + 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 d5b33de5..3ce94525 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 712e7253..b8334456 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: <Widget>[ - // Container( - // color: Color(0xffFFD68E), - // width: MediaQuery.of(context).size.width, - // height: 100, - // ), - // Container( - // // width: 100, - // height: 200, - // child: Column(children: <Widget>[ - // 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 00000000..33070728 --- /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: <Widget>[ + 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: <Widget>[ + // 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 00000000..b844259e --- /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: <Widget>[ + 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: <Widget>[ + // 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 00000000..03db2259 --- /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: <Widget>[ + 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: <Widget>[ + // 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 00000000..d1c958ed --- /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: <Widget>[ + 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: <Widget>[ + // 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 00000000..70918d0a --- /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: <Widget>[ + 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: <Widget>[ + // 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 00000000..8369526e --- /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: <Widget>[ + 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: <TextSpan>[ + 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: <Widget>[ + // 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 00000000..2601f20c --- /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: <Widget>[ + 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: <Widget>[ + // 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 00000000..973f9673 --- /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<GenerateWalletsProvider>(context); + _generateWalletProvider.generateMnemonic(); + + return Scaffold( + extendBodyBehindAppBar: true, + body: SafeArea( + child: Column(children: <Widget>[ + 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: <Widget>[ + // 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 07da75af..7a4f952b 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 -- GitLab