Tablet layout

This commit is contained in:
Hillel Coren 2019-08-19 16:04:12 +03:00
parent 8ac5642c06
commit e06fe9b36a
11 changed files with 57 additions and 1 deletions

View File

@ -1,10 +1,15 @@
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/client/client_selectors.dart';
import 'package:invoiceninja_flutter/redux/expense/expense_selectors.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_selectors.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart';
import 'package:invoiceninja_flutter/redux/product/product_selectors.dart';
import 'package:invoiceninja_flutter/redux/project/project_selectors.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_selectors.dart';
import 'package:invoiceninja_flutter/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_state.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_state.dart';
import 'package:invoiceninja_flutter/redux/task/task_selectors.dart';
import 'package:invoiceninja_flutter/redux/ui/entity_ui_state.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
@ -18,6 +23,7 @@ import 'package:built_value/serializer.dart';
// STARTER: import - do not remove comment
import 'package:invoiceninja_flutter/redux/document/document_state.dart';
import 'package:invoiceninja_flutter/redux/expense/expense_state.dart';
import 'package:invoiceninja_flutter/redux/vendor/vendor_selectors.dart';
import 'package:invoiceninja_flutter/redux/vendor/vendor_state.dart';
import 'package:invoiceninja_flutter/redux/task/task_state.dart';
import 'package:invoiceninja_flutter/redux/project/project_state.dart';
@ -217,6 +223,18 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
return hasProductChanges(productUIState.editing, productState.map);
case InvoiceEditScreen.route:
return hasInvoiceChanges(invoiceUIState.editing, invoiceState.map);
case PaymentEditScreen.route:
return hasPaymentChanges(paymentUIState.editing, paymentState.map);
case QuoteEditScreen.route:
return hasQuoteChanges(quoteUIState.editing, quoteState.map);
case ProjectEditScreen.route:
return hasProjectChanges(projectUIState.editing, projectState.map);
case TaskEditScreen.route:
return hasTaskChanges(taskUIState.editing, taskState.map);
case VendorEditScreen.route:
return hasVendorChanges(vendorUIState.editing, vendorState.map);
case ExpenseEditScreen.route:
return hasExpenseChanges(expenseUIState.editing, expenseState.map);
}
if (uiState.currentRoute.endsWith('/edit')) {

View File

@ -203,3 +203,8 @@ List<int> clientExpenseList(
return list;
}
bool hasExpenseChanges(
ExpenseEntity expense, BuiltMap<int, ExpenseEntity> expenseMap) =>
expense.isNew || expense != expenseMap[expense.id];

View File

@ -138,3 +138,7 @@ String invoiceStatsForClient(
return str;
}
bool hasPaymentChanges(
PaymentEntity payment, BuiltMap<int, PaymentEntity> paymentMap) =>
payment.isNew || payment != paymentMap[payment.id];

View File

@ -165,3 +165,8 @@ String projectStatsForClient(
return str;
}
bool hasProjectChanges(
ProjectEntity project, BuiltMap<int, ProjectEntity> projectMap) =>
project.isNew || project != projectMap[project.id];

View File

@ -94,3 +94,7 @@ String quoteStatsForClient(int clientId, BuiltMap<int, InvoiceEntity> quoteMap,
return str;
}
bool hasQuoteChanges(
InvoiceEntity quote, BuiltMap<int, InvoiceEntity> quoteMap) =>
quote.isNew || quote != quoteMap[quote.id];

View File

@ -220,3 +220,8 @@ String taskStatsForProject(int projectId, BuiltMap<int, TaskEntity> taskMap,
return str;
}
bool hasTaskChanges(
TaskEntity task, BuiltMap<int, TaskEntity> taskMap) =>
task.isNew || task != taskMap[task.id];

View File

@ -78,3 +78,8 @@ double calculateVendorBalance(int vendorId, int currencyId,
return total;
}
bool hasVendorChanges(
VendorEntity vendor, BuiltMap<int, VendorEntity> vendorMap) =>
vendor.isNew || vendor != vendorMap[vendor.id];

View File

@ -27,8 +27,10 @@ class MainScreen extends StatelessWidget {
mainIndex = 2;
} else if (mainRoute == EntityType.invoice.name) {
mainIndex = 3;
} else if (mainRoute == 'settings') {
} else if (mainRoute == EntityType.payment.name) {
mainIndex = 4;
} else if (mainRoute == 'settings') {
mainIndex = 5;
}
return Row(
@ -55,6 +57,11 @@ class MainScreen extends StatelessWidget {
viewWidget: InvoiceViewScreen(),
editWidget: InvoiceEditScreen(),
),
EntityScreens(
listWidget: PaymentScreen(),
viewWidget: PaymentViewScreen(),
editWidget: PaymentEditScreen(),
),
SettingsScreen(),
],
),

View File

@ -96,6 +96,7 @@ class _ExpenseEditState extends State<ExpenseEdit>
body: Form(
key: _formKey,
child: TabBarView(
key: ValueKey(viewModel.expense.id),
controller: _controller,
children: <Widget>[
ExpenseEditDetails(

View File

@ -111,6 +111,7 @@ class _TaskEditState extends State<TaskEdit>
body: Form(
key: _formKey,
child: TabBarView(
key: ValueKey(viewModel.task.id),
controller: _controller,
children: <Widget>[
TaskEditDetailsScreen(),

View File

@ -99,6 +99,7 @@ class _VendorEditState extends State<VendorEdit>
body: Form(
key: _formKey,
child: TabBarView(
key: ValueKey(viewModel.vendor.id),
controller: _controller,
children: <Widget>[
VendorEditDetails(