diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 0d7f034c..38504ad9 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -23,6 +23,8 @@ jobs: - uses: subosito/flutter-action@v1 - run: flutter pub get + + - run: flutter packages pub run build_runner build --delete-conflicting-outputs - run: flutter analyze diff --git a/README.md b/README.md index 548cac03..58e3d79c 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` diff --git a/mobile/.gitignore b/mobile/.gitignore index eca61f42..a6dc4eaa 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -8,7 +8,6 @@ .buildlog/ .history .svn/ -.vscode/ # IntelliJ related *.iml @@ -19,7 +18,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/ @@ -40,3 +39,6 @@ app.*.symbols # Obfuscation related app.*.map.json + +# Project related +*.gr.dart 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 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 db77bb4b..11f56201 100644 Binary files a/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ 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 17987b79..5af1b460 100644 Binary files a/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d43914..506fd492 100644 Binary files a/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ 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 d5f1c8d3..3d3e79ef 100644 Binary files a/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ 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 4d6372ee..488619c4 100644 Binary files a/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/mobile/common/assets/img/Material-Wallpaper.jpg b/mobile/common/assets/img/Material-Wallpaper.jpg new file mode 100644 index 00000000..98e6a69d Binary files /dev/null and b/mobile/common/assets/img/Material-Wallpaper.jpg differ diff --git a/mobile/common/assets/img/logo.png b/mobile/common/assets/img/logo.png new file mode 100644 index 00000000..b3433550 Binary files /dev/null and b/mobile/common/assets/img/logo.png differ diff --git a/mobile/common/assets/img/logo2.png b/mobile/common/assets/img/logo2.png new file mode 100644 index 00000000..d58e21f2 Binary files /dev/null and b/mobile/common/assets/img/logo2.png differ diff --git a/mobile/common/assets/img/sliverbar.png b/mobile/common/assets/img/sliverbar.png new file mode 100644 index 00000000..cc5019f0 Binary files /dev/null and b/mobile/common/assets/img/sliverbar.png differ diff --git a/mobile/lib/src/app.dart b/mobile/lib/src/app.dart index ccc477e3..f5a40f5f 100644 --- a/mobile/lib/src/app.dart +++ b/mobile/lib/src/app.dart @@ -1,8 +1,9 @@ +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 +19,8 @@ class App extends StatelessWidget { child: MaterialApp( title: 'PolyDodo', theme: theme, - initialRoute: BluetoothSelectorRoute.name, - routes: { - BluetoothSelectorRoute.name: (context) => BluetoothSelectorRoute(), - }, + builder: ExtendedNavigator.builder( + router: auto_router.Router()), ), ); } diff --git a/mobile/lib/src/application/blocs.dart b/mobile/lib/src/application/blocs.dart new file mode 100644 index 00000000..8d557dee --- /dev/null +++ b/mobile/lib/src/application/blocs.dart @@ -0,0 +1,2 @@ +export './device/device_selector_cubit.dart'; +export './eeg_data/data_cubit.dart'; diff --git a/mobile/lib/src/application/eeg_data/data_cubit.dart b/mobile/lib/src/application/eeg_data/data_cubit.dart index d8b21fd4..825ed24c 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/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 new file mode 100644 index 00000000..86b55425 --- /dev/null +++ b/mobile/lib/src/presentation/navigation/navdrawer_widget.dart @@ -0,0 +1,90 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:polydodo/src/presentation/navigation/routes/router.gr.dart'; + +import 'navdrawer_tabs.dart'; + +class NavDrawer extends StatelessWidget { + static const name = 'appDrawerRoute'; + final NavdrawerTab activeTab; + + const NavDrawer({ + Key key, + @required this.activeTab, + }) : super(key: key); + + @override + Widget build(BuildContext 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, + ), + ], + ), + ); + } + + 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, + NavdrawerTab tab, + String route, + BuildContext context}) { + 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(context).popAndPush(route); + // ExtendedNavigator.of(context).replace(route); + }, + selected: activeTab == tab, + ); + } +} 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..b5d8e8e8 --- /dev/null +++ b/mobile/lib/src/presentation/navigation/routes/router.dart @@ -0,0 +1,24 @@ +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'; +import 'package:polydodo/src/presentation/pages/record_sleep/record_sleep_guide_page.dart'; + +@MaterialAutoRouter( + generateNavigationHelperExtension: true, + routes: [ + 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 {} 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 78% rename from mobile/lib/src/presentation/bluetooth_route/bluetoothSelector_route.dart rename to mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart index 3805ad55..719237e9 100644 --- a/mobile/lib/src/presentation/bluetooth_route/bluetoothSelector_route.dart +++ b/mobile/lib/src/presentation/pages/bluetooth_page/bluetoothSelector_page.dart @@ -1,18 +1,22 @@ +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/recording/recording_route.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'; -class BluetoothSelectorRoute extends StatelessWidget { +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: NavDrawer(activeTab: NavdrawerTab.BluetoothSelector), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); @@ -27,11 +31,7 @@ class BluetoothSelectorRoute extends StatelessWidget { Text('Unable to connect to device because ${state.cause}'), )); } else if (state is DeviceConnectionSuccess) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => RecordingRoute(), - )); + ExtendedNavigator.of(context).replace(Routes.recordSleepGuidePage); } }, builder: (context, state) { 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..8c4cf36f --- /dev/null +++ b/mobile/lib/src/presentation/pages/dashboard/dashboard_page.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:polydodo/src/presentation/navigation/navdrawer_tabs.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: NavDrawer(activeTab: NavdrawerTab.Dashboard), + body: NestedScrollView( + headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { + return [ + 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: 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 new file mode 100644 index 00000000..bb12f70d --- /dev/null +++ b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_guide_page.dart @@ -0,0 +1,33 @@ +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_tabs.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: NavDrawer(activeTab: NavdrawerTab.RecordSleep), + body: PageView( + children: [ + Container(child: Center(child: Text('Record Sleep Guide'))), + Container(child: Center(child: Text('Record Sleep next'))), + ], + ), + floatingActionButton: FloatingActionButton.extended( + onPressed: () { + ExtendedNavigator.of(context).replace(Routes.recordSleepValidatePage); + }, + icon: Icon(Icons.radio_button_checked), + label: Text('Record'), + ), + ); + } +} 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 67% 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 43a4bb72..b4ff4ac0 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: NavDrawer(activeTab: NavdrawerTab.RecordSleep), body: BlocConsumer( listener: (context, state) { print(state.runtimeType); diff --git a/mobile/lib/src/presentation/pages/record_sleep/record_sleep_widgets.dart b/mobile/lib/src/presentation/pages/record_sleep/record_sleep_widgets.dart new file mode 100644 index 00000000..e69de29b diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 783f75ee..b4a5be35 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,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0-nullsafety.1" + 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 +176,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 +218,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 +272,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 +310,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 +331,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 +359,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 +415,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 +485,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 +513,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 +541,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 +611,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 +658,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 +693,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 +728,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 +756,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 13299cdc..f86604a4 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,12 +44,13 @@ dependencies: usb_serial: ^0.2.4 dev_dependencies: + auto_route_generator: ^0.6.10 + 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. flutter: # The following line ensures that the Material Icons font is @@ -59,7 +58,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 @@ -85,3 +85,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