CSV import
This commit is contained in:
parent
182d9b8db0
commit
853953a99e
|
|
@ -31,176 +31,169 @@ class _DeviceSettingsState extends State<DeviceSettings> {
|
||||||
final state = viewModel.state;
|
final state = viewModel.state;
|
||||||
final prefState = state.prefState;
|
final prefState = state.prefState;
|
||||||
|
|
||||||
return WillPopScope(
|
return Scaffold(
|
||||||
onWillPop: () async {
|
appBar: AppBar(
|
||||||
//viewModel.onBackPressed();
|
centerTitle: false,
|
||||||
return true;
|
automaticallyImplyLeading: isMobile(context),
|
||||||
},
|
title: Text(localization.deviceSettings),
|
||||||
child: Scaffold(
|
),
|
||||||
appBar: AppBar(
|
body: Form(
|
||||||
centerTitle: false,
|
key: _formKey,
|
||||||
automaticallyImplyLeading: isMobile(context),
|
child: ListView(
|
||||||
title: Text(localization.deviceSettings),
|
children: <Widget>[
|
||||||
actions: <Widget>[],
|
FormCard(
|
||||||
),
|
children: <Widget>[
|
||||||
body: Form(
|
AppDropdownButton<AppLayout>(
|
||||||
key: _formKey,
|
showUseDefault: true,
|
||||||
child: ListView(
|
labelText: localization.layout,
|
||||||
children: <Widget>[
|
value: viewModel.state.prefState.appLayout,
|
||||||
FormCard(
|
onChanged: (dynamic value) =>
|
||||||
children: <Widget>[
|
viewModel.onLayoutChanged(context, value),
|
||||||
AppDropdownButton<AppLayout>(
|
items: [
|
||||||
showUseDefault: true,
|
DropdownMenuItem(
|
||||||
labelText: localization.layout,
|
child: Text(localization.desktop),
|
||||||
value: viewModel.state.prefState.appLayout,
|
value: AppLayout.desktop,
|
||||||
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<AppSidebarMode>(
|
|
||||||
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),
|
|
||||||
),
|
),
|
||||||
AppDropdownButton<AppSidebarMode>(
|
DropdownMenuItem(
|
||||||
showUseDefault: true,
|
child: Text(localization.mobile),
|
||||||
labelText: localization.historySidebar,
|
value: AppLayout.mobile,
|
||||||
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),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
AppDropdownButton<int>(
|
),
|
||||||
labelText: localization.rowsPerPage,
|
if (state.prefState.isNotMobile) ...[
|
||||||
value: prefState.rowsPerPage,
|
AppDropdownButton<AppSidebarMode>(
|
||||||
onChanged: (dynamic value) =>
|
showUseDefault: true,
|
||||||
viewModel.onRowsPerPageChanged(context, value),
|
labelText: localization.menuSidebar,
|
||||||
|
value: state.prefState.menuSidebarMode,
|
||||||
items: [
|
items: [
|
||||||
10,
|
DropdownMenuItem(
|
||||||
25,
|
child: Text(localization.collapse),
|
||||||
50,
|
value: AppSidebarMode.collapse,
|
||||||
// 100, // TODO optimize datatables to support this
|
),
|
||||||
]
|
DropdownMenuItem(
|
||||||
.map(
|
child: Text(localization.float),
|
||||||
(value) => DropdownMenuItem(
|
value: AppSidebarMode.float,
|
||||||
child: Text('$value'),
|
),
|
||||||
value: value,
|
],
|
||||||
),
|
onChanged: (dynamic value) =>
|
||||||
)
|
viewModel.onMenuModeChanged(context, value),
|
||||||
.toList(),
|
),
|
||||||
|
AppDropdownButton<AppSidebarMode>(
|
||||||
|
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),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
AppDropdownButton<int>(
|
||||||
FormCard(
|
labelText: localization.rowsPerPage,
|
||||||
children: <Widget>[
|
value: prefState.rowsPerPage,
|
||||||
SwitchListTile(
|
onChanged: (dynamic value) =>
|
||||||
title: Text(localization.darkMode),
|
viewModel.onRowsPerPageChanged(context, value),
|
||||||
value: prefState.enableDarkMode,
|
items: [
|
||||||
onChanged: (value) =>
|
10,
|
||||||
viewModel.onDarkModeChanged(context, value),
|
25,
|
||||||
secondary: Icon(kIsWeb
|
50,
|
||||||
? Icons.lightbulb_outline
|
// 100, // TODO optimize datatables to support this
|
||||||
: MdiIcons.themeLightDark),
|
]
|
||||||
activeColor: Theme.of(context).accentColor,
|
.map(
|
||||||
),
|
(value) => DropdownMenuItem(
|
||||||
SwitchListTile(
|
child: Text('$value'),
|
||||||
title: Text(localization.longPressSelectionIsDefault),
|
value: value,
|
||||||
value: prefState.longPressSelectionIsDefault,
|
),
|
||||||
onChanged: (value) =>
|
)
|
||||||
viewModel.onLongPressSelectionIsDefault(context, value),
|
.toList(),
|
||||||
secondary: Icon(
|
),
|
||||||
kIsWeb ? Icons.check_box : MdiIcons.checkBoxOutline),
|
],
|
||||||
activeColor: Theme.of(context).accentColor,
|
),
|
||||||
),
|
FormCard(
|
||||||
/*
|
children: <Widget>[
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(localization.alwaysShowSidebar),
|
title: Text(localization.darkMode),
|
||||||
value: prefState.alwaysShowFilterSidebar,
|
value: prefState.enableDarkMode,
|
||||||
onChanged: (value) =>
|
onChanged: (value) =>
|
||||||
viewModel.onAlwaysShowSidebarChanged(context, value),
|
viewModel.onDarkModeChanged(context, value),
|
||||||
secondary: Icon(Icons.chrome_reader_mode),
|
secondary: Icon(kIsWeb
|
||||||
activeColor: Theme.of(context).accentColor,
|
? Icons.lightbulb_outline
|
||||||
),
|
: MdiIcons.themeLightDark),
|
||||||
*/
|
activeColor: Theme.of(context).accentColor,
|
||||||
FutureBuilder(
|
),
|
||||||
future: viewModel.authenticationSupported,
|
SwitchListTile(
|
||||||
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
title: Text(localization.longPressSelectionIsDefault),
|
||||||
if (snapshot.hasData && snapshot.data == true) {
|
value: prefState.longPressSelectionIsDefault,
|
||||||
return SwitchListTile(
|
onChanged: (value) =>
|
||||||
title: Text(AppLocalization.of(context)
|
viewModel.onLongPressSelectionIsDefault(context, value),
|
||||||
.biometricAuthentication),
|
secondary: Icon(
|
||||||
value: prefState.requireAuthentication,
|
kIsWeb ? Icons.check_box : MdiIcons.checkBoxOutline),
|
||||||
onChanged: (value) => viewModel
|
activeColor: Theme.of(context).accentColor,
|
||||||
.onRequireAuthenticationChanged(context, value),
|
),
|
||||||
secondary: Icon(prefState.requireAuthentication
|
/*
|
||||||
? MdiIcons.lock
|
SwitchListTile(
|
||||||
: MdiIcons.lockOpen),
|
title: Text(localization.alwaysShowSidebar),
|
||||||
activeColor: Theme.of(context).accentColor,
|
value: prefState.alwaysShowFilterSidebar,
|
||||||
);
|
onChanged: (value) =>
|
||||||
} else {
|
viewModel.onAlwaysShowSidebarChanged(context, value),
|
||||||
return SizedBox();
|
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: <Widget>[
|
||||||
|
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: <Widget>[
|
|
||||||
Builder(builder: (BuildContext context) {
|
|
||||||
return ListTile(
|
|
||||||
leading: Icon(Icons.refresh),
|
|
||||||
title: Text(AppLocalization.of(context).refreshData),
|
|
||||||
onTap: () {
|
|
||||||
viewModel.onRefreshTap(context);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/settings/import_export_vm.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/localization.dart';
|
||||||
|
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||||
|
|
||||||
class ImportExport extends StatefulWidget {
|
class ImportExport extends StatefulWidget {
|
||||||
const ImportExport({
|
const ImportExport({
|
||||||
|
|
@ -59,9 +59,13 @@ class _ImportExportState extends State<ImportExport> {
|
||||||
final localization = AppLocalization.of(context);
|
final localization = AppLocalization.of(context);
|
||||||
//final viewModel = widget.viewModel;
|
//final viewModel = widget.viewModel;
|
||||||
|
|
||||||
return EditScaffold(
|
return Scaffold(
|
||||||
title: localization.importExport,
|
appBar: AppBar(
|
||||||
onSavePressed: null,
|
centerTitle: false,
|
||||||
|
automaticallyImplyLeading: isMobile(context),
|
||||||
|
title: Text(localization.importExport),
|
||||||
|
actions: <Widget>[],
|
||||||
|
),
|
||||||
body: SizedBox(),
|
body: SizedBox(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue