diff --git a/lib/main.dart b/lib/main.dart index 740f8461..63fceffe 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,12 +12,15 @@ import 'package:mobileraker/ui/components/bottomsheet/setup_bottom_sheet_ui.dart import 'package:mobileraker/ui/components/dialog/setup_dialog_ui.dart'; import 'package:mobileraker/ui/components/snackbar/setup_snackbar.dart'; import 'package:mobileraker/ui/theme_setup.dart'; +import 'package:mobileraker/util/misc.dart'; import 'package:stacked_services/stacked_services.dart'; import 'app/app_setup.router.dart'; import 'service/setting_service.dart'; import 'ui/views/setting/setting_viewmodel.dart'; +String? initialRoute; + Future main() async { Logger.level = Level.info; // EasyLocalization.logger.enableLevels = [LevelMessages.info]; @@ -33,6 +36,7 @@ Future main() async { setupBottomSheetUi(); await FirebaseAnalytics.instance.logAppOpen(); await setupCat(); + initialRoute = await selectInitialRoute(); runApp(EasyLocalization( child: MyApp(), supportedLocales: [Locale('en'), Locale('de')], @@ -43,7 +47,6 @@ Future main() async { } class MyApp extends StatelessWidget { - final _settingService = locator(); // This widget is the root of your application. @override @@ -54,9 +57,7 @@ class MyApp extends StatelessWidget { darkTheme: getDarkTheme(context), navigatorKey: StackedService.navigatorKey, onGenerateRoute: StackedRouter().onGenerateRoute, - initialRoute: _settingService.readBool(startWithOverviewKey) - ? Routes.overViewView - : null, + initialRoute: initialRoute, localizationsDelegates: [ FormBuilderLocalizations.delegate, ...context.localizationDelegates diff --git a/lib/repository/printer_setting_hive_repository.dart b/lib/repository/printer_setting_hive_repository.dart index 98f4c624..1743a893 100644 --- a/lib/repository/printer_setting_hive_repository.dart +++ b/lib/repository/printer_setting_hive_repository.dart @@ -36,4 +36,8 @@ class PrinterSettingHiveRepository implements PrinterSettingRepository { Future> fetchAll() { return Future.value(_boxPrinterSettings.values.toList(growable: false)); } + + Future count() { + return Future.value(_boxPrinterSettings.length); + } } diff --git a/lib/repository/printer_setting_repository.dart b/lib/repository/printer_setting_repository.dart index c22e730d..82b7faf9 100644 --- a/lib/repository/printer_setting_repository.dart +++ b/lib/repository/printer_setting_repository.dart @@ -10,6 +10,7 @@ abstract class PrinterSettingRepository { Future remove(String uuid); Future> fetchAll(); + Future count(); } \ No newline at end of file diff --git a/lib/service/machine_service.dart b/lib/service/machine_service.dart index 0317c58d..78f469c3 100644 --- a/lib/service/machine_service.dart +++ b/lib/service/machine_service.dart @@ -65,6 +65,10 @@ class MachineService { return _printerSettingRepo.fetchAll(); } + Future count() { + return _printerSettingRepo.count(); + } + setMachineActive(PrinterSetting? printerSetting) async { if (printerSetting == null) { // This case sets no printer as active! diff --git a/lib/ui/components/drawer/nav_drawer_view.dart b/lib/ui/components/drawer/nav_drawer_view.dart index 2119db83..b4312a63 100644 --- a/lib/ui/components/drawer/nav_drawer_view.dart +++ b/lib/ui/components/drawer/nav_drawer_view.dart @@ -49,13 +49,15 @@ class NavigationDrawerWidget ..._buildPrinterSelection(context, model), ], ), - buildMenuItem( - model, - text: 'pages.overview.title'.tr(), - icon: FlutterIcons.view_dashboard_mco, - path: Routes.overViewView, - ), - Divider(), + if ((model.data?.length ?? 0) > 1) ...[ + buildMenuItem( + model, + text: 'pages.overview.title'.tr(), + icon: FlutterIcons.view_dashboard_mco, + path: Routes.overViewView, + ), + Divider(), + ], buildMenuItem( model, text: 'pages.dashboard.title'.tr(), @@ -103,28 +105,31 @@ class NavigationDrawerWidget alignment: Alignment.center, padding: EdgeInsets.only(bottom: 20, top: 10), child: RichText( - text: TextSpan(text: 'components.nav_drawer.footer'.tr(), children: [ - new TextSpan( - text: ' GitHub ', - style: new TextStyle(color: Colors.blue), + text: TextSpan( + text: 'components.nav_drawer.footer'.tr(), children: [ - WidgetSpan( - child: Icon(FlutterIcons.github_alt_faw, size: 18), + new TextSpan( + text: ' GitHub ', + style: new TextStyle(color: Colors.blue), + children: [ + WidgetSpan( + child: + Icon(FlutterIcons.github_alt_faw, size: 18), + ), + ], + recognizer: TapGestureRecognizer() + ..onTap = () async { + const String url = + 'https://github.com/Clon1998/mobileraker'; + if (await canLaunch(url)) { + //TODO Fix this... neds Android Package Visibility + await launch(url); + } else { + throw 'Could not launch $url'; + } + }, ), - ], - recognizer: TapGestureRecognizer() - ..onTap = () async { - const String url = - 'https://github.com/Clon1998/mobileraker'; - if (await canLaunch(url)) { - //TODO Fix this... neds Android Package Visibility - await launch(url); - } else { - throw 'Could not launch $url'; - } - }, - ), - ]), + ]), textAlign: TextAlign.center, )), ], diff --git a/lib/ui/views/overview/overview_view.dart b/lib/ui/views/overview/overview_view.dart index 3e1e6450..7fcd1862 100644 --- a/lib/ui/views/overview/overview_view.dart +++ b/lib/ui/views/overview/overview_view.dart @@ -38,7 +38,7 @@ class OverViewView extends ViewModelBuilderWidget { ); Widget _buildBody(BuildContext context, OverViewViewModel model) { - if (!model.areMachinesAvailable) { + if (!model.dataReady) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -56,7 +56,7 @@ class OverViewView extends ViewModelBuilderWidget { )); } - List machines = model.machines; + List machines = model.data!; return SingleChildScrollView( child: Column( diff --git a/lib/ui/views/overview/overview_viewmodel.dart b/lib/ui/views/overview/overview_viewmodel.dart index a5922f8b..fdcaacf9 100644 --- a/lib/ui/views/overview/overview_viewmodel.dart +++ b/lib/ui/views/overview/overview_viewmodel.dart @@ -1,29 +1,18 @@ import 'package:mobileraker/app/app_setup.locator.dart'; -import 'package:mobileraker/app/app_setup.logger.dart'; import 'package:mobileraker/app/app_setup.router.dart'; import 'package:mobileraker/domain/printer_setting.dart'; import 'package:mobileraker/service/machine_service.dart'; import 'package:stacked/stacked.dart'; import 'package:stacked_services/stacked_services.dart'; -const String _MachineList = 'machineList'; - -class OverViewViewModel extends MultipleStreamViewModel { - final _logger = getLogger('MasterViewModel'); +class OverViewViewModel extends FutureViewModel> { final _machineService = locator(); final _navigationService = locator(); - List get machines => dataMap![_MachineList]; - - bool get areMachinesAvailable => dataReady(_MachineList); + @override + Future> futureToRun() => _machineService.fetchAll(); void onAddPressed() { _navigationService.navigateTo(Routes.printersAdd); } - - @override - Map get streamsMap => { - _MachineList: StreamData>( - _machineService.fetchAll().asStream()) - }; } diff --git a/lib/util/misc.dart b/lib/util/misc.dart index 272b597c..6130cc16 100644 --- a/lib/util/misc.dart +++ b/lib/util/misc.dart @@ -1,5 +1,7 @@ import 'package:mobileraker/app/app_setup.locator.dart'; +import 'package:mobileraker/app/app_setup.router.dart'; import 'package:mobileraker/enums/dialog_type.dart'; +import 'package:mobileraker/service/machine_service.dart'; import 'package:mobileraker/service/setting_service.dart'; import 'package:mobileraker/ui/components/dialog/editForm/range_edit_form_view.dart'; import 'package:mobileraker/ui/views/setting/setting_viewmodel.dart'; @@ -66,3 +68,15 @@ Future?> numberOrRangeDialog( secondaryButtonTitle: secondaryButtonTitle, data: data); } + +Future selectInitialRoute() async { + final _settingService = locator(); + final _machineService = locator(); + + if (!_settingService.readBool(startWithOverviewKey)) return null; + + var c = await _machineService.count(); + if (c == 1) return null; + + return Routes.overViewView; +}