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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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