From 80675bb0dc7ea989c1ade0c59bdc2d3d85f30c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Fri, 16 Oct 2020 12:17:32 -0400 Subject: [PATCH 01/38] Adding NavDrawer base --- .../src/application/navdrawer/navdrawer_event.dart | 11 +++++++++++ .../src/application/navdrawer/navdrawer_state.dart | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 mobile/lib/src/application/navdrawer/navdrawer_event.dart create mode 100644 mobile/lib/src/application/navdrawer/navdrawer_state.dart diff --git a/mobile/lib/src/application/navdrawer/navdrawer_event.dart b/mobile/lib/src/application/navdrawer/navdrawer_event.dart new file mode 100644 index 00000000..e0842f25 --- /dev/null +++ b/mobile/lib/src/application/navdrawer/navdrawer_event.dart @@ -0,0 +1,11 @@ +part of 'navdrawer_bloc.dart'; + +abstract class NavdrawerEvent extends Equatable { + const NavdrawerEvent(); + @override + List get props => []; +} + +class HomePageEvent extends NavdrawerEvent {} + +class SamplePageEvent extends NavdrawerEvent {} diff --git a/mobile/lib/src/application/navdrawer/navdrawer_state.dart b/mobile/lib/src/application/navdrawer/navdrawer_state.dart new file mode 100644 index 00000000..c736ae86 --- /dev/null +++ b/mobile/lib/src/application/navdrawer/navdrawer_state.dart @@ -0,0 +1,3 @@ +part of 'navdrawer_bloc.dart'; + +enum NavdrawerState { homePage, testPage } From bb32ccaf92a9cf30a0a2419b2f1fbebd691fd2a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Fri, 16 Oct 2020 12:21:04 -0400 Subject: [PATCH 02/38] Fixing conflicts with bluetooth merge --- .gitignore | 2 ++ mobile/lib/src/app.dart | 10 ++++++++-- mobile/lib/src/locator.dart | 2 ++ mobile/pubspec.yaml | 7 +++---- 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..dca4ce7f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +mobile/pubspec.lock diff --git a/mobile/lib/src/app.dart b/mobile/lib/src/app.dart index ccc477e3..529f5c47 100644 --- a/mobile/lib/src/app.dart +++ b/mobile/lib/src/app.dart @@ -1,8 +1,10 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/presentation/bluetooth_route/bluetoothSelector_route.dart'; import 'locator.dart'; +import 'presentation/navigation/routes/router.gr.dart' as auto_router; import 'theme.dart'; class App extends StatelessWidget { @@ -18,10 +20,14 @@ class App extends StatelessWidget { child: MaterialApp( title: 'PolyDodo', theme: theme, - initialRoute: BluetoothSelectorRoute.name, + builder: ExtendedNavigator.builder( + router: auto_router.Router()), + /*home: WalletsRoute(), + initialRoute: WalletsRoute.name, routes: { BluetoothSelectorRoute.name: (context) => BluetoothSelectorRoute(), - }, + WalletsRoute.name: (context) => WalletsRoute(), + }, */ ), ); } diff --git a/mobile/lib/src/locator.dart b/mobile/lib/src/locator.dart index 8d521dae..efff8691 100644 --- a/mobile/lib/src/locator.dart +++ b/mobile/lib/src/locator.dart @@ -1,5 +1,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; +import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; import 'package:polydodo/src/domain/acquisition_device/i_acquisition_device_repository.dart'; @@ -24,6 +25,7 @@ List createBlocProviders() => [ _serviceLocator.get(), ), ), + BlocProvider(create: (context) => NavdrawerBloc()), BlocProvider( create: (context) => DataCubit( _serviceLocator.get(), diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 10bc9657..6477669d 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -23,10 +23,8 @@ environment: dependencies: flutter: sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. archive: ^2.0.13 + auto_route: ^0.6.9 battery: ^1.0.5 binary: ^2.0.0 bloc: ^6.0.3 @@ -46,10 +44,11 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + auto_route_generator: ^0.6.10 + build_runner: ^1.10.3 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec - # The following section is specific to Flutter. flutter: # The following line ensures that the Material Icons font is From 9324a60c0bb4c93a7ff2d38d8d3b191ec2141375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Fri, 16 Oct 2020 12:22:12 -0400 Subject: [PATCH 03/38] Adding auto_route --- .../navigation/routes/router.dart | 13 +++ .../navigation/routes/router.gr.dart | 89 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 mobile/lib/src/presentation/navigation/routes/router.dart create mode 100644 mobile/lib/src/presentation/navigation/routes/router.gr.dart diff --git a/mobile/lib/src/presentation/navigation/routes/router.dart b/mobile/lib/src/presentation/navigation/routes/router.dart new file mode 100644 index 00000000..499bf113 --- /dev/null +++ b/mobile/lib/src/presentation/navigation/routes/router.dart @@ -0,0 +1,13 @@ +import 'package:auto_route/auto_route_annotations.dart'; +import 'package:polydodo/src/presentation/navigation/appdrawer_page.dart'; +import 'package:polydodo/src/presentation/record_sleep/record_sleep_page.dart'; +import 'package:polydodo/src/presentation/wallets/wallets_page.dart'; + +@MaterialAutoRouter( + generateNavigationHelperExtension: true, + routes: [ + MaterialRoute(page: NavDrawerPage), + MaterialRoute(page: WalletsPage, initial: true), + MaterialRoute(page: RecordSleepPage), + ]) +class $Router {} diff --git a/mobile/lib/src/presentation/navigation/routes/router.gr.dart b/mobile/lib/src/presentation/navigation/routes/router.gr.dart new file mode 100644 index 00000000..344942ce --- /dev/null +++ b/mobile/lib/src/presentation/navigation/routes/router.gr.dart @@ -0,0 +1,89 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ************************************************************************** +// AutoRouteGenerator +// ************************************************************************** + +// ignore_for_file: public_member_api_docs + +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; + +import '../../record_sleep/record_sleep_page.dart'; +import '../../wallets/wallets_page.dart'; +import '../appdrawer_page.dart'; + +class Routes { + static const String appDrawerPage = '/app-drawer-page'; + static const String walletsPage = '/'; + static const String recordSleepPage = '/record-sleep-page'; + static const all = { + appDrawerPage, + walletsPage, + recordSleepPage, + }; +} + +class Router extends RouterBase { + @override + List get routes => _routes; + final _routes = [ + RouteDef(Routes.appDrawerPage, page: AppDrawerPage), + RouteDef(Routes.walletsPage, page: WalletsPage), + RouteDef(Routes.recordSleepPage, page: RecordSleepPage), + ]; + @override + Map get pagesMap => _pagesMap; + final _pagesMap = { + AppDrawerPage: (data) { + return MaterialPageRoute( + builder: (context) => AppDrawerPage(), + settings: data, + ); + }, + WalletsPage: (data) { + final args = data.getArgs( + orElse: () => WalletsPageArguments(), + ); + return MaterialPageRoute( + builder: (context) => WalletsPage(key: args.key), + settings: data, + ); + }, + RecordSleepPage: (data) { + return MaterialPageRoute( + builder: (context) => RecordSleepPage(), + settings: data, + ); + }, + }; +} + +/// ************************************************************************ +/// Navigation helper methods extension +/// ************************************************************************* + +extension RouterExtendedNavigatorStateX on ExtendedNavigatorState { + Future pushAppDrawerPage() => push(Routes.appDrawerPage); + + Future pushWalletsPage({ + Key key, + }) => + push( + Routes.walletsPage, + arguments: WalletsPageArguments(key: key), + ); + + Future pushRecordSleepPage() => + push(Routes.recordSleepPage); +} + +/// ************************************************************************ +/// Arguments holder classes +/// ************************************************************************* + +/// WalletsPage arguments holder class +class WalletsPageArguments { + final Key key; + WalletsPageArguments({this.key}); +} From 12f76b0487850769ff76ea98721b31a6004f82f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Fri, 16 Oct 2020 12:23:26 -0400 Subject: [PATCH 04/38] Adding .workspace to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index dca4ce7f..9830e7c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ mobile/pubspec.lock + +mobile/polydodo-mobile.code-workspace From c56840e16be2c5be7ee6d212b89f54a36210ffd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Fri, 16 Oct 2020 12:24:14 -0400 Subject: [PATCH 05/38] End of navdrawer base --- .../application/navdrawer/navdrawer_bloc.dart | 22 ++++++++++ .../navigation/appdrawer_page.dart | 43 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 mobile/lib/src/application/navdrawer/navdrawer_bloc.dart create mode 100644 mobile/lib/src/presentation/navigation/appdrawer_page.dart diff --git a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart new file mode 100644 index 00000000..9ac34157 --- /dev/null +++ b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart @@ -0,0 +1,22 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; + +part 'navdrawer_event.dart'; +part 'navdrawer_state.dart'; + +class NavdrawerBloc extends Bloc { + NavdrawerBloc() : super(NavdrawerState.homePage); + + @override + Stream mapEventToState( + NavdrawerEvent event, + ) async* { + if (event is HomePageEvent) { + yield NavdrawerState.homePage; + } else if (event is SamplePageEvent) { + yield NavdrawerState.testPage; + } + } +} diff --git a/mobile/lib/src/presentation/navigation/appdrawer_page.dart b/mobile/lib/src/presentation/navigation/appdrawer_page.dart new file mode 100644 index 00000000..7a9e067d --- /dev/null +++ b/mobile/lib/src/presentation/navigation/appdrawer_page.dart @@ -0,0 +1,43 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; +import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; + +class NavDrawerPage extends StatelessWidget { + static const name = "appDrawerRoute"; + + @override + Widget build(BuildContext context) { + return Drawer( + child: Column( + children: [ + Expanded( + child: ListView( + //padding: const EdgeInsets.only(top: 8.0), + children: [ + ListTile( + leading: Icon(Icons.group), + title: Text("Record Sleep Page"), + onTap: () { + context.bloc().add(SamplePageEvent()); + ExtendedNavigator.of(context) + .replace(Routes.recordSleepPage); + }, + ), + ListTile( + leading: Icon(Icons.group), + title: Text("Wallets"), + onTap: () { + context.bloc().add(HomePageEvent()); + ExtendedNavigator.of(context).replace(Routes.walletsPage); + }, + ), + ], + ), + ), + ], + ), + ); + } +} From 8973d4c0a32c31d5d9579cf832217f2f20727c6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Fri, 16 Oct 2020 12:24:25 -0400 Subject: [PATCH 06/38] Record sleep sample page --- .../record_sleep/record_sleep_page.dart | 15 +++++++++++++++ .../record_sleep/record_sleep_widgets.dart | 0 2 files changed, 15 insertions(+) create mode 100644 mobile/lib/src/presentation/record_sleep/record_sleep_page.dart create mode 100644 mobile/lib/src/presentation/record_sleep/record_sleep_widgets.dart diff --git a/mobile/lib/src/presentation/record_sleep/record_sleep_page.dart b/mobile/lib/src/presentation/record_sleep/record_sleep_page.dart new file mode 100644 index 00000000..e592ae2e --- /dev/null +++ b/mobile/lib/src/presentation/record_sleep/record_sleep_page.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:polydodo/src/presentation/navigation/appdrawer_page.dart'; + +class RecordSleepPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Sample Page')), + drawer: NavDrawerPage(), + body: Center( + child: Text('Sample Page'), + ), + ); + } +} diff --git a/mobile/lib/src/presentation/record_sleep/record_sleep_widgets.dart b/mobile/lib/src/presentation/record_sleep/record_sleep_widgets.dart new file mode 100644 index 00000000..e69de29b From 1d9399a7a429eb07fce68e28721fae5ec92611c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Wed, 21 Oct 2020 23:15:36 -0400 Subject: [PATCH 07/38] added assets directory --- .../common/assets/img/Material-Wallpaper.jpg | Bin 0 -> 225583 bytes mobile/common/assets/img/logo.png | Bin 0 -> 17234 bytes mobile/common/assets/img/logo2.png | Bin 0 -> 15822 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mobile/common/assets/img/Material-Wallpaper.jpg create mode 100644 mobile/common/assets/img/logo.png create mode 100644 mobile/common/assets/img/logo2.png diff --git a/mobile/common/assets/img/Material-Wallpaper.jpg b/mobile/common/assets/img/Material-Wallpaper.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98e6a69daa41acad6536f3f68a0a871e4fdc59c3 GIT binary patch literal 225583 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

7R> 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 lo|gI|ot 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 Date: Wed, 21 Oct 2020 23:16:42 -0400 Subject: [PATCH 08/38] auto_route code generated class --- .../navigation/routes/router.dart | 13 +-- .../navigation/routes/router.gr.dart | 84 ++++++++++++------- 2 files changed, 62 insertions(+), 35 deletions(-) diff --git a/mobile/lib/src/presentation/navigation/routes/router.dart b/mobile/lib/src/presentation/navigation/routes/router.dart index 499bf113..da0d477a 100644 --- a/mobile/lib/src/presentation/navigation/routes/router.dart +++ b/mobile/lib/src/presentation/navigation/routes/router.dart @@ -1,13 +1,16 @@ import 'package:auto_route/auto_route_annotations.dart'; -import 'package:polydodo/src/presentation/navigation/appdrawer_page.dart'; -import 'package:polydodo/src/presentation/record_sleep/record_sleep_page.dart'; -import 'package:polydodo/src/presentation/wallets/wallets_page.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; +import 'package:polydodo/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart'; +import 'package:polydodo/src/presentation/pages/dashboard/dashboard_page.dart'; +import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_page.dart'; @MaterialAutoRouter( generateNavigationHelperExtension: true, routes: [ MaterialRoute(page: NavDrawerPage), - MaterialRoute(page: WalletsPage, initial: true), - MaterialRoute(page: RecordSleepPage), + MaterialRoute(page: DashBoardPage, initial: true), + MaterialRoute(page: RecordSleepGuidePage), + MaterialRoute(page: RecordSleepValidatePage), + MaterialRoute(page: BluetoothSelectorPage), ]) class $Router {} diff --git a/mobile/lib/src/presentation/navigation/routes/router.gr.dart b/mobile/lib/src/presentation/navigation/routes/router.gr.dart index 344942ce..c1649374 100644 --- a/mobile/lib/src/presentation/navigation/routes/router.gr.dart +++ b/mobile/lib/src/presentation/navigation/routes/router.gr.dart @@ -9,18 +9,23 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; -import '../../record_sleep/record_sleep_page.dart'; -import '../../wallets/wallets_page.dart'; -import '../appdrawer_page.dart'; +import '../../pages/bluetooth_page/bluetoothSelector_page.dart'; +import '../../pages/dashboard/dashboard_page.dart'; +import '../../pages/record_sleep/record_sleep_guide_page.dart'; +import '../navdrawer_widget.dart'; class Routes { - static const String appDrawerPage = '/app-drawer-page'; - static const String walletsPage = '/'; - static const String recordSleepPage = '/record-sleep-page'; + static const String navDrawerPage = '/nav-drawer-page'; + static const String dashBoardPage = '/'; + static const String recordSleepGuidePage = '/record-sleep-guide-page'; + static const String recordSleepValidatePage = '/record-sleep-validate-page'; + static const String bluetoothSelectorPage = '/bluetooth-selector-page'; static const all = { - appDrawerPage, - walletsPage, - recordSleepPage, + navDrawerPage, + dashBoardPage, + recordSleepGuidePage, + recordSleepValidatePage, + bluetoothSelectorPage, }; } @@ -28,31 +33,45 @@ class Router extends RouterBase { @override List get routes => _routes; final _routes = [ - RouteDef(Routes.appDrawerPage, page: AppDrawerPage), - RouteDef(Routes.walletsPage, page: WalletsPage), - RouteDef(Routes.recordSleepPage, page: RecordSleepPage), + RouteDef(Routes.navDrawerPage, page: NavDrawerPage), + RouteDef(Routes.dashBoardPage, page: DashBoardPage), + RouteDef(Routes.recordSleepGuidePage, page: RecordSleepGuidePage), + RouteDef(Routes.recordSleepValidatePage, page: RecordSleepValidatePage), + RouteDef(Routes.bluetoothSelectorPage, page: BluetoothSelectorPage), ]; @override Map get pagesMap => _pagesMap; final _pagesMap = { - AppDrawerPage: (data) { + NavDrawerPage: (data) { return MaterialPageRoute( - builder: (context) => AppDrawerPage(), + builder: (context) => NavDrawerPage(), settings: data, ); }, - WalletsPage: (data) { - final args = data.getArgs( - orElse: () => WalletsPageArguments(), + DashBoardPage: (data) { + return MaterialPageRoute( + builder: (context) => DashBoardPage(), + settings: data, + ); + }, + RecordSleepGuidePage: (data) { + return MaterialPageRoute( + builder: (context) => RecordSleepGuidePage(), + settings: data, ); + }, + RecordSleepValidatePage: (data) { return MaterialPageRoute( - builder: (context) => WalletsPage(key: args.key), + builder: (context) => RecordSleepValidatePage(), settings: data, ); }, - RecordSleepPage: (data) { + BluetoothSelectorPage: (data) { + final args = data.getArgs( + orElse: () => BluetoothSelectorPageArguments(), + ); return MaterialPageRoute( - builder: (context) => RecordSleepPage(), + builder: (context) => BluetoothSelectorPage(key: args.key), settings: data, ); }, @@ -64,26 +83,31 @@ class Router extends RouterBase { /// ************************************************************************* extension RouterExtendedNavigatorStateX on ExtendedNavigatorState { - Future pushAppDrawerPage() => push(Routes.appDrawerPage); + Future pushNavDrawerPage() => push(Routes.navDrawerPage); + + Future pushDashBoardPage() => push(Routes.dashBoardPage); - Future pushWalletsPage({ + Future pushRecordSleepGuidePage() => + push(Routes.recordSleepGuidePage); + + Future pushRecordSleepValidatePage() => + push(Routes.recordSleepValidatePage); + + Future pushBluetoothSelectorPage({ Key key, }) => push( - Routes.walletsPage, - arguments: WalletsPageArguments(key: key), + Routes.bluetoothSelectorPage, + arguments: BluetoothSelectorPageArguments(key: key), ); - - Future pushRecordSleepPage() => - push(Routes.recordSleepPage); } /// ************************************************************************ /// Arguments holder classes /// ************************************************************************* -/// WalletsPage arguments holder class -class WalletsPageArguments { +/// BluetoothSelectorPage arguments holder class +class BluetoothSelectorPageArguments { final Key key; - WalletsPageArguments({this.key}); + BluetoothSelectorPageArguments({this.key}); } From 8cce6275c1ddca98c2752bd80b7e71d871c0e02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:10:06 -0400 Subject: [PATCH 09/38] App icon exports --- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 1921 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 1227 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 2789 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 4616 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 6874 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..11f562011518f49a543fd3adef3d53e52a20eb14 100644 GIT binary patch delta 1917 zcmV-@2ZH#Z1c48b8Gix*007#LBoF`q2S`aoK~#7F?V4F^O0A zobR^!)j4}>?w7kBPWIm2=bZK5YpwrU>)ZzX{Q1-Mf0TgQR)4^h_<{MF_<{MF_<{MF z_<{MF_<{MF{3T$jBCS)Wj#qWciitP=Rf}D^bm{Ebv(KJAYtp32gb5QSO`24VMVk+qWktC!2V$SzuV^+qZAAv9TZt3=B+9PoFq(qS)u_*RP3*iI*>5 zmZ;NiG~*UKefo4sNeP3bq$E(eJZOOd&aGRw?%%&(afu9c;WQ5H!i5Vc+P;1JIdkSP zef|3Nu3fv@wQILx#R{~aH*cP7`}FD4t5>g@HfeZ`<#Xf)jEYnV%I-zdE zh7DV{ZY_G}gv;AJPz|eB^=+W5c&6_uQd3i+9!i5XTW98-LxG41p8)9N&SOmG(y&pe* zbp4`G8?V*?tonBoPH`S#eB#83lP6Egepn&{Q2`ZTS!QVOt}UH1+84U5?~`n zjDKK%t5&U4%KqEHMDQgJo64P78Z&0hlqpjN4jf1bDUG?-uU~)5mMybq&sJJiR8(L? zR@5G@SpL?nTg{s{XUaiPG%s7W%wCvja79WAG|11-htS;~K|eSHgydO8dc%hgA3uIP zfuywDyLa!*nKL;8^|T<5+`W63l#NL_i+|dQG2V(34jMG5SFc_aO)p-&5dDa{V;(tt z_%L*@_Ty=1&YV%xr%#^}X`@DsQWm2!2GX8Adw48iHg)P$+qyZm7}}6<;X1Ww^+2!2 zxkry4c+RdO6_MHy4Zxl}d4lIa+4t|?x1KJ_;dpcB&b4kHFkpb| z-$X~RsQ^gD%#Dx@WihF|)?y4LI&|njv?x^S$hl$-T1jX_fq`JGPheYdaWPCNbrzdl zo}AvVU%!?uTRPFrsl|k&j~_n{iGKluBd0un`SPVY>7`4TZrr#LhHTKF0iL;f^=d19 z%MlzpbO>OOP5$oRpa2v1`_>Id|?H)KAqY9$;ruBfO5XdBCE38 zxpT(}Ra6!`zyt$kQK($M^oB*ojT<+8`gH0&GAub7_xn$EdEmo`4{c~tjo7ysN>^FM z5pvi~)vq-%0()rKY->`b*nbB``l?3hKXocNM(?LZJHUja8#QV~X90h}6AqQ&X{r>~ zCH7;CHf+g~B@7lXUQB84P!9r9@AqK)u1KdOgM@?xvNKhc6SaEx?rrokaz{Bdz{iHV7nU97Zd z(IPA?EF>g^EB$CuQGXE@qm{1w9|RgjGcfBH!m(q==H=zNJYTkfBpYZYv1$!VekWq; zM+s~B8yXsFMPd$&Rs8>%<7;9Hn6QFZU8@!iz0@iOEml@mCa4%tG09jOYOs}-meTc@ zd%I>}Xk1cKQc+Ps8!A7Uv$%HcS`sl7^5DUPq@*O-xoFX%_;&dCHf`E~*~%`uL^H6= z%*>RO6g3s&6ciMw|G-h}#l^)@QBg9^$jBfE=+#6su<-D3E3g`h37^yqEHX0E^@nNK z5SJLKJWStG6Y=LUUlTttUlTttUlTttUlTttUz2|TbV!LH!S<2V00000NkvXXu0mjf D)tb4{ literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..5af1b460951d3f3318c96423dadfd792ede3fef7 100644 GIT binary patch delta 1218 zcmV;z1U>t@1Ir1J8Gix*007uvZqNV#1d>TaK~#7F?U-38ZBZD<54JKSW9Bgu@}dmk zfy@dCNhDK}IpIE0q)f?+GKE5hq|6yIgyaF4heSvShcZWo`@d(Ej(gpE_St7U?!);W zR(q|z_xgV4Ti>(~_4fA0`JaUPZh+rK0whQzK!QX9BuLl+dVk}|$;pYLqN1|0GFGId zq`n7;pw!jXRaI4Sxm<7r2M3pwl*r1;GGh`6h-CTv{QQQ71}iJ8=;-K&hlkG2PD~RL z5}55Ns)aT;H=*9s)3dg=Rz^k!D?k|<8hXd&2zh*>0*#H0L2*`A7PMw$WSE(mB_}6` zg@xVU-%m_TJbyku+S%C|7#PrJ5*6s?<_5~t)zv{TFfd?lZVsTAmzTi6Kp0PoC-L#| zIXO8rnM4ILF)_h7JUkp3896mIrJ$gI>CVp1*47pwczu1vX*xPOdU$w<1IXLkJ1;M< zprC-FsDOZg=jUfE8X6kv>gpaJA9HvPgfm@RTXT1Jr+;H4xlpwe8d!{ zEiEkoB7eAuul4nHShuXKEHpIK$jC_GsR?mp@B?^ES63H|0W%;Uf~lgS0(Xs#jbmbB zs;jGU-PhNbot>?(uTMe@)6&vX{FuzlOg4Q8f=#=-yKirA$-ao~g@uLpyK!-Gh$h4o z{JOHTvaqlai__E7ghNF|WqW(u($bPmAlN@OHGdUmxVX3=Oo*e)%S$97OtrMMtgWqA zR#vdy(b0hz1R zt*zB!@l;`rEiY7juZgM$Msgs8@dhyw={!zwm5Hp|P)dwYAtav0m&+Yw)IAlMbw zLVsYgnW>3KCnY8A@9*OpzKl`;g0r(Ta%**UmGd!09UUFPobVemWwVw+B^)^_DvG2y zNPmC7l9EzxZf;v!+sw?&r~2>~0-lZ+3k?K8-h(mTj{_r41T>$b5W)KC>8Y?Zw17zd zMJT~l5jFhl|9A@)B6W>@AZ+d8;^O1ugMS7C>6r8zbhd^&e+dxOlj5bOrWO-T)~H-S+RlK25%4y3KET~kvN8ygF+`Uj1_zdy1f0~(=$ zaD2|r&OJRnXnmHJmPo$-upLFAvZ5hDxex~sVM0~v?d_eNokhV%vOxf9^JH>z5`U>Y zF)@)N<_|@p3~e&H(v6Lc@$qruE~pjw5@L+P9Ecwag3=};1ivr``rDtAe>#>>BGOj} zayQgtl$V#s#naOh>0(6@CO}tLSLi*sTrMeR=-PaJeNpfa4h{|v578@{nwmN}IpJeS zOhAi^i=^KO2?-%9_$)-Tf&9ebnL7=hj^-&mJX}mbE<6!fTp8@l5QvV?e%l{btcwIl gkVt?8$$tm*6UI+8F8;;Cp8x;=07*qoM6N<$f^2s>xBvhE literal 442 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 ZYRGg|{ze0+=n)WK1qhZ7xJs-S`9GidM+X1^ literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..3d3e79ef04b01bf1f053fd59838ebb273c8910aa 100644 GIT binary patch literal 4616 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 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..488619c44692b998643dc7c3d2f015f04cb28412 100644 GIT binary patch literal 6874 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 From 52e42bdda2ba62708b3a77931863875a22408b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:10:29 -0400 Subject: [PATCH 10/38] record sleep pages --- .../record_sleep/record_sleep_guide_page.dart | 23 +++++++++++++++ .../record_sleep/record_sleep_guide_page.dart | 28 +++++++++++++++++++ .../record_sleep_recording_page.dart | 1 + .../record_sleep_validate_page.dart} | 18 +++--------- .../record_sleep/record_sleep_widgets.dart | 0 5 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart create mode 100644 mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart create mode 100644 mobile/lib/src/presentation/pages/record_sleep/record_sleep_recording_page.dart rename mobile/lib/src/presentation/{recording/recording_route.dart => pages/record_sleep/record_sleep_validate_page.dart} (66%) rename mobile/lib/src/presentation/{ => pages}/record_sleep/record_sleep_widgets.dart (100%) diff --git a/mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart new file mode 100644 index 00000000..3dda31f3 --- /dev/null +++ b/mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart @@ -0,0 +1,23 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; +import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; + +class RecordSleepGuidePage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Record Sleep')), + drawer: NavDrawerPage(), + body: Center( + child: Text('Record Sleep Guide'), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + ExtendedNavigator.of(context).replace(Routes.recordSleepValidatePage); + }, + child: Icon(Icons.add), + ), + ); + } +} diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart new file mode 100644 index 00000000..2c2dd721 --- /dev/null +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -0,0 +1,28 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; +import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; + +part 'record_sleep_recording_page.dart'; +part 'record_sleep_validate_page.dart'; + +class RecordSleepGuidePage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Record Sleep')), + drawer: NavDrawerPage(), + body: Center( + child: Text('Record Sleep Guide'), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + ExtendedNavigator.of(context).replace(Routes.recordSleepValidatePage); + }, + child: Icon(Icons.add), + ), + ); + } +} diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_recording_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_recording_page.dart new file mode 100644 index 00000000..5490f9d3 --- /dev/null +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_recording_page.dart @@ -0,0 +1 @@ +part of 'record_sleep_guide_page.dart'; diff --git a/mobile/lib/src/presentation/recording/recording_route.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart similarity index 66% rename from mobile/lib/src/presentation/recording/recording_route.dart rename to mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index bcb475ac..d345d884 100644 --- a/mobile/lib/src/presentation/recording/recording_route.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -1,21 +1,11 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; -import 'package:polydodo/src/application/eeg_data/data_states.dart'; - -class RecordingRoute extends StatelessWidget { - static const name = 'recordingRoute'; - - RecordingRoute({Key key}) : super(key: key); +part of 'record_sleep_guide_page.dart'; +class RecordSleepValidatePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text("Recording"), - ), + appBar: AppBar(title: Text('Record Sleep')), + drawer: NavDrawerPage(), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); diff --git a/mobile/lib/src/presentation/record_sleep/record_sleep_widgets.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_widgets.dart similarity index 100% rename from mobile/lib/src/presentation/record_sleep/record_sleep_widgets.dart rename to mobile/lib/src/presentation/pages/record_sleep/record_sleep_widgets.dart From 499dd6e6eb77db191469a431ec26c28763e76a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:10:56 -0400 Subject: [PATCH 11/38] navigation drawer page & bloc --- .../application/navdrawer/navdrawer_bloc.dart | 8 +- .../navdrawer/navdrawer_event.dart | 12 ++- .../navdrawer/navdrawer_state.dart | 2 +- .../navigation/appdrawer_page.dart | 43 ---------- .../navigation/navdrawer_widget.dart | 81 +++++++++++++++++++ 5 files changed, 95 insertions(+), 51 deletions(-) delete mode 100644 mobile/lib/src/presentation/navigation/appdrawer_page.dart create mode 100644 mobile/lib/src/presentation/navigation/navdrawer_widget.dart diff --git a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart index 9ac34157..cc5677bd 100644 --- a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart +++ b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart @@ -7,16 +7,14 @@ part 'navdrawer_event.dart'; part 'navdrawer_state.dart'; class NavdrawerBloc extends Bloc { - NavdrawerBloc() : super(NavdrawerState.homePage); + NavdrawerBloc() : super(NavdrawerState.DashBoard); @override Stream mapEventToState( NavdrawerEvent event, ) async* { - if (event is HomePageEvent) { - yield NavdrawerState.homePage; - } else if (event is SamplePageEvent) { - yield NavdrawerState.testPage; + if (event is NavdrawerUpdated) { + yield event.page; } } } diff --git a/mobile/lib/src/application/navdrawer/navdrawer_event.dart b/mobile/lib/src/application/navdrawer/navdrawer_event.dart index e0842f25..fee83f7d 100644 --- a/mobile/lib/src/application/navdrawer/navdrawer_event.dart +++ b/mobile/lib/src/application/navdrawer/navdrawer_event.dart @@ -6,6 +6,14 @@ abstract class NavdrawerEvent extends Equatable { List get props => []; } -class HomePageEvent extends NavdrawerEvent {} +class NavdrawerUpdated extends NavdrawerEvent { + final NavdrawerState page; -class SamplePageEvent extends NavdrawerEvent {} + const NavdrawerUpdated(this.page); + + @override + List get props => [page]; + + @override + String toString() => 'NavDrawerUpdated { tab: $page }'; +} diff --git a/mobile/lib/src/application/navdrawer/navdrawer_state.dart b/mobile/lib/src/application/navdrawer/navdrawer_state.dart index c736ae86..08595936 100644 --- a/mobile/lib/src/application/navdrawer/navdrawer_state.dart +++ b/mobile/lib/src/application/navdrawer/navdrawer_state.dart @@ -1,3 +1,3 @@ part of 'navdrawer_bloc.dart'; -enum NavdrawerState { homePage, testPage } +enum NavdrawerState { DashBoard, RecordSleep, History, BluetoothSelector } diff --git a/mobile/lib/src/presentation/navigation/appdrawer_page.dart b/mobile/lib/src/presentation/navigation/appdrawer_page.dart deleted file mode 100644 index 7a9e067d..00000000 --- a/mobile/lib/src/presentation/navigation/appdrawer_page.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:auto_route/auto_route.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; -import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; - -class NavDrawerPage extends StatelessWidget { - static const name = "appDrawerRoute"; - - @override - Widget build(BuildContext context) { - return Drawer( - child: Column( - children: [ - Expanded( - child: ListView( - //padding: const EdgeInsets.only(top: 8.0), - children: [ - ListTile( - leading: Icon(Icons.group), - title: Text("Record Sleep Page"), - onTap: () { - context.bloc().add(SamplePageEvent()); - ExtendedNavigator.of(context) - .replace(Routes.recordSleepPage); - }, - ), - ListTile( - leading: Icon(Icons.group), - title: Text("Wallets"), - onTap: () { - context.bloc().add(HomePageEvent()); - ExtendedNavigator.of(context).replace(Routes.walletsPage); - }, - ), - ], - ), - ), - ], - ), - ); - } -} diff --git a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart new file mode 100644 index 00000000..11c9e108 --- /dev/null +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -0,0 +1,81 @@ +import 'dart:io'; + +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; +import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; + +class NavDrawerPage extends StatelessWidget { + static const name = "appDrawerRoute"; + + @override + Widget build(BuildContext context) { + return Drawer( + child: ListView( + padding: EdgeInsets.zero, //only(top: 8.0), + children: [ + _createHeader(), + _createDrawerItem( + icon: Icons.bluetooth, + text: "Bluetooth selector", + onTap: () { + context + .bloc() + .add(NavdrawerUpdated(NavdrawerState.BluetoothSelector)); + ExtendedNavigator.of(context) + .replace(Routes.bluetoothSelectorPage); + }, + ), + _createDrawerItem( + icon: Icons.hotel, + text: "Record Sleep sequence", + onTap: () { + context + .bloc() + .add(NavdrawerUpdated(NavdrawerState.RecordSleep)); + ExtendedNavigator.of(context) + .replace(Routes.recordSleepGuidePage); + }, + ), + ], + ), + ); + } +} + +Widget _createHeader() { + return DrawerHeader( + margin: EdgeInsets.zero, + padding: EdgeInsets.zero, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage('common/assets/img/Material-Wallpaper.jpg'))), + child: Stack(children: [ + Positioned( + bottom: 12.0, + left: 16.0, + child: Text("Polydodo", + style: TextStyle( + color: Colors.white, + fontSize: 20.0, + fontWeight: FontWeight.w500))), + ])); +} + +Widget _createDrawerItem( + {IconData icon, String text, GestureTapCallback onTap}) { + return ListTile( + title: Row( + children: [ + Icon(icon), + Padding( + padding: EdgeInsets.only(left: 8.0), + child: Text(text), + ) + ], + ), + onTap: onTap, + ); +} From 03fe21ce7ee40c993e668f0bf72a717255f2512e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:11:13 -0400 Subject: [PATCH 12/38] renaming bluetooth stuff --- mobile/lib/src/application/eeg_data/data_cubit.dart | 3 ++- mobile/lib/src/application/eeg_data/data_states.dart | 2 ++ .../bluetooth_page/bluetoothSelector_page.dart} | 11 +++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) rename mobile/lib/src/presentation/{bluetooth_route/bluetoothSelector_route.dart => pages/bluetooth_page/bluetoothSelector_page.dart} (85%) diff --git a/mobile/lib/src/application/eeg_data/data_cubit.dart b/mobile/lib/src/application/eeg_data/data_cubit.dart index 3f69dbce..af4d6525 100644 --- a/mobile/lib/src/application/eeg_data/data_cubit.dart +++ b/mobile/lib/src/application/eeg_data/data_cubit.dart @@ -1,10 +1,11 @@ import 'package:polydodo/src/domain/acquisition_device/i_acquisition_device_repository.dart'; import 'package:polydodo/src/domain/eeg_data/i_eeg_data_repository.dart'; -import 'data_states.dart'; import 'package:bloc/bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +part './data_states.dart'; + class DataCubit extends Cubit { final IAcquisitionDeviceRepository _deviceRepository; final IEEGDataRepository _eegDataRepository; diff --git a/mobile/lib/src/application/eeg_data/data_states.dart b/mobile/lib/src/application/eeg_data/data_states.dart index 69453e90..239ab2e6 100644 --- a/mobile/lib/src/application/eeg_data/data_states.dart +++ b/mobile/lib/src/application/eeg_data/data_states.dart @@ -1,3 +1,5 @@ +part of './data_cubit.dart'; + abstract class DataState {} class DataStateInitial extends DataState {} diff --git a/mobile/lib/src/presentation/bluetooth_route/bluetoothSelector_route.dart b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart similarity index 85% rename from mobile/lib/src/presentation/bluetooth_route/bluetoothSelector_route.dart rename to mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart index eaef0c99..a5d61314 100644 --- a/mobile/lib/src/presentation/bluetooth_route/bluetoothSelector_route.dart +++ b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart @@ -2,17 +2,20 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/device/device_selector_state.dart'; -import 'package:polydodo/src/presentation/recording/recording_route.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; -class BluetoothSelectorRoute extends StatelessWidget { +import 'record_sleep/record_sleep_guide_page.dart'; + +class BluetoothSelectorPage extends StatelessWidget { static const name = 'bluetoothRoute'; - BluetoothSelectorRoute({Key key}) : super(key: key); + BluetoothSelectorPage({Key key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Polydodo')), + drawer: NavDrawerPage(), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); @@ -30,7 +33,7 @@ class BluetoothSelectorRoute extends StatelessWidget { Navigator.push( context, MaterialPageRoute( - builder: (context) => RecordingRoute(), + builder: (context) => RecordSleepGuidePage(), )); } }, From f505f6e54b0c15ccab684b942920379fbddab227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:11:37 -0400 Subject: [PATCH 13/38] blocs barrel file for exports --- mobile/lib/src/application/blocs.dart | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 mobile/lib/src/application/blocs.dart diff --git a/mobile/lib/src/application/blocs.dart b/mobile/lib/src/application/blocs.dart new file mode 100644 index 00000000..6a2687db --- /dev/null +++ b/mobile/lib/src/application/blocs.dart @@ -0,0 +1,3 @@ +export './device/device_selector_cubit.dart'; +export './eeg_data/data_cubit.dart'; +export './navdrawer/navdrawer_bloc.dart'; From e7f35f7dd02756921f75604d12d49e3e8aa565c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:11:49 -0400 Subject: [PATCH 14/38] adding dashboard page --- .../pages/dashboard/dashboard_page.dart | 15 +++++++++++++++ .../record_sleep/record_sleep_page.dart | 15 --------------- 2 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart delete mode 100644 mobile/lib/src/presentation/record_sleep/record_sleep_page.dart diff --git a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart new file mode 100644 index 00000000..de80de32 --- /dev/null +++ b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; + +class DashBoardPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Polydodo')), + drawer: NavDrawerPage(), + body: Center( + child: Text("Allo"), + ), + ); + } +} diff --git a/mobile/lib/src/presentation/record_sleep/record_sleep_page.dart b/mobile/lib/src/presentation/record_sleep/record_sleep_page.dart deleted file mode 100644 index e592ae2e..00000000 --- a/mobile/lib/src/presentation/record_sleep/record_sleep_page.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:polydodo/src/presentation/navigation/appdrawer_page.dart'; - -class RecordSleepPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text('Sample Page')), - drawer: NavDrawerPage(), - body: Center( - child: Text('Sample Page'), - ), - ); - } -} From cd46f17eb3b3a604c4e6cf48380a3ad8ed1619fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:12:42 -0400 Subject: [PATCH 15/38] adding assets and app icon to pubspect file --- mobile/pubspec.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 6477669d..d270ba07 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -45,6 +45,7 @@ dev_dependencies: flutter_test: sdk: flutter auto_route_generator: ^0.6.10 + flutter_launcher_icons: "^0.7.0" build_runner: ^1.10.3 # For information on the generic Dart part of this file, see the @@ -56,7 +57,8 @@ flutter: # the material Icons class. uses-material-design: true # To add assets to your application, add an assets section, like this: - # assets: + assets: + - common/assets/img/ # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see @@ -82,3 +84,6 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/custom-fonts/#from-packages +flutter_icons: + android: true + image_path: "common/assets/img/logo2.png" \ No newline at end of file From 16bbe80ca75be24e07196503cfc7b0c14b0d2aa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 22 Oct 2020 00:13:01 -0400 Subject: [PATCH 16/38] unused import --- mobile/lib/src/app.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/mobile/lib/src/app.dart b/mobile/lib/src/app.dart index 529f5c47..dc0f751a 100644 --- a/mobile/lib/src/app.dart +++ b/mobile/lib/src/app.dart @@ -1,7 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:polydodo/src/presentation/bluetooth_route/bluetoothSelector_route.dart'; import 'locator.dart'; import 'presentation/navigation/routes/router.gr.dart' as auto_router; From 45679e85d7e834d9661b9dae048b5a4b1b2777a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 29 Oct 2020 02:38:35 -0400 Subject: [PATCH 17/38] NavDrawer with selection --- .../navigation/navdrawer_widget.dart | 132 ++++++++++-------- .../bluetoothSelector_page.dart | 11 +- 2 files changed, 74 insertions(+), 69 deletions(-) diff --git a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart index 11c9e108..0f7c16f1 100644 --- a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -8,74 +8,82 @@ import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; class NavDrawerPage extends StatelessWidget { static const name = "appDrawerRoute"; + NavdrawerState drawerSelectedTab = NavdrawerState.DashBoard; + BuildContext context; @override Widget build(BuildContext context) { - return Drawer( - child: ListView( - padding: EdgeInsets.zero, //only(top: 8.0), - children: [ - _createHeader(), - _createDrawerItem( - icon: Icons.bluetooth, - text: "Bluetooth selector", - onTap: () { - context - .bloc() - .add(NavdrawerUpdated(NavdrawerState.BluetoothSelector)); - ExtendedNavigator.of(context) - .replace(Routes.bluetoothSelectorPage); - }, - ), - _createDrawerItem( - icon: Icons.hotel, - text: "Record Sleep sequence", - onTap: () { - context - .bloc() - .add(NavdrawerUpdated(NavdrawerState.RecordSleep)); - ExtendedNavigator.of(context) - .replace(Routes.recordSleepGuidePage); - }, + this.context = context; + return BlocBuilder( + builder: (context, drawerSelectedTab) { + this.drawerSelectedTab = drawerSelectedTab; + return Drawer( + child: ListView( + padding: EdgeInsets.zero, //only(top: 8.0), + children: [ + _createHeader(), + _createDrawerItem( + icon: Icons.dashboard, + text: "Dashboard", + state: NavdrawerState.DashBoard, + route: Routes.dashBoardPage, + ), + _createDrawerItem( + icon: Icons.bluetooth, + text: "Bluetooth selector", + state: NavdrawerState.BluetoothSelector, + route: Routes.bluetoothSelectorPage, + ), + _createDrawerItem( + icon: Icons.hotel, + text: "Record Sleep sequence", + state: NavdrawerState.RecordSleep, + route: Routes.recordSleepGuidePage, + ), + ], ), - ], - ), + ); + }, ); } -} -Widget _createHeader() { - return DrawerHeader( - margin: EdgeInsets.zero, - padding: EdgeInsets.zero, - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage('common/assets/img/Material-Wallpaper.jpg'))), - child: Stack(children: [ - Positioned( - bottom: 12.0, - left: 16.0, - child: Text("Polydodo", - style: TextStyle( - color: Colors.white, - fontSize: 20.0, - fontWeight: FontWeight.w500))), - ])); -} + Widget _createHeader() { + return DrawerHeader( + margin: EdgeInsets.zero, + padding: EdgeInsets.zero, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage('common/assets/img/Material-Wallpaper.jpg'))), + child: Stack(children: [ + Positioned( + bottom: 12.0, + left: 16.0, + child: Text("Polydodo", + style: TextStyle( + color: Colors.white, + fontSize: 20.0, + fontWeight: FontWeight.w500))), + ])); + } -Widget _createDrawerItem( - {IconData icon, String text, GestureTapCallback onTap}) { - return ListTile( - title: Row( - children: [ - Icon(icon), - Padding( - padding: EdgeInsets.only(left: 8.0), - child: Text(text), - ) - ], - ), - onTap: onTap, - ); + Widget _createDrawerItem( + {IconData icon, String text, NavdrawerState state, String route}) { + return ListTile( + title: Row( + children: [ + Icon(icon), + Padding( + padding: EdgeInsets.only(left: 8.0), + child: Text(text), + ) + ], + ), + onTap: () { + context.bloc().add(NavdrawerUpdated(state)); + ExtendedNavigator.of(this.context).replace(route); + }, + selected: this.drawerSelectedTab == state, + ); + } } diff --git a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart index a5d61314..6378f1ca 100644 --- a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart +++ b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart @@ -1,10 +1,11 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/device/device_selector_state.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; - -import 'record_sleep/record_sleep_guide_page.dart'; +import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; +import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_page.dart'; class BluetoothSelectorPage extends StatelessWidget { static const name = 'bluetoothRoute'; @@ -30,11 +31,7 @@ class BluetoothSelectorPage extends StatelessWidget { Text('Unable to connect to device because ${state.cause}'), )); } else if (state is DeviceConnectionSuccess) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => RecordSleepGuidePage(), - )); + ExtendedNavigator.of(context).replace(Routes.recordSleepGuidePage); } }, builder: (context, state) { From 06311d69760ca6519718aeb9a2c6edf031572a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 29 Oct 2020 02:39:23 -0400 Subject: [PATCH 18/38] added pageView slider to sleep guide --- .../pages/record_sleep/record_sleep_guide_page.dart | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart index 2c2dd721..dc310d9c 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; +import 'package:polydodo/src/presentation/widgets/simple_line_chart.dart'; part 'record_sleep_recording_page.dart'; part 'record_sleep_validate_page.dart'; @@ -14,14 +15,18 @@ class RecordSleepGuidePage extends StatelessWidget { return Scaffold( appBar: AppBar(title: Text('Record Sleep')), drawer: NavDrawerPage(), - body: Center( - child: Text('Record Sleep Guide'), + body: PageView( + children: [ + Container(child: Center(child: Text('Record Sleep Guide'))), + Container(child: Center(child: Text('Record Sleep next'))), + ], ), - floatingActionButton: FloatingActionButton( + floatingActionButton: FloatingActionButton.extended( onPressed: () { ExtendedNavigator.of(context).replace(Routes.recordSleepValidatePage); }, - child: Icon(Icons.add), + icon: Icon(Icons.radio_button_checked), + label: Text("Record"), ), ); } From 626b1a274de3e52bd3d903397aff403bebc781c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 29 Oct 2020 02:40:03 -0400 Subject: [PATCH 19/38] adding sliverbar to dashboard --- mobile/common/assets/img/sliverbar.png | Bin 0 -> 74281 bytes .../pages/dashboard/dashboard_page.dart | 33 ++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 mobile/common/assets/img/sliverbar.png diff --git a/mobile/common/assets/img/sliverbar.png b/mobile/common/assets/img/sliverbar.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5019f0c082a358787c893ae86c39d7a76d5890 GIT binary patch literal 74281 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 g+Te&5eYg+7hiQ5GRDS&ya4f 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[ + SliverAppBar( + expandedHeight: 200.0, + floating: false, + pinned: true, + flexibleSpace: FlexibleSpaceBar( + centerTitle: false, + title: Text("Polydodo", + style: TextStyle( + color: Colors.white, + fontSize: 16.0, + )), + background: Image.network( + "https://images.pexels.com/photos/396547/pexels-photo-396547.jpeg?auto=compress&cs=tinysrgb&h=350", + fit: BoxFit.cover, + )), + ), + ]; + }, + body: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 50), + child: Padding( + padding: EdgeInsets.symmetric(vertical: 200), + child: SimpleLineChart.withSampleData())), + ), ), ); } From 1b7e7bf667278ee182f03c806750fafb7c50ad72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 29 Oct 2020 02:40:41 -0400 Subject: [PATCH 20/38] removed unused file --- .../record_sleep/record_sleep_guide_page.dart | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart diff --git a/mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart deleted file mode 100644 index 3dda31f3..00000000 --- a/mobile/lib/src/presentation/pages/bluetooth_page/record_sleep/record_sleep_guide_page.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:auto_route/auto_route.dart'; -import 'package:flutter/material.dart'; -import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; -import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; - -class RecordSleepGuidePage extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text('Record Sleep')), - drawer: NavDrawerPage(), - body: Center( - child: Text('Record Sleep Guide'), - ), - floatingActionButton: FloatingActionButton( - onPressed: () { - ExtendedNavigator.of(context).replace(Routes.recordSleepValidatePage); - }, - child: Icon(Icons.add), - ), - ); - } -} From f3d696b16e14a1f10050c8f3e8b820a526e8b695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 29 Oct 2020 02:42:44 -0400 Subject: [PATCH 21/38] adding mock chart --- .../record_sleep_validate_page.dart | 23 ++++---- .../widgets/simple_line_chart.dart | 52 +++++++++++++++++++ mobile/pubspec.yaml | 1 + 3 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 mobile/lib/src/presentation/widgets/simple_line_chart.dart diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index d345d884..11be9e80 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -24,16 +24,19 @@ class RecordSleepValidatePage extends StatelessWidget { ]), ); else - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - RaisedButton( - child: Text("Stop"), - onPressed: () => - BlocProvider.of(context).stopStreaming(), - ), - ]), + return ListView( + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + RaisedButton( + child: Text("Stop"), + onPressed: () => + BlocProvider.of(context).stopStreaming(), + ), + ]), + SimpleLineChart.withSampleData(), + ], ); }, ), diff --git a/mobile/lib/src/presentation/widgets/simple_line_chart.dart b/mobile/lib/src/presentation/widgets/simple_line_chart.dart new file mode 100644 index 00000000..6255c919 --- /dev/null +++ b/mobile/lib/src/presentation/widgets/simple_line_chart.dart @@ -0,0 +1,52 @@ +/// Example of a simple line chart. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class SimpleLineChart extends StatelessWidget { + final List seriesList; + final bool animate; + + SimpleLineChart(this.seriesList, {this.animate}); + + /// Creates a [LineChart] with sample data and no transition. + factory SimpleLineChart.withSampleData() { + return new SimpleLineChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.LineChart(seriesList, animate: animate); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new LinearSales(0, 5), + new LinearSales(1, 25), + new LinearSales(2, 100), + new LinearSales(3, 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample linear data type. +class LinearSales { + final int year; + final int sales; + + LinearSales(this.year, this.sales); +} diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index d270ba07..f5dd6a6a 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -40,6 +40,7 @@ dependencies: share: ^0.6.5 uuid: ^2.2.2 usb_serial: ^0.2.4 + charts_flutter: dev_dependencies: flutter_test: From 1fdf509e799bba6308e67f92ed67d797e215d2a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 00:08:23 -0500 Subject: [PATCH 22/38] Various lint fixes --- .../navigation/navdrawer_widget.dart | 26 +++++++++---------- .../bluetoothSelector_page.dart | 1 - .../pages/dashboard/dashboard_page.dart | 4 +-- .../record_sleep/record_sleep_guide_page.dart | 2 +- .../record_sleep_validate_page.dart | 9 ++++--- .../widgets/simple_line_chart.dart | 14 +++++----- 6 files changed, 27 insertions(+), 29 deletions(-) diff --git a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart index 0f7c16f1..777bc45f 100644 --- a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -7,16 +5,16 @@ import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; class NavDrawerPage extends StatelessWidget { - static const name = "appDrawerRoute"; - NavdrawerState drawerSelectedTab = NavdrawerState.DashBoard; - BuildContext context; + static const name = 'appDrawerRoute'; + NavdrawerState _drawerSelectedTab = NavdrawerState.DashBoard; + BuildContext _context; @override Widget build(BuildContext context) { - this.context = context; + _context = context; return BlocBuilder( builder: (context, drawerSelectedTab) { - this.drawerSelectedTab = drawerSelectedTab; + _drawerSelectedTab = drawerSelectedTab; return Drawer( child: ListView( padding: EdgeInsets.zero, //only(top: 8.0), @@ -24,19 +22,19 @@ class NavDrawerPage extends StatelessWidget { _createHeader(), _createDrawerItem( icon: Icons.dashboard, - text: "Dashboard", + text: 'Dashboard', state: NavdrawerState.DashBoard, route: Routes.dashBoardPage, ), _createDrawerItem( icon: Icons.bluetooth, - text: "Bluetooth selector", + text: 'Bluetooth selector', state: NavdrawerState.BluetoothSelector, route: Routes.bluetoothSelectorPage, ), _createDrawerItem( icon: Icons.hotel, - text: "Record Sleep sequence", + text: 'Record Sleep sequence', state: NavdrawerState.RecordSleep, route: Routes.recordSleepGuidePage, ), @@ -59,7 +57,7 @@ class NavDrawerPage extends StatelessWidget { Positioned( bottom: 12.0, left: 16.0, - child: Text("Polydodo", + child: Text('Polydodo', style: TextStyle( color: Colors.white, fontSize: 20.0, @@ -80,10 +78,10 @@ class NavDrawerPage extends StatelessWidget { ], ), onTap: () { - context.bloc().add(NavdrawerUpdated(state)); - ExtendedNavigator.of(this.context).replace(route); + _context.bloc().add(NavdrawerUpdated(state)); + ExtendedNavigator.of(_context).replace(route); }, - selected: this.drawerSelectedTab == state, + selected: _drawerSelectedTab == state, ); } } diff --git a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart index 5e37e15f..71d63323 100644 --- a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart +++ b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart @@ -5,7 +5,6 @@ import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/device/device_selector_state.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; -import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_page.dart'; class BluetoothSelectorPage extends StatelessWidget { static const name = 'bluetoothRoute'; diff --git a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart index 7693de92..28b1f6b7 100644 --- a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart +++ b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart @@ -17,13 +17,13 @@ class DashBoardPage extends StatelessWidget { pinned: true, flexibleSpace: FlexibleSpaceBar( centerTitle: false, - title: Text("Polydodo", + title: Text('Polydodo', style: TextStyle( color: Colors.white, fontSize: 16.0, )), background: Image.network( - "https://images.pexels.com/photos/396547/pexels-photo-396547.jpeg?auto=compress&cs=tinysrgb&h=350", + 'https://images.pexels.com/photos/396547/pexels-photo-396547.jpeg?auto=compress&cs=tinysrgb&h=350', fit: BoxFit.cover, )), ), diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart index dc310d9c..73448363 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -26,7 +26,7 @@ class RecordSleepGuidePage extends StatelessWidget { ExtendedNavigator.of(context).replace(Routes.recordSleepValidatePage); }, icon: Icon(Icons.radio_button_checked), - label: Text("Record"), + label: Text('Record'), ), ); } diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index 11be9e80..5081eb46 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -11,26 +11,26 @@ class RecordSleepValidatePage extends StatelessWidget { print(state.runtimeType); }, builder: (context, state) { - if (state is DataStateInitial) + if (state is DataStateInitial) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ RaisedButton( - child: Text("Start"), + child: Text('Start'), onPressed: () => BlocProvider.of(context).startStreaming(), ), ]), ); - else + } else { return ListView( children: [ Column( mainAxisAlignment: MainAxisAlignment.center, children: [ RaisedButton( - child: Text("Stop"), + child: Text('Stop'), onPressed: () => BlocProvider.of(context).stopStreaming(), ), @@ -38,6 +38,7 @@ class RecordSleepValidatePage extends StatelessWidget { SimpleLineChart.withSampleData(), ], ); + } }, ), ); diff --git a/mobile/lib/src/presentation/widgets/simple_line_chart.dart b/mobile/lib/src/presentation/widgets/simple_line_chart.dart index 6255c919..c37a9528 100644 --- a/mobile/lib/src/presentation/widgets/simple_line_chart.dart +++ b/mobile/lib/src/presentation/widgets/simple_line_chart.dart @@ -10,7 +10,7 @@ class SimpleLineChart extends StatelessWidget { /// Creates a [LineChart] with sample data and no transition. factory SimpleLineChart.withSampleData() { - return new SimpleLineChart( + return SimpleLineChart( _createSampleData(), // Disable animations for image tests. animate: false, @@ -19,20 +19,20 @@ class SimpleLineChart extends StatelessWidget { @override Widget build(BuildContext context) { - return new charts.LineChart(seriesList, animate: animate); + return charts.LineChart(seriesList, animate: animate); } /// Create one series with sample hard coded data. static List> _createSampleData() { final data = [ - new LinearSales(0, 5), - new LinearSales(1, 25), - new LinearSales(2, 100), - new LinearSales(3, 75), + LinearSales(0, 5), + LinearSales(1, 25), + LinearSales(2, 100), + LinearSales(3, 75), ]; return [ - new charts.Series( + charts.Series( id: 'Sales', colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, domainFn: (LinearSales sales, _) => sales.year, From a117972655c22f0060f7d4ab1a1c42045a984743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 00:20:21 -0500 Subject: [PATCH 23/38] Update .gitignore Co-authored-by: Anes Belfodil --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9830e7c5..5de7dd10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ - mobile/pubspec.lock mobile/polydodo-mobile.code-workspace From 92e68ea537117eef892212a853d0adc3eced7b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 00:21:10 -0500 Subject: [PATCH 24/38] Update .gitignore Co-authored-by: Anes Belfodil --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5de7dd10..b5db5bda 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ mobile/pubspec.lock - mobile/polydodo-mobile.code-workspace From 4fbeabef1e0829c774e697d99d18633dd83f826a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 00:31:23 -0500 Subject: [PATCH 25/38] Update mobile/lib/src/application/navdrawer/navdrawer_bloc.dart Co-authored-by: Anes Belfodil --- mobile/lib/src/application/navdrawer/navdrawer_bloc.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart index cc5677bd..210f2864 100644 --- a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart +++ b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart @@ -10,9 +10,7 @@ class NavdrawerBloc extends Bloc { NavdrawerBloc() : super(NavdrawerState.DashBoard); @override - Stream mapEventToState( - NavdrawerEvent event, - ) async* { + Stream mapEventToState(NavdrawerEvent event) async* { if (event is NavdrawerUpdated) { yield event.page; } From d2cb47c5117ed2d669267759e761ee98041a465b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 01:09:51 -0500 Subject: [PATCH 26/38] Nit fixes for pull request --- .github/workflows/mobile.yml | 1 + .gitignore | 2 - README.md | 11 +- mobile/.gitignore | 4 + mobile/lib/src/app.dart | 6 - .../navigation/routes/router.dart | 1 - mobile/polydodo-mobile.code-workspace | 38 +++ mobile/pubspec.lock | 317 +++++++++++++++++- mobile/pubspec.yaml | 7 +- 9 files changed, 371 insertions(+), 16 deletions(-) create mode 100644 mobile/polydodo-mobile.code-workspace diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 0d7f034c..0de4c45a 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -23,6 +23,7 @@ jobs: - uses: subosito/flutter-action@v1 - run: flutter pub get + flutter packages pub run build_runner build --delete-conflicting-outputs - run: flutter analyze diff --git a/.gitignore b/.gitignore index b5db5bda..e69de29b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +0,0 @@ -mobile/pubspec.lock -mobile/polydodo-mobile.code-workspace diff --git a/README.md b/README.md index 548cac03..1629799b 100644 --- a/README.md +++ b/README.md @@ -24,18 +24,25 @@ This projects aims to offer a comprehensive guide to **record polysomnographic E ## Dev workflow +### Web + - Open workspace `polydodo.code-workspace` - Install Python packages by running `pip install --user -r backend/requirements.txt` - Install node modules by running `yarn install --cwd web` - Fetch Flutter dependencies through the `Flutter` extension - Start dev server by running `python backend/app.py` -## Building the server as a single executable +### Building the server as a single executable Run `python -m PyInstaller --onefile app.py` -## Running the server locally +### Running the server locally - [Login](https://docs.github.com/en/free-pro-team@latest/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-with-a-personal-access-token) to Github Docker registry - `docker pull docker.pkg.github.com/polycortex/polydodo/backend:latest` - `docker run -p 8080:8080 docker.pkg.github.com/polycortex/polydodo/backend:latest` + +### Mobile + +Prior to build execute build-runner to generate the app's routes. +`flutter packages pub run build_runner watch --delete-conflicting-outputs` \ No newline at end of file diff --git a/mobile/.gitignore b/mobile/.gitignore index eca61f42..99410a0f 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -40,3 +40,7 @@ app.*.symbols # Obfuscation related app.*.map.json + +# Project related +mobile/polydodo-mobile.code-workspace +*.gr.dart \ No newline at end of file diff --git a/mobile/lib/src/app.dart b/mobile/lib/src/app.dart index dc0f751a..f5a40f5f 100644 --- a/mobile/lib/src/app.dart +++ b/mobile/lib/src/app.dart @@ -21,12 +21,6 @@ class App extends StatelessWidget { theme: theme, builder: ExtendedNavigator.builder( router: auto_router.Router()), - /*home: WalletsRoute(), - initialRoute: WalletsRoute.name, - routes: { - BluetoothSelectorRoute.name: (context) => BluetoothSelectorRoute(), - WalletsRoute.name: (context) => WalletsRoute(), - }, */ ), ); } diff --git a/mobile/lib/src/presentation/navigation/routes/router.dart b/mobile/lib/src/presentation/navigation/routes/router.dart index da0d477a..cc44dcde 100644 --- a/mobile/lib/src/presentation/navigation/routes/router.dart +++ b/mobile/lib/src/presentation/navigation/routes/router.dart @@ -7,7 +7,6 @@ import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_ @MaterialAutoRouter( generateNavigationHelperExtension: true, routes: [ - MaterialRoute(page: NavDrawerPage), MaterialRoute(page: DashBoardPage, initial: true), MaterialRoute(page: RecordSleepGuidePage), MaterialRoute(page: RecordSleepValidatePage), diff --git a/mobile/polydodo-mobile.code-workspace b/mobile/polydodo-mobile.code-workspace new file mode 100644 index 00000000..eafacf4e --- /dev/null +++ b/mobile/polydodo-mobile.code-workspace @@ -0,0 +1,38 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "todo-tree.tree.scanMode": "workspace", + "todo-tree.tree.showCountsInTree": true, + "dart.previewFlutterUiGuides": true, + "dart.previewFlutterUiGuidesCustomTracking": true, + "material-icon-theme.folders.associations": { + "global_state": "global", + "ui": "layout", + "bloc": "controller" + }, + "editor.fontLigatures": true, + "editor.fontFamily": "Fira Code", + "todo-tree.tree.hideTreeWhenEmpty": false, + "git.ignoreLimitWarning": true + }, + "launch": { + "version": "0.2.0", + "configurations": [ + + { + "name": "Flutter debug", + "request": "launch", + "type": "dart", + "flutterMode": "debug" + }, + { + "name": "Flutter release", + "command": "flutter run --release" + } + ] + } +} \ No newline at end of file diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 783f75ee..cacff9ff 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -1,6 +1,20 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "12.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "0.40.6" archive: dependency: "direct main" description: @@ -22,6 +36,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.5.0-nullsafety.1" + auto_route: + dependency: "direct main" + description: + name: auto_route + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.9" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.10" battery: dependency: "direct main" description: @@ -57,6 +85,62 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0-nullsafety.1" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.0" + build_config: + dependency: transitive + description: + name: build_config + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.2" + build_daemon: + dependency: transitive + description: + name: build_daemon + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.3" + build_runner: + dependency: "direct dev" + description: + name: build_runner + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.4" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.3" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.2" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "7.1.0" characters: dependency: transitive description: @@ -71,6 +155,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0-nullsafety.1" + charts_common: + dependency: transitive + description: + name: charts_common + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.0" + charts_flutter: + dependency: "direct main" + description: + name: charts_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" clock: dependency: transitive description: @@ -78,6 +190,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0-nullsafety.1" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" collection: dependency: transitive description: @@ -113,6 +232,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.3" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.9" equatable: dependency: "direct main" description: @@ -160,6 +286,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "6.0.6" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.5" flutter_reactive_ble: dependency: "direct main" description: @@ -191,6 +324,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.0.4" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + graphs: + dependency: transitive + description: + name: graphs + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" hive: dependency: "direct main" description: @@ -198,6 +345,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.4.4+1" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.4" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.18" intl: dependency: transitive description: @@ -205,6 +373,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.16.1" + io: + dependency: transitive + description: + name: io + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.4" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.4" matcher: dependency: transitive description: @@ -233,6 +429,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.4" + node_interop: + dependency: transitive + description: + name: node_interop + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + node_io: + dependency: transitive + description: + name: node_io + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" path: dependency: transitive description: @@ -282,6 +499,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.9.2" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" plain_optional: dependency: transitive description: @@ -303,6 +527,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.3" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" process: dependency: transitive description: @@ -324,6 +555,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.3.2+2" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4+1" share: dependency: "direct main" description: @@ -373,11 +625,32 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.1+1" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.9" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.3" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.8" source_span: dependency: transitive description: @@ -399,6 +672,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0-nullsafety.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" streaming_shared_preferences: dependency: "direct main" description: @@ -427,6 +707,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.2.19-nullsafety.2" + timing: + dependency: transitive + description: + name: timing + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" typed_data: dependency: transitive description: @@ -455,6 +742,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0-nullsafety.3" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7+15" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" win32: dependency: transitive description: @@ -469,6 +770,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.1" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" sdks: - dart: ">=2.10.0-110 <2.11.0" + dart: ">=2.10.0 <2.11.0" flutter: ">=1.16.0 <2.0.0" diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index a89c08dc..d9124044 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -45,12 +45,11 @@ dependencies: charts_flutter: dev_dependencies: - flutter_test: - sdk: flutter auto_route_generator: ^0.6.10 - flutter_launcher_icons: "^0.7.0" build_runner: ^1.10.3 - + flutter_launcher_icons: "^0.7.0" + flutter_test: + sdk: flutter # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter. From aaa10abe8c708116279a8d32b1f53b90d8a7ea42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 01:10:20 -0500 Subject: [PATCH 27/38] NavDrawer fix to respect stateless widget coherence --- .../navigation/navdrawer_widget.dart | 30 ++++++++++++------- .../bluetoothSelector_page.dart | 3 +- .../pages/dashboard/dashboard_page.dart | 3 +- .../record_sleep/record_sleep_guide_page.dart | 3 +- .../record_sleep_validate_page.dart | 2 +- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart index 777bc45f..799e5d2a 100644 --- a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -1,20 +1,23 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; + import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; -class NavDrawerPage extends StatelessWidget { +class NavDrawer extends StatelessWidget { static const name = 'appDrawerRoute'; - NavdrawerState _drawerSelectedTab = NavdrawerState.DashBoard; - BuildContext _context; + final NavdrawerState activeTab; + + const NavDrawer({ + Key key, + @required this.activeTab, + }) : super(key: key); @override Widget build(BuildContext context) { - _context = context; return BlocBuilder( - builder: (context, drawerSelectedTab) { - _drawerSelectedTab = drawerSelectedTab; + builder: (b_context, drawerSelectedTab) { return Drawer( child: ListView( padding: EdgeInsets.zero, //only(top: 8.0), @@ -25,18 +28,21 @@ class NavDrawerPage extends StatelessWidget { text: 'Dashboard', state: NavdrawerState.DashBoard, route: Routes.dashBoardPage, + context: b_context, ), _createDrawerItem( icon: Icons.bluetooth, text: 'Bluetooth selector', state: NavdrawerState.BluetoothSelector, route: Routes.bluetoothSelectorPage, + context: b_context, ), _createDrawerItem( icon: Icons.hotel, text: 'Record Sleep sequence', state: NavdrawerState.RecordSleep, route: Routes.recordSleepGuidePage, + context: b_context, ), ], ), @@ -66,7 +72,11 @@ class NavDrawerPage extends StatelessWidget { } Widget _createDrawerItem( - {IconData icon, String text, NavdrawerState state, String route}) { + {IconData icon, + String text, + NavdrawerState state, + String route, + BuildContext context}) { return ListTile( title: Row( children: [ @@ -78,10 +88,10 @@ class NavDrawerPage extends StatelessWidget { ], ), onTap: () { - _context.bloc().add(NavdrawerUpdated(state)); - ExtendedNavigator.of(_context).replace(route); + context.bloc().add(NavdrawerUpdated(state)); + ExtendedNavigator.of(context).replace(route); }, - selected: _drawerSelectedTab == state, + selected: activeTab == state, ); } } diff --git a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart index 71d63323..ab708487 100644 --- a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart +++ b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/device/device_selector_state.dart'; +import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; @@ -15,7 +16,7 @@ class BluetoothSelectorPage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Polydodo')), - drawer: NavDrawerPage(), + drawer: NavDrawer(activeTab: NavdrawerState.BluetoothSelector), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); diff --git a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart index 28b1f6b7..333b191e 100644 --- a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart +++ b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/widgets/simple_line_chart.dart'; @@ -7,7 +8,7 @@ class DashBoardPage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( // appBar: AppBar(title: Text('Polydodo')), - drawer: NavDrawerPage(), + drawer: NavDrawer(activeTab: NavdrawerState.DashBoard), body: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart index 73448363..1d1f32a1 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; +import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; import 'package:polydodo/src/presentation/widgets/simple_line_chart.dart'; @@ -14,7 +15,7 @@ class RecordSleepGuidePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Record Sleep')), - drawer: NavDrawerPage(), + drawer: NavDrawer(activeTab: NavdrawerState.RecordSleep), body: PageView( children: [ Container(child: Center(child: Text('Record Sleep Guide'))), diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index 5081eb46..dfc6bc56 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -5,7 +5,7 @@ class RecordSleepValidatePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Record Sleep')), - drawer: NavDrawerPage(), + drawer: NavDrawer(activeTab: NavdrawerState.RecordSleep), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); From be75b77631a03f2f193d4c7478612efc826e6b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 01:11:12 -0500 Subject: [PATCH 28/38] typo in workflow file --- .github/workflows/mobile.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 0de4c45a..38504ad9 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -23,7 +23,8 @@ jobs: - uses: subosito/flutter-action@v1 - run: flutter pub get - flutter packages pub run build_runner build --delete-conflicting-outputs + + - run: flutter packages pub run build_runner build --delete-conflicting-outputs - run: flutter analyze From acb8494321f46044dacab28c09ce75be8a80fb0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 09:29:05 -0500 Subject: [PATCH 29/38] Update router.dart --- mobile/lib/src/presentation/navigation/routes/router.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/mobile/lib/src/presentation/navigation/routes/router.dart b/mobile/lib/src/presentation/navigation/routes/router.dart index cc44dcde..9c10253e 100644 --- a/mobile/lib/src/presentation/navigation/routes/router.dart +++ b/mobile/lib/src/presentation/navigation/routes/router.dart @@ -1,5 +1,4 @@ import 'package:auto_route/auto_route_annotations.dart'; -import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart'; import 'package:polydodo/src/presentation/pages/dashboard/dashboard_page.dart'; import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_page.dart'; From 930a1489525ec8c8e08513e2db612e392132847e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 10:41:16 -0500 Subject: [PATCH 30/38] Revert "adding mock chart" This reverts commit f3d696b16e14a1f10050c8f3e8b820a526e8b695. --- .../record_sleep_validate_page.dart | 25 ++++----- .../widgets/simple_line_chart.dart | 52 ------------------- mobile/pubspec.yaml | 1 - 3 files changed, 11 insertions(+), 67 deletions(-) delete mode 100644 mobile/lib/src/presentation/widgets/simple_line_chart.dart diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index dfc6bc56..d5725f50 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -23,20 +23,17 @@ class RecordSleepValidatePage extends StatelessWidget { ), ]), ); - } else { - return ListView( - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - RaisedButton( - child: Text('Stop'), - onPressed: () => - BlocProvider.of(context).stopStreaming(), - ), - ]), - SimpleLineChart.withSampleData(), - ], + else + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + RaisedButton( + child: Text("Stop"), + onPressed: () => + BlocProvider.of(context).stopStreaming(), + ), + ]), ); } }, diff --git a/mobile/lib/src/presentation/widgets/simple_line_chart.dart b/mobile/lib/src/presentation/widgets/simple_line_chart.dart deleted file mode 100644 index c37a9528..00000000 --- a/mobile/lib/src/presentation/widgets/simple_line_chart.dart +++ /dev/null @@ -1,52 +0,0 @@ -/// Example of a simple line chart. -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimpleLineChart extends StatelessWidget { - final List seriesList; - final bool animate; - - SimpleLineChart(this.seriesList, {this.animate}); - - /// Creates a [LineChart] with sample data and no transition. - factory SimpleLineChart.withSampleData() { - return SimpleLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index d9124044..f86604a4 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -42,7 +42,6 @@ dependencies: streaming_shared_preferences: ^1.0.1 uuid: ^2.2.2 usb_serial: ^0.2.4 - charts_flutter: dev_dependencies: auto_route_generator: ^0.6.10 From 21d85e1c4cf77570b9b41db70507a2ff33c1aa19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 10:55:41 -0500 Subject: [PATCH 31/38] Fixes to temporarily remove Charts package --- .../presentation/pages/dashboard/dashboard_page.dart | 10 +++++----- .../pages/record_sleep/record_sleep_guide_page.dart | 1 - .../pages/record_sleep/record_sleep_validate_page.dart | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart index 333b191e..4843efaa 100644 --- a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart +++ b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; -import 'package:polydodo/src/presentation/widgets/simple_line_chart.dart'; class DashBoardPage extends StatelessWidget { @override @@ -32,10 +31,11 @@ class DashBoardPage extends StatelessWidget { }, body: Center( child: Padding( - padding: EdgeInsets.symmetric(horizontal: 50), - child: Padding( - padding: EdgeInsets.symmetric(vertical: 200), - child: SimpleLineChart.withSampleData())), + padding: EdgeInsets.symmetric(horizontal: 50), + child: Padding( + padding: EdgeInsets.symmetric(vertical: 200), + child: Text('Dashboard')), + ), ), ), ); diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart index 1d1f32a1..cea1320d 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -5,7 +5,6 @@ import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; -import 'package:polydodo/src/presentation/widgets/simple_line_chart.dart'; part 'record_sleep_recording_page.dart'; part 'record_sleep_validate_page.dart'; diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index d5725f50..5154cd32 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -23,13 +23,13 @@ class RecordSleepValidatePage extends StatelessWidget { ), ]), ); - else + } else { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ RaisedButton( - child: Text("Stop"), + child: Text('Stop'), onPressed: () => BlocProvider.of(context).stopStreaming(), ), From 9a99b063e804ff9719388e8c6c6e2cce98b3f1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 10:57:17 -0500 Subject: [PATCH 32/38] Removed polydodo-mobile.workspace and moved to private settings file --- mobile/.gitignore | 5 ++-- mobile/polydodo-mobile.code-workspace | 38 --------------------------- mobile/pubspec.lock | 14 ---------- 3 files changed, 2 insertions(+), 55 deletions(-) delete mode 100644 mobile/polydodo-mobile.code-workspace diff --git a/mobile/.gitignore b/mobile/.gitignore index 99410a0f..7e417896 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -19,7 +19,7 @@ # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line # is commented out by default. -#.vscode/ +.vscode/ # Flutter/Dart/Pub related **/doc/api/ @@ -42,5 +42,4 @@ app.*.symbols app.*.map.json # Project related -mobile/polydodo-mobile.code-workspace -*.gr.dart \ No newline at end of file +*.gr.dart diff --git a/mobile/polydodo-mobile.code-workspace b/mobile/polydodo-mobile.code-workspace deleted file mode 100644 index eafacf4e..00000000 --- a/mobile/polydodo-mobile.code-workspace +++ /dev/null @@ -1,38 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ], - "settings": { - "todo-tree.tree.scanMode": "workspace", - "todo-tree.tree.showCountsInTree": true, - "dart.previewFlutterUiGuides": true, - "dart.previewFlutterUiGuidesCustomTracking": true, - "material-icon-theme.folders.associations": { - "global_state": "global", - "ui": "layout", - "bloc": "controller" - }, - "editor.fontLigatures": true, - "editor.fontFamily": "Fira Code", - "todo-tree.tree.hideTreeWhenEmpty": false, - "git.ignoreLimitWarning": true - }, - "launch": { - "version": "0.2.0", - "configurations": [ - - { - "name": "Flutter debug", - "request": "launch", - "type": "dart", - "flutterMode": "debug" - }, - { - "name": "Flutter release", - "command": "flutter run --release" - } - ] - } -} \ No newline at end of file diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index cacff9ff..b4a5be35 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -155,20 +155,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0-nullsafety.1" - charts_common: - dependency: transitive - description: - name: charts_common - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.0" - charts_flutter: - dependency: "direct main" - description: - name: charts_flutter - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.0" checked_yaml: dependency: transitive description: From 496ef2f77b501b2b1fa320ff8fb4e201b5bdc841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Tue, 3 Nov 2020 10:58:26 -0500 Subject: [PATCH 33/38] Keeping launch.json mobile config file --- mobile/.gitignore | 2 +- mobile/.vscode/launch.json | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mobile/.gitignore b/mobile/.gitignore index 7e417896..12fb64ad 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -19,7 +19,7 @@ # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line # is commented out by default. -.vscode/ +.vscode/settings.json # Flutter/Dart/Pub related **/doc/api/ diff --git a/mobile/.vscode/launch.json b/mobile/.vscode/launch.json index 95b36429..7f5fbfee 100644 --- a/mobile/.vscode/launch.json +++ b/mobile/.vscode/launch.json @@ -13,6 +13,18 @@ "--dart-define", "HOST=10.0.2.2" ] - } - ] + }, + { + "name": "Flutter debug", + "request": "launch", + "type": "dart", + "flutterMode": "debug" +}, +{ + "name": "Flutter release", + "flutterMode": "release", + "type": "dart", + "request": "launch" } + ] +} \ No newline at end of file From 9e69354368c9f25d9343d05ad7cedf1fa0ace8cd Mon Sep 17 00:00:00 2001 From: Anes Belfodil Date: Tue, 3 Nov 2020 16:24:49 -0500 Subject: [PATCH 34/38] Fix git bug --- mobile/.gitignore | 1 - .../navigation/routes/router.gr.dart | 113 ------------------ 2 files changed, 114 deletions(-) delete mode 100644 mobile/lib/src/presentation/navigation/routes/router.gr.dart diff --git a/mobile/.gitignore b/mobile/.gitignore index 12fb64ad..a6dc4eaa 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -8,7 +8,6 @@ .buildlog/ .history .svn/ -.vscode/ # IntelliJ related *.iml diff --git a/mobile/lib/src/presentation/navigation/routes/router.gr.dart b/mobile/lib/src/presentation/navigation/routes/router.gr.dart deleted file mode 100644 index c1649374..00000000 --- a/mobile/lib/src/presentation/navigation/routes/router.gr.dart +++ /dev/null @@ -1,113 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -// ************************************************************************** -// AutoRouteGenerator -// ************************************************************************** - -// ignore_for_file: public_member_api_docs - -import 'package:auto_route/auto_route.dart'; -import 'package:flutter/material.dart'; - -import '../../pages/bluetooth_page/bluetoothSelector_page.dart'; -import '../../pages/dashboard/dashboard_page.dart'; -import '../../pages/record_sleep/record_sleep_guide_page.dart'; -import '../navdrawer_widget.dart'; - -class Routes { - static const String navDrawerPage = '/nav-drawer-page'; - static const String dashBoardPage = '/'; - static const String recordSleepGuidePage = '/record-sleep-guide-page'; - static const String recordSleepValidatePage = '/record-sleep-validate-page'; - static const String bluetoothSelectorPage = '/bluetooth-selector-page'; - static const all = { - navDrawerPage, - dashBoardPage, - recordSleepGuidePage, - recordSleepValidatePage, - bluetoothSelectorPage, - }; -} - -class Router extends RouterBase { - @override - List get routes => _routes; - final _routes = [ - RouteDef(Routes.navDrawerPage, page: NavDrawerPage), - RouteDef(Routes.dashBoardPage, page: DashBoardPage), - RouteDef(Routes.recordSleepGuidePage, page: RecordSleepGuidePage), - RouteDef(Routes.recordSleepValidatePage, page: RecordSleepValidatePage), - RouteDef(Routes.bluetoothSelectorPage, page: BluetoothSelectorPage), - ]; - @override - Map get pagesMap => _pagesMap; - final _pagesMap = { - NavDrawerPage: (data) { - return MaterialPageRoute( - builder: (context) => NavDrawerPage(), - settings: data, - ); - }, - DashBoardPage: (data) { - return MaterialPageRoute( - builder: (context) => DashBoardPage(), - settings: data, - ); - }, - RecordSleepGuidePage: (data) { - return MaterialPageRoute( - builder: (context) => RecordSleepGuidePage(), - settings: data, - ); - }, - RecordSleepValidatePage: (data) { - return MaterialPageRoute( - builder: (context) => RecordSleepValidatePage(), - settings: data, - ); - }, - BluetoothSelectorPage: (data) { - final args = data.getArgs( - orElse: () => BluetoothSelectorPageArguments(), - ); - return MaterialPageRoute( - builder: (context) => BluetoothSelectorPage(key: args.key), - settings: data, - ); - }, - }; -} - -/// ************************************************************************ -/// Navigation helper methods extension -/// ************************************************************************* - -extension RouterExtendedNavigatorStateX on ExtendedNavigatorState { - Future pushNavDrawerPage() => push(Routes.navDrawerPage); - - Future pushDashBoardPage() => push(Routes.dashBoardPage); - - Future pushRecordSleepGuidePage() => - push(Routes.recordSleepGuidePage); - - Future pushRecordSleepValidatePage() => - push(Routes.recordSleepValidatePage); - - Future pushBluetoothSelectorPage({ - Key key, - }) => - push( - Routes.bluetoothSelectorPage, - arguments: BluetoothSelectorPageArguments(key: key), - ); -} - -/// ************************************************************************ -/// Arguments holder classes -/// ************************************************************************* - -/// BluetoothSelectorPage arguments holder class -class BluetoothSelectorPageArguments { - final Key key; - BluetoothSelectorPageArguments({this.key}); -} From d788a79a664dfe10a01600081a53d52facc3bcfe Mon Sep 17 00:00:00 2001 From: Anes Belfodil Date: Wed, 4 Nov 2020 08:54:27 -0500 Subject: [PATCH 35/38] Delete .gitignore --- .gitignore | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e69de29b..00000000 From aa21ee229acee4d68fc49c41ef38bad70147780f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 5 Nov 2020 02:18:02 -0500 Subject: [PATCH 36/38] Smoother animations for Navdrawer --- .../navigation/navdrawer_widget.dart | 5 +++-- .../presentation/navigation/routes/router.dart | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart index 799e5d2a..c8e94651 100644 --- a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -88,8 +88,9 @@ class NavDrawer extends StatelessWidget { ], ), onTap: () { - context.bloc().add(NavdrawerUpdated(state)); - ExtendedNavigator.of(context).replace(route); + //context.bloc().add(NavdrawerUpdated(state)); + ExtendedNavigator.of(context).popAndPush(route); + // ExtendedNavigator.of(context).replace(route); }, selected: activeTab == state, ); diff --git a/mobile/lib/src/presentation/navigation/routes/router.dart b/mobile/lib/src/presentation/navigation/routes/router.dart index 9c10253e..b5d8e8e8 100644 --- a/mobile/lib/src/presentation/navigation/routes/router.dart +++ b/mobile/lib/src/presentation/navigation/routes/router.dart @@ -1,3 +1,4 @@ +import 'package:auto_route/auto_route.dart'; import 'package:auto_route/auto_route_annotations.dart'; import 'package:polydodo/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart'; import 'package:polydodo/src/presentation/pages/dashboard/dashboard_page.dart'; @@ -6,9 +7,18 @@ import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_ @MaterialAutoRouter( generateNavigationHelperExtension: true, routes: [ - MaterialRoute(page: DashBoardPage, initial: true), - MaterialRoute(page: RecordSleepGuidePage), - MaterialRoute(page: RecordSleepValidatePage), - MaterialRoute(page: BluetoothSelectorPage), + CustomRoute( + page: DashboardPage, + initial: true, + transitionsBuilder: TransitionsBuilders.fadeIn), + CustomRoute( + page: RecordSleepGuidePage, + transitionsBuilder: TransitionsBuilders.fadeIn), + CustomRoute( + page: RecordSleepValidatePage, + transitionsBuilder: TransitionsBuilders.fadeIn), + CustomRoute( + page: BluetoothSelectorPage, + transitionsBuilder: TransitionsBuilders.fadeIn), ]) class $Router {} From 35d50b0db3e6a5764e1d0cc037819762da80fdd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 5 Nov 2020 02:18:41 -0500 Subject: [PATCH 37/38] Navdrawer without bloc Renamed DashBoard -> Dashboard --- mobile/lib/src/application/blocs.dart | 1 - .../application/navdrawer/navdrawer_bloc.dart | 18 ----- .../navdrawer/navdrawer_event.dart | 19 ------ .../navdrawer/navdrawer_state.dart | 3 - mobile/lib/src/locator.dart | 2 - .../navigation/navdrawer_tabs.dart | 1 + .../navigation/navdrawer_widget.dart | 66 ++++++++----------- .../bluetoothSelector_page.dart | 4 +- .../pages/dashboard/dashboard_page.dart | 6 +- .../record_sleep/record_sleep_guide_page.dart | 4 +- .../record_sleep_validate_page.dart | 2 +- 11 files changed, 38 insertions(+), 88 deletions(-) delete mode 100644 mobile/lib/src/application/navdrawer/navdrawer_bloc.dart delete mode 100644 mobile/lib/src/application/navdrawer/navdrawer_event.dart delete mode 100644 mobile/lib/src/application/navdrawer/navdrawer_state.dart create mode 100644 mobile/lib/src/presentation/navigation/navdrawer_tabs.dart diff --git a/mobile/lib/src/application/blocs.dart b/mobile/lib/src/application/blocs.dart index 6a2687db..8d557dee 100644 --- a/mobile/lib/src/application/blocs.dart +++ b/mobile/lib/src/application/blocs.dart @@ -1,3 +1,2 @@ export './device/device_selector_cubit.dart'; export './eeg_data/data_cubit.dart'; -export './navdrawer/navdrawer_bloc.dart'; diff --git a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart b/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart deleted file mode 100644 index 210f2864..00000000 --- a/mobile/lib/src/application/navdrawer/navdrawer_bloc.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'dart:async'; - -import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; - -part 'navdrawer_event.dart'; -part 'navdrawer_state.dart'; - -class NavdrawerBloc extends Bloc { - NavdrawerBloc() : super(NavdrawerState.DashBoard); - - @override - Stream mapEventToState(NavdrawerEvent event) async* { - if (event is NavdrawerUpdated) { - yield event.page; - } - } -} diff --git a/mobile/lib/src/application/navdrawer/navdrawer_event.dart b/mobile/lib/src/application/navdrawer/navdrawer_event.dart deleted file mode 100644 index fee83f7d..00000000 --- a/mobile/lib/src/application/navdrawer/navdrawer_event.dart +++ /dev/null @@ -1,19 +0,0 @@ -part of 'navdrawer_bloc.dart'; - -abstract class NavdrawerEvent extends Equatable { - const NavdrawerEvent(); - @override - List get props => []; -} - -class NavdrawerUpdated extends NavdrawerEvent { - final NavdrawerState page; - - const NavdrawerUpdated(this.page); - - @override - List get props => [page]; - - @override - String toString() => 'NavDrawerUpdated { tab: $page }'; -} diff --git a/mobile/lib/src/application/navdrawer/navdrawer_state.dart b/mobile/lib/src/application/navdrawer/navdrawer_state.dart deleted file mode 100644 index 08595936..00000000 --- a/mobile/lib/src/application/navdrawer/navdrawer_state.dart +++ /dev/null @@ -1,3 +0,0 @@ -part of 'navdrawer_bloc.dart'; - -enum NavdrawerState { DashBoard, RecordSleep, History, BluetoothSelector } diff --git a/mobile/lib/src/locator.dart b/mobile/lib/src/locator.dart index bb96fe9b..9b347f04 100644 --- a/mobile/lib/src/locator.dart +++ b/mobile/lib/src/locator.dart @@ -1,6 +1,5 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; import 'package:polydodo/src/domain/acquisition_device/i_acquisition_device_repository.dart'; @@ -25,7 +24,6 @@ List createBlocProviders() => [ _serviceLocator.get(), ), ), - BlocProvider(create: (context) => NavdrawerBloc()), BlocProvider( create: (context) => DataCubit( _serviceLocator.get(), diff --git a/mobile/lib/src/presentation/navigation/navdrawer_tabs.dart b/mobile/lib/src/presentation/navigation/navdrawer_tabs.dart new file mode 100644 index 00000000..27408cb3 --- /dev/null +++ b/mobile/lib/src/presentation/navigation/navdrawer_tabs.dart @@ -0,0 +1 @@ +enum NavdrawerTab { Dashboard, RecordSleep, BluetoothSelector, History } diff --git a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart index c8e94651..86b55425 100644 --- a/mobile/lib/src/presentation/navigation/navdrawer_widget.dart +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -1,13 +1,12 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; +import 'navdrawer_tabs.dart'; + class NavDrawer extends StatelessWidget { static const name = 'appDrawerRoute'; - final NavdrawerState activeTab; + final NavdrawerTab activeTab; const NavDrawer({ Key key, @@ -16,38 +15,31 @@ class NavDrawer extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocBuilder( - builder: (b_context, drawerSelectedTab) { - return Drawer( - child: ListView( - padding: EdgeInsets.zero, //only(top: 8.0), - children: [ - _createHeader(), - _createDrawerItem( - icon: Icons.dashboard, - text: 'Dashboard', - state: NavdrawerState.DashBoard, - route: Routes.dashBoardPage, - context: b_context, - ), - _createDrawerItem( - icon: Icons.bluetooth, - text: 'Bluetooth selector', - state: NavdrawerState.BluetoothSelector, - route: Routes.bluetoothSelectorPage, - context: b_context, - ), - _createDrawerItem( - icon: Icons.hotel, - text: 'Record Sleep sequence', - state: NavdrawerState.RecordSleep, - route: Routes.recordSleepGuidePage, - context: b_context, - ), - ], + return Drawer( + child: ListView( + padding: EdgeInsets.zero, //only(top: 8.0), + children: [ + _createHeader(), + _createDrawerItem( + icon: Icons.dashboard, + text: 'Dashboard', + route: Routes.dashboardPage, + context: context, ), - ); - }, + _createDrawerItem( + icon: Icons.bluetooth, + text: 'Bluetooth selector', + route: Routes.bluetoothSelectorPage, + context: context, + ), + _createDrawerItem( + icon: Icons.hotel, + text: 'Record Sleep sequence', + route: Routes.recordSleepGuidePage, + context: context, + ), + ], + ), ); } @@ -74,7 +66,7 @@ class NavDrawer extends StatelessWidget { Widget _createDrawerItem( {IconData icon, String text, - NavdrawerState state, + NavdrawerTab tab, String route, BuildContext context}) { return ListTile( @@ -92,7 +84,7 @@ class NavDrawer extends StatelessWidget { ExtendedNavigator.of(context).popAndPush(route); // ExtendedNavigator.of(context).replace(route); }, - selected: activeTab == state, + selected: activeTab == tab, ); } } diff --git a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart index ab708487..719237e9 100644 --- a/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart +++ b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/device/device_selector_cubit.dart'; import 'package:polydodo/src/application/device/device_selector_state.dart'; -import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_tabs.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; @@ -16,7 +16,7 @@ class BluetoothSelectorPage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Polydodo')), - drawer: NavDrawer(activeTab: NavdrawerState.BluetoothSelector), + drawer: NavDrawer(activeTab: NavdrawerTab.BluetoothSelector), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); diff --git a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart index 4843efaa..8c4cf36f 100644 --- a/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart +++ b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_tabs.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; -class DashBoardPage extends StatelessWidget { +class DashboardPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( // appBar: AppBar(title: Text('Polydodo')), - drawer: NavDrawer(activeTab: NavdrawerState.DashBoard), + drawer: NavDrawer(activeTab: NavdrawerTab.Dashboard), body: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart index cea1320d..bb12f70d 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -2,7 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:polydodo/src/application/eeg_data/data_cubit.dart'; -import 'package:polydodo/src/application/navdrawer/navdrawer_bloc.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_tabs.dart'; import 'package:polydodo/src/presentation/navigation/navdrawer_widget.dart'; import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; @@ -14,7 +14,7 @@ class RecordSleepGuidePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Record Sleep')), - drawer: NavDrawer(activeTab: NavdrawerState.RecordSleep), + drawer: NavDrawer(activeTab: NavdrawerTab.RecordSleep), body: PageView( children: [ Container(child: Center(child: Text('Record Sleep Guide'))), diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart index 5154cd32..b4ff4ac0 100644 --- a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_validate_page.dart @@ -5,7 +5,7 @@ class RecordSleepValidatePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Record Sleep')), - drawer: NavDrawer(activeTab: NavdrawerState.RecordSleep), + drawer: NavDrawer(activeTab: NavdrawerTab.RecordSleep), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); From 6c29255bee1ef5f057af6df88408ab0a16590e53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20B=C3=A9langer?= Date: Thu, 5 Nov 2020 02:23:19 -0500 Subject: [PATCH 38/38] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1629799b..58e3d79c 100644 --- a/README.md +++ b/README.md @@ -44,5 +44,5 @@ Run `python -m PyInstaller --onefile app.py` ### Mobile -Prior to build execute build-runner to generate the app's routes. -`flutter packages pub run build_runner watch --delete-conflicting-outputs` \ No newline at end of file +Prior to build execute build-runner to generate the app's routes. +`flutter packages pub run build_runner watch --delete-conflicting-outputs`