From 853953a99e74b112a0ca94bc888a892955a10b29 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 13 Dec 2020 17:02:22 +0200 Subject: [PATCH] CSV import --- lib/ui/settings/device_settings_list.dart | 319 +++++++++++----------- lib/ui/settings/import_export.dart | 12 +- 2 files changed, 164 insertions(+), 167 deletions(-) diff --git a/lib/ui/settings/device_settings_list.dart b/lib/ui/settings/device_settings_list.dart index f05551f31..9f7cb81f4 100644 --- a/lib/ui/settings/device_settings_list.dart +++ b/lib/ui/settings/device_settings_list.dart @@ -31,176 +31,169 @@ class _DeviceSettingsState extends State { final state = viewModel.state; final prefState = state.prefState; - return WillPopScope( - onWillPop: () async { - //viewModel.onBackPressed(); - return true; - }, - child: Scaffold( - appBar: AppBar( - centerTitle: false, - automaticallyImplyLeading: isMobile(context), - title: Text(localization.deviceSettings), - actions: [], - ), - body: Form( - key: _formKey, - child: ListView( - children: [ - FormCard( - children: [ - AppDropdownButton( - showUseDefault: true, - labelText: localization.layout, - value: viewModel.state.prefState.appLayout, - onChanged: (dynamic value) => - viewModel.onLayoutChanged(context, value), - items: [ - DropdownMenuItem( - child: Text(localization.desktop), - value: AppLayout.desktop, - ), - DropdownMenuItem( - child: Text(localization.mobile), - value: AppLayout.mobile, - ), - ], - ), - if (state.prefState.isNotMobile) ...[ - AppDropdownButton( - showUseDefault: true, - labelText: localization.menuSidebar, - value: state.prefState.menuSidebarMode, - items: [ - DropdownMenuItem( - child: Text(localization.collapse), - value: AppSidebarMode.collapse, - ), - DropdownMenuItem( - child: Text(localization.float), - value: AppSidebarMode.float, - ), - ], - onChanged: (dynamic value) => - viewModel.onMenuModeChanged(context, value), + return Scaffold( + appBar: AppBar( + centerTitle: false, + automaticallyImplyLeading: isMobile(context), + title: Text(localization.deviceSettings), + ), + body: Form( + key: _formKey, + child: ListView( + children: [ + FormCard( + children: [ + AppDropdownButton( + showUseDefault: true, + labelText: localization.layout, + value: viewModel.state.prefState.appLayout, + onChanged: (dynamic value) => + viewModel.onLayoutChanged(context, value), + items: [ + DropdownMenuItem( + child: Text(localization.desktop), + value: AppLayout.desktop, ), - AppDropdownButton( - showUseDefault: true, - labelText: localization.historySidebar, - value: state.prefState.historySidebarMode, - items: [ - DropdownMenuItem( - child: Text(localization.showOrHide), - value: AppSidebarMode.visible, - ), - DropdownMenuItem( - child: Text(localization.float), - value: AppSidebarMode.float, - ), - ], - onChanged: (dynamic value) => - viewModel.onHistoryModeChanged(context, value), + DropdownMenuItem( + child: Text(localization.mobile), + value: AppLayout.mobile, ), ], - AppDropdownButton( - labelText: localization.rowsPerPage, - value: prefState.rowsPerPage, - onChanged: (dynamic value) => - viewModel.onRowsPerPageChanged(context, value), + ), + if (state.prefState.isNotMobile) ...[ + AppDropdownButton( + showUseDefault: true, + labelText: localization.menuSidebar, + value: state.prefState.menuSidebarMode, items: [ - 10, - 25, - 50, - // 100, // TODO optimize datatables to support this - ] - .map( - (value) => DropdownMenuItem( - child: Text('$value'), - value: value, - ), - ) - .toList(), + DropdownMenuItem( + child: Text(localization.collapse), + value: AppSidebarMode.collapse, + ), + DropdownMenuItem( + child: Text(localization.float), + value: AppSidebarMode.float, + ), + ], + onChanged: (dynamic value) => + viewModel.onMenuModeChanged(context, value), + ), + AppDropdownButton( + showUseDefault: true, + labelText: localization.historySidebar, + value: state.prefState.historySidebarMode, + items: [ + DropdownMenuItem( + child: Text(localization.showOrHide), + value: AppSidebarMode.visible, + ), + DropdownMenuItem( + child: Text(localization.float), + value: AppSidebarMode.float, + ), + ], + onChanged: (dynamic value) => + viewModel.onHistoryModeChanged(context, value), ), ], - ), - FormCard( - children: [ - SwitchListTile( - title: Text(localization.darkMode), - value: prefState.enableDarkMode, - onChanged: (value) => - viewModel.onDarkModeChanged(context, value), - secondary: Icon(kIsWeb - ? Icons.lightbulb_outline - : MdiIcons.themeLightDark), - activeColor: Theme.of(context).accentColor, - ), - SwitchListTile( - title: Text(localization.longPressSelectionIsDefault), - value: prefState.longPressSelectionIsDefault, - onChanged: (value) => - viewModel.onLongPressSelectionIsDefault(context, value), - secondary: Icon( - kIsWeb ? Icons.check_box : MdiIcons.checkBoxOutline), - activeColor: Theme.of(context).accentColor, - ), - /* - SwitchListTile( - title: Text(localization.alwaysShowSidebar), - value: prefState.alwaysShowFilterSidebar, - onChanged: (value) => - viewModel.onAlwaysShowSidebarChanged(context, value), - secondary: Icon(Icons.chrome_reader_mode), - activeColor: Theme.of(context).accentColor, - ), - */ - FutureBuilder( - future: viewModel.authenticationSupported, - builder: (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.hasData && snapshot.data == true) { - return SwitchListTile( - title: Text(AppLocalization.of(context) - .biometricAuthentication), - value: prefState.requireAuthentication, - onChanged: (value) => viewModel - .onRequireAuthenticationChanged(context, value), - secondary: Icon(prefState.requireAuthentication - ? MdiIcons.lock - : MdiIcons.lockOpen), - activeColor: Theme.of(context).accentColor, - ); - } else { - return SizedBox(); - } + AppDropdownButton( + labelText: localization.rowsPerPage, + value: prefState.rowsPerPage, + onChanged: (dynamic value) => + viewModel.onRowsPerPageChanged(context, value), + items: [ + 10, + 25, + 50, + // 100, // TODO optimize datatables to support this + ] + .map( + (value) => DropdownMenuItem( + child: Text('$value'), + value: value, + ), + ) + .toList(), + ), + ], + ), + FormCard( + children: [ + SwitchListTile( + title: Text(localization.darkMode), + value: prefState.enableDarkMode, + onChanged: (value) => + viewModel.onDarkModeChanged(context, value), + secondary: Icon(kIsWeb + ? Icons.lightbulb_outline + : MdiIcons.themeLightDark), + activeColor: Theme.of(context).accentColor, + ), + SwitchListTile( + title: Text(localization.longPressSelectionIsDefault), + value: prefState.longPressSelectionIsDefault, + onChanged: (value) => + viewModel.onLongPressSelectionIsDefault(context, value), + secondary: Icon( + kIsWeb ? Icons.check_box : MdiIcons.checkBoxOutline), + activeColor: Theme.of(context).accentColor, + ), + /* + SwitchListTile( + title: Text(localization.alwaysShowSidebar), + value: prefState.alwaysShowFilterSidebar, + onChanged: (value) => + viewModel.onAlwaysShowSidebarChanged(context, value), + secondary: Icon(Icons.chrome_reader_mode), + activeColor: Theme.of(context).accentColor, + ), + */ + FutureBuilder( + future: viewModel.authenticationSupported, + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasData && snapshot.data == true) { + return SwitchListTile( + title: Text(AppLocalization.of(context) + .biometricAuthentication), + value: prefState.requireAuthentication, + onChanged: (value) => viewModel + .onRequireAuthenticationChanged(context, value), + secondary: Icon(prefState.requireAuthentication + ? MdiIcons.lock + : MdiIcons.lockOpen), + activeColor: Theme.of(context).accentColor, + ); + } else { + return SizedBox(); + } + }, + ), + /* + SwitchListTile( + title: Text(localization.fullWidthEditor), + value: prefState.fullWidthEditor, + onChanged: (value) => + viewModel.onFullWidthEditorChanged(context, value), + secondary: Icon(getEntityIcon(EntityType.invoice)), + activeColor: Theme.of(context).accentColor, + ), + */ + ], + ), + FormCard( + children: [ + Builder(builder: (BuildContext context) { + return ListTile( + leading: Icon(Icons.refresh), + title: Text(AppLocalization.of(context).refreshData), + onTap: () { + viewModel.onRefreshTap(context); }, - ), - /* - SwitchListTile( - title: Text(localization.fullWidthEditor), - value: prefState.fullWidthEditor, - onChanged: (value) => - viewModel.onFullWidthEditorChanged(context, value), - secondary: Icon(getEntityIcon(EntityType.invoice)), - activeColor: Theme.of(context).accentColor, - ), - */ - ], - ), - FormCard( - children: [ - Builder(builder: (BuildContext context) { - return ListTile( - leading: Icon(Icons.refresh), - title: Text(AppLocalization.of(context).refreshData), - onTap: () { - viewModel.onRefreshTap(context); - }, - ); - }), - ], - ) - ], - ), + ); + }), + ], + ) + ], ), ), ); diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart index cfe8dce2b..29cce83d6 100644 --- a/lib/ui/settings/import_export.dart +++ b/lib/ui/settings/import_export.dart @@ -1,8 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/ui/settings/import_export_vm.dart'; -import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; +import 'package:invoiceninja_flutter/utils/platforms.dart'; class ImportExport extends StatefulWidget { const ImportExport({ @@ -59,9 +59,13 @@ class _ImportExportState extends State { final localization = AppLocalization.of(context); //final viewModel = widget.viewModel; - return EditScaffold( - title: localization.importExport, - onSavePressed: null, + return Scaffold( + appBar: AppBar( + centerTitle: false, + automaticallyImplyLeading: isMobile(context), + title: Text(localization.importExport), + actions: [], + ), body: SizedBox(), ); }