Tablet layout

This commit is contained in:
Hillel Coren 2019-08-20 08:22:08 +03:00
parent c046707a6b
commit 0098397ba5
13 changed files with 49 additions and 145 deletions

24
lib/ui/app/help_text.dart Normal file
View File

@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
class HelpText extends StatelessWidget {
const HelpText(this.message);
final String message;
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: Opacity(
opacity: 0.5,
child: Text(
message,
style: TextStyle(
fontSize: 18,
color: Colors.grey,
),
),
),
),
);
}
}

View File

@ -1,3 +1,4 @@
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/screen_imports.dart'; import 'package:invoiceninja_flutter/ui/app/screen_imports.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
@ -147,17 +148,7 @@ class BlankScreen extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar(), appBar: AppBar(),
body: Container( body: HelpText(AppLocalization.of(context).noRecordSelected),
child: Center(
child: Text(
AppLocalization.of(context).noneSelected.toUpperCase(),
style: TextStyle(
fontSize: 20,
color: Colors.grey,
),
),
),
),
); );
} }
} }

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/client/client_list_vm.dart'; import 'package:invoiceninja_flutter/ui/client/client_list_vm.dart';
@ -21,17 +22,7 @@ class ClientList extends StatelessWidget {
if (!viewModel.isLoaded) { if (!viewModel.isLoaded) {
return LoadingIndicator(); return LoadingIndicator();
} else if (viewModel.clientList.isEmpty) { } else if (viewModel.clientList.isEmpty) {
return Opacity( return HelpText(AppLocalization.of(context).noRecordsFound);
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
);
} }
return _buildListView(context); return _buildListView(context);

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/document/document_list_item.dart'; import 'package:invoiceninja_flutter/ui/document/document_list_item.dart';
@ -34,17 +35,7 @@ class DocumentList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.documentList.isEmpty child: viewModel.documentList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),
@ -118,17 +109,7 @@ class DocumentList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.documentList.isEmpty child: viewModel.documentList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/expense/expense_list_item.dart'; import 'package:invoiceninja_flutter/ui/expense/expense_list_item.dart';
@ -71,17 +72,7 @@ class ExpenseList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.expenseList.isEmpty child: viewModel.expenseList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_list_item.dart'; import 'package:invoiceninja_flutter/ui/invoice/invoice_list_item.dart';
@ -67,17 +68,7 @@ class InvoiceList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.invoiceList.isEmpty child: viewModel.invoiceList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/payment/payment_list_item.dart'; import 'package:invoiceninja_flutter/ui/payment/payment_list_item.dart';
@ -79,17 +80,7 @@ class PaymentList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.paymentList.isEmpty child: viewModel.paymentList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
@ -21,17 +22,7 @@ class ProductList extends StatelessWidget {
if (!viewModel.isLoaded) { if (!viewModel.isLoaded) {
return LoadingIndicator(); return LoadingIndicator();
} else if (viewModel.productList.isEmpty) { } else if (viewModel.productList.isEmpty) {
return Opacity( return HelpText(AppLocalization.of(context).noRecordsFound);
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
);
} }
return _buildListView(context); return _buildListView(context);

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/project/project_list_item.dart'; import 'package:invoiceninja_flutter/ui/project/project_list_item.dart';
@ -62,17 +63,7 @@ class ProjectList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.projectList.isEmpty child: viewModel.projectList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/task/task_list_item.dart'; import 'package:invoiceninja_flutter/ui/task/task_list_item.dart';
@ -73,17 +74,7 @@ class TaskList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.taskList.isEmpty child: viewModel.taskList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/vendor/vendor_list_item.dart'; import 'package:invoiceninja_flutter/ui/vendor/vendor_list_item.dart';
@ -26,17 +27,7 @@ class VendorList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.vendorList.isEmpty child: viewModel.vendorList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),

View File

@ -14,7 +14,7 @@ abstract class LocaleCodeAware {
mixin LocalizationsProvider on LocaleCodeAware { mixin LocalizationsProvider on LocaleCodeAware {
static final Map<String, Map<String, String>> _localizedValues = { static final Map<String, Map<String, String>> _localizedValues = {
'en': { 'en': {
'none_selected': 'None Selected', 'no_record_selected': 'No record selected',
'error_unsaved_changes': 'Please save or cancel your changes', 'error_unsaved_changes': 'Please save or cancel your changes',
'download': 'Download', 'download': 'Download',
'requires_an_enterprise_plan': 'Requires an enterprise plan', 'requires_an_enterprise_plan': 'Requires an enterprise plan',
@ -13731,7 +13731,7 @@ mixin LocalizationsProvider on LocaleCodeAware {
String get download => _localizedValues[localeCode]['download']; String get download => _localizedValues[localeCode]['download'];
String get noneSelected => _localizedValues[localeCode]['none_selected']; String get noRecordSelected => _localizedValues[localeCode]['no_record_selected'];
String get requiresAnEnterprisePlan => String get requiresAnEnterprisePlan =>
_localizedValues[localeCode]['requires_an_enterprise_plan']; _localizedValues[localeCode]['requires_an_enterprise_plan'];

View File

@ -37,17 +37,7 @@ class StubList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.stubList.isEmpty child: viewModel.stubList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),
@ -124,17 +114,7 @@ class StubList extends StatelessWidget {
: RefreshIndicator( : RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: viewModel.stubList.isEmpty child: viewModel.stubList.isEmpty
? Opacity( ? HelpText(AppLocalization.of(context).noRecordsFound)
opacity: 0.5,
child: Center(
child: Text(
AppLocalization.of(context).noRecordsFound,
style: TextStyle(
fontSize: 18.0,
),
),
),
)
: ListView.separated( : ListView.separated(
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (context, index) => ListDivider(), separatorBuilder: (context, index) => ListDivider(),