Implemented Long Press to activate multiselect from Menu Icon

This commit is contained in:
Gianfranco Gasbarri 2019-11-03 21:19:44 +00:00
parent b4e423b956
commit fff9d942e0
15 changed files with 47 additions and 7 deletions

View File

@ -18,6 +18,7 @@ class AppScaffold extends StatelessWidget {
this.floatingActionButton, this.floatingActionButton,
this.isChecked, this.isChecked,
this.onCheckboxChanged, this.onCheckboxChanged,
this.onHamburgerLongPress,
this.showCheckbox = false, this.showCheckbox = false,
this.hideHamburgerButton = false}); this.hideHamburgerButton = false});
@ -29,6 +30,7 @@ class AppScaffold extends StatelessWidget {
final bool hideHamburgerButton; final bool hideHamburgerButton;
final bool showCheckbox; final bool showCheckbox;
final Function(bool) onCheckboxChanged; final Function(bool) onCheckboxChanged;
final Function() onHamburgerLongPress;
final bool isChecked; final bool isChecked;
@override @override
@ -43,20 +45,30 @@ class AppScaffold extends StatelessWidget {
child: Scaffold( child: Scaffold(
drawer: isMobile(context) ? AppDrawerBuilder() : null, drawer: isMobile(context) ? AppDrawerBuilder() : null,
appBar: AppBar( appBar: AppBar(
automaticallyImplyLeading: isMobile(context), automaticallyImplyLeading: false,
leading: showCheckbox leading: showCheckbox
? Checkbox( ? Checkbox(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: onCheckboxChanged, onChanged: onCheckboxChanged,
activeColor: Theme.of(context).accentColor, activeColor: Theme.of(context).accentColor,
value: isChecked) value: isChecked)
: hideHamburgerButton || isMobile(context) : hideHamburgerButton
? null ? null
: IconButton( : Builder(
icon: Icon(Icons.menu), builder: (context) => GestureDetector(
onPressed: () => onLongPress: onHamburgerLongPress,
store.dispatch(UpdateSidebar(AppSidebar.menu)), child: IconButton(
), icon: Icon(Icons.menu),
onPressed: () {
if (isMobile(context)) {
Scaffold.of(context).openDrawer();
} else {
store.dispatch(
UpdateSidebar(AppSidebar.menu));
}
},
),
)),
title: appBarTitle, title: appBarTitle,
actions: appBarActions, actions: appBarActions,
), ),

View File

@ -37,6 +37,8 @@ class ClientScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.clientList.length, listUIState.selectedIds.length == viewModel.clientList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartClientMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final clients = viewModel.clientList final clients = viewModel.clientList
.map<ClientEntity>((clientId) => viewModel.clientMap[clientId]) .map<ClientEntity>((clientId) => viewModel.clientMap[clientId])

View File

@ -38,6 +38,8 @@ class CompanyGatewayScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.companyGatewayList.length, listUIState.selectedIds.length == viewModel.companyGatewayList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartCompanyGatewayMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final companyGateways = viewModel.companyGatewayList final companyGateways = viewModel.companyGatewayList
.map<CompanyGatewayEntity>((companyGatewayId) => .map<CompanyGatewayEntity>((companyGatewayId) =>

View File

@ -36,6 +36,8 @@ class DocumentScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.documentList.length, listUIState.selectedIds.length == viewModel.documentList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartDocumentMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final documents = viewModel.documentList final documents = viewModel.documentList
.map<DocumentEntity>( .map<DocumentEntity>(

View File

@ -38,6 +38,8 @@ class ExpenseScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.expenseList.length, listUIState.selectedIds.length == viewModel.expenseList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartExpenseMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final expenses = viewModel.expenseList final expenses = viewModel.expenseList
.map<ExpenseEntity>((expenseId) => viewModel.expenseMap[expenseId]) .map<ExpenseEntity>((expenseId) => viewModel.expenseMap[expenseId])

View File

@ -39,6 +39,8 @@ class GroupSettingsScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.groupList.length, listUIState.selectedIds.length == viewModel.groupList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartGroupMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final groups = viewModel.groupList final groups = viewModel.groupList
.map<GroupEntity>((groupId) => viewModel.groupMap[groupId]) .map<GroupEntity>((groupId) => viewModel.groupMap[groupId])

View File

@ -38,6 +38,8 @@ class InvoiceScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.invoiceList.length, listUIState.selectedIds.length == viewModel.invoiceList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartInvoiceMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final invoices = viewModel.invoiceList final invoices = viewModel.invoiceList
.map<InvoiceEntity>((invoiceId) => viewModel.invoiceMap[invoiceId]) .map<InvoiceEntity>((invoiceId) => viewModel.invoiceMap[invoiceId])

View File

@ -34,6 +34,8 @@ class PaymentScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.paymentList.length, listUIState.selectedIds.length == viewModel.paymentList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartPaymentMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final payments = viewModel.paymentList final payments = viewModel.paymentList
.map<PaymentEntity>((paymentId) => viewModel.paymentMap[paymentId]) .map<PaymentEntity>((paymentId) => viewModel.paymentMap[paymentId])

View File

@ -36,6 +36,8 @@ class ProductScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.productList.length, listUIState.selectedIds.length == viewModel.productList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartProductMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final products = viewModel.productList final products = viewModel.productList
.map<ProductEntity>((productId) => viewModel.productMap[productId]) .map<ProductEntity>((productId) => viewModel.productMap[productId])

View File

@ -36,6 +36,8 @@ class ProjectScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.projectList.length, listUIState.selectedIds.length == viewModel.projectList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartProjectMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final projects = viewModel.projectList final projects = viewModel.projectList
.map<ProjectEntity>((projectId) => viewModel.projectMap[projectId]) .map<ProjectEntity>((projectId) => viewModel.projectMap[projectId])

View File

@ -38,6 +38,8 @@ class QuoteScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.quoteList.length, listUIState.selectedIds.length == viewModel.quoteList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartQuoteMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final quotes = viewModel.quoteList final quotes = viewModel.quoteList
.map<InvoiceEntity>((quoteId) => viewModel.quoteMap[quoteId]) .map<InvoiceEntity>((quoteId) => viewModel.quoteMap[quoteId])

View File

@ -37,6 +37,8 @@ class TaskScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.taskList.length, listUIState.selectedIds.length == viewModel.taskList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartTaskMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final tasks = viewModel.taskList final tasks = viewModel.taskList
.map<TaskEntity>((taskId) => viewModel.taskMap[taskId]) .map<TaskEntity>((taskId) => viewModel.taskMap[taskId])

View File

@ -36,6 +36,8 @@ class TaxRateSettingsScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.taxRateList.length, listUIState.selectedIds.length == viewModel.taxRateList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartTaxRateMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final taxRates = viewModel.taxRateList final taxRates = viewModel.taxRateList
.map<TaxRateEntity>((taxRateId) => viewModel.taxRateMap[taxRateId]) .map<TaxRateEntity>((taxRateId) => viewModel.taxRateMap[taxRateId])

View File

@ -37,6 +37,8 @@ class UserScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.userList.length, listUIState.selectedIds.length == viewModel.userList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartUserMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
/* /*
final users = viewModel.userList final users = viewModel.userList

View File

@ -36,6 +36,8 @@ class VendorScreen extends StatelessWidget {
isChecked: isInMultiselect && isChecked: isInMultiselect &&
listUIState.selectedIds.length == viewModel.vendorList.length, listUIState.selectedIds.length == viewModel.vendorList.length,
showCheckbox: isInMultiselect, showCheckbox: isInMultiselect,
onHamburgerLongPress: () =>
store.dispatch(StartVendorMultiselect(context: context)),
onCheckboxChanged: (value) { onCheckboxChanged: (value) {
final vendors = viewModel.vendorList final vendors = viewModel.vendorList
.map<VendorEntity>((vendorId) => viewModel.vendorMap[vendorId]) .map<VendorEntity>((vendorId) => viewModel.vendorMap[vendorId])