From d32bab8378e67978dec82fbe971336409213ffc3 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Thu, 5 Oct 2023 09:36:43 +0300 Subject: [PATCH] Null safety --- lib/data/models/company_model.dart | 4 +-- lib/data/models/schedule_model.dart | 2 +- lib/redux/product/product_actions.dart | 2 +- lib/ui/app/FieldGrid.dart | 2 +- lib/ui/app/actions_menu_button.dart | 3 +-- lib/ui/app/app_bottom_bar.dart | 8 +++--- lib/ui/app/autobill_dropdown_menu_item.dart | 4 +-- lib/ui/app/buttons/bottom_buttons.dart | 4 +-- lib/ui/app/dialogs/multiselect_dialog.dart | 4 +-- lib/ui/app/edit_scaffold.dart | 10 +++---- .../app/entities/entity_actions_dialog.dart | 2 +- lib/ui/app/entities/entity_status_chip.dart | 2 +- lib/ui/app/entity_top_filter.dart | 5 ++-- lib/ui/app/forms/notification_settings.dart | 2 +- lib/ui/app/history_drawer.dart | 10 +++---- lib/ui/app/invoice/invoice_item_view.dart | 2 +- lib/ui/app/list_filter.dart | 6 ++--- lib/ui/app/lists/activity_list_tile.dart | 2 +- lib/ui/app/system_log_viewer.dart | 6 ++--- lib/ui/app/tables/entity_list.dart | 6 ++--- lib/ui/client/client_pdf.dart | 6 ++--- lib/ui/client/client_presenter.dart | 2 +- lib/ui/client/edit/client_edit_details.dart | 2 +- .../edit/company_gateway_edit.dart | 7 +++-- .../view/company_gateway_view.dart | 2 +- lib/ui/credit/credit_list_item.dart | 2 +- lib/ui/dashboard/dashboard_chart.dart | 2 +- .../dashboard_date_range_picker.dart | 4 +-- lib/ui/dashboard/dashboard_panels.dart | 12 ++++----- lib/ui/dashboard/dashboard_screen.dart | 2 +- lib/ui/expense/edit/expense_edit_details.dart | 2 +- lib/ui/expense/expense_list_item.dart | 2 +- lib/ui/invoice/edit/invoice_edit_desktop.dart | 4 +-- lib/ui/invoice/edit/invoice_edit_details.dart | 4 +-- lib/ui/invoice/edit/invoice_edit_items.dart | 2 +- .../edit/invoice_edit_items_desktop.dart | 4 +-- lib/ui/invoice/invoice_list_item.dart | 2 +- lib/ui/invoice/invoice_pdf.dart | 4 +-- lib/ui/invoice/invoice_presenter.dart | 2 +- .../invoice/view/invoice_view_overview.dart | 2 +- lib/ui/payment/payment_list_item.dart | 2 +- lib/ui/payment/payment_presenter.dart | 2 +- lib/ui/product/edit/product_edit.dart | 2 +- lib/ui/product/product_presenter.dart | 2 +- .../purchase_order_list_item.dart | 2 +- lib/ui/quote/quote_list_item.dart | 2 +- .../recurring_expense_presenter.dart | 2 +- .../recurring_invoice_list_item.dart | 4 +-- .../recurring_invoice_presenter.dart | 4 +-- lib/ui/reports/reports_screen.dart | 26 +++++++++---------- lib/ui/reports/reports_screen_vm.dart | 4 +-- lib/ui/schedule/edit/schedule_edit.dart | 10 +++---- lib/ui/schedule/schedule_list_item.dart | 6 ++--- lib/ui/settings/account_management.dart | 2 +- lib/ui/settings/client_portal.dart | 2 +- lib/ui/settings/company_details.dart | 2 +- lib/ui/settings/generated_numbers.dart | 2 +- lib/ui/settings/import_export.dart | 18 ++++++------- lib/ui/settings/invoice_design.dart | 4 +-- lib/ui/settings/localization_settings.dart | 8 +++--- lib/ui/settings/payment_settings.dart | 2 +- lib/ui/settings/settings_list.dart | 22 ++++++++-------- lib/ui/settings/task_settings.dart | 2 +- lib/ui/settings/templates_and_reminders.dart | 4 +-- lib/ui/settings/workflow_settings.dart | 2 +- .../subscription/edit/subscription_edit.dart | 4 +-- lib/ui/task/kanban/kanban_card.dart | 2 +- lib/ui/transaction/transaction_list_item.dart | 2 +- .../edit/transaction_rule_edit.dart | 4 +-- .../view/transaction_rule_view.dart | 4 +-- lib/ui/user/edit/user_edit.dart | 2 +- lib/ui/vendor/edit/vendor_edit_details.dart | 2 +- lib/ui/vendor/vendor_presenter.dart | 2 +- lib/ui/webhook/edit/webhook_edit.dart | 2 +- lib/ui/webhook/webhook_list_item.dart | 2 +- lib/utils/i18n.dart | 8 +++--- 76 files changed, 158 insertions(+), 169 deletions(-) diff --git a/lib/data/models/company_model.dart b/lib/data/models/company_model.dart index 73789a4d9..97336d710 100644 --- a/lib/data/models/company_model.dart +++ b/lib/data/models/company_model.dart @@ -950,7 +950,7 @@ abstract class GatewayEntity extends Object for (var i = 0; i < gatewayIds.length; i++) { final gatewayTypeId = gatewayIds[i]; - final gatewayType = localization!.lookup(kGatewayTypes[gatewayTypeId])!; + final gatewayType = localization!.lookup(kGatewayTypes[gatewayTypeId]); if (gatewayType.toLowerCase().contains(filter)) { return true; @@ -978,7 +978,7 @@ abstract class GatewayEntity extends Object for (var i = 0; i < gatewayIds.length; i++) { final gatewayTypeId = gatewayIds[i]; - final gatewayType = localization!.lookup(kGatewayTypes[gatewayTypeId])!; + final gatewayType = localization!.lookup(kGatewayTypes[gatewayTypeId]); if (gatewayType.toLowerCase().contains(filter)) { return gatewayType; diff --git a/lib/data/models/schedule_model.dart b/lib/data/models/schedule_model.dart index 589f67c03..05821f562 100644 --- a/lib/data/models/schedule_model.dart +++ b/lib/data/models/schedule_model.dart @@ -177,7 +177,7 @@ abstract class ScheduleEntity extends Object @override String get listDisplayName { final localization = AppLocalization.of(navigatorKey.currentContext!)!; - return localization.lookup(template) ?? ''; + return localization.lookup(template); } @override diff --git a/lib/redux/product/product_actions.dart b/lib/redux/product/product_actions.dart index c0baf3e1e..3e3e15d04 100644 --- a/lib/redux/product/product_actions.dart +++ b/lib/redux/product/product_actions.dart @@ -404,7 +404,7 @@ void handleProductAction( children: kTaxCategories.keys.map((taxCategoryId) { final taxCategory = kTaxCategories[taxCategoryId]; return SimpleDialogOption( - child: Text(localization.lookup(taxCategory)!), + child: Text(localization.lookup(taxCategory)), onPressed: () { Navigator.of(context).pop(); store.dispatch(SetTaxCategoryProductsRequest( diff --git a/lib/ui/app/FieldGrid.dart b/lib/ui/app/FieldGrid.dart index 8848950d9..bb9007f8d 100644 --- a/lib/ui/app/FieldGrid.dart +++ b/lib/ui/app/FieldGrid.dart @@ -44,7 +44,7 @@ class FieldGrid extends StatelessWidget { children: [ Flexible( child: Text( - localization!.lookup(field)!, + localization!.lookup(field), overflow: TextOverflow.ellipsis, style: TextStyle( color: textColor!.withOpacity(.65), diff --git a/lib/ui/app/actions_menu_button.dart b/lib/ui/app/actions_menu_button.dart index 480540e13..73622a10e 100644 --- a/lib/ui/app/actions_menu_button.dart +++ b/lib/ui/app/actions_menu_button.dart @@ -58,8 +58,7 @@ class ActionMenuButton extends StatelessWidget { SizedBox(width: 16.0), Expanded( child: Text( - AppLocalization.of(context)!.lookup(action.toString()) ?? - ''), + AppLocalization.of(context)!.lookup(action.toString())), ), ], ), diff --git a/lib/ui/app/app_bottom_bar.dart b/lib/ui/app/app_bottom_bar.dart index 05c46f6de..fe7aaa404 100644 --- a/lib/ui/app/app_bottom_bar.dart +++ b/lib/ui/app/app_bottom_bar.dart @@ -156,9 +156,9 @@ class _AppBottomBarState extends State { children: EntityState.values.map((state) { return CheckboxListTile( key: ValueKey('state_' + - AppLocalization.of(context)!.lookup('$state')!), + AppLocalization.of(context)!.lookup('$state')), title: - Text(AppLocalization.of(context)!.lookup('$state')!), + Text(AppLocalization.of(context)!.lookup('$state')), controlAffinity: ListTileControlAffinity.leading, value: stateFilters.contains(state), activeColor: Theme.of(context).colorScheme.secondary, @@ -199,7 +199,7 @@ class _AppBottomBarState extends State { return CheckboxListTile( key: Key(status.toString()), title: Text( - AppLocalization.of(context)!.lookup(status.name)!), + AppLocalization.of(context)!.lookup(status.name)), controlAffinity: ListTileControlAffinity.leading, value: statusFilters.contains(status), activeColor: Theme.of(context).colorScheme.secondary, @@ -245,7 +245,7 @@ class _AppBottomBarState extends State { child: RadioListTile( dense: true, title: Text( - AppLocalization.of(context)!.lookup(sortField)!), + AppLocalization.of(context)!.lookup(sortField)), subtitle: sortField == listUIState.sortField ? Text(listUIState.sortAscending ? AppLocalization.of(context)!.ascending diff --git a/lib/ui/app/autobill_dropdown_menu_item.dart b/lib/ui/app/autobill_dropdown_menu_item.dart index 5cb43e5c6..d5981b93e 100644 --- a/lib/ui/app/autobill_dropdown_menu_item.dart +++ b/lib/ui/app/autobill_dropdown_menu_item.dart @@ -16,9 +16,9 @@ class AutobillDropdownMenuItem extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(localization.lookup(type)!), + Text(localization.lookup(type)), Text( - localization.lookup('auto_bill_help_' + type)!, + localization.lookup('auto_bill_help_' + type), style: Theme.of(context).textTheme.bodySmall, ), ], diff --git a/lib/ui/app/buttons/bottom_buttons.dart b/lib/ui/app/buttons/bottom_buttons.dart index 335e26ab8..f3616758d 100644 --- a/lib/ui/app/buttons/bottom_buttons.dart +++ b/lib/ui/app/buttons/bottom_buttons.dart @@ -59,7 +59,7 @@ class BottomButtons extends StatelessWidget { Icon(getEntityActionIcon(action1)), SizedBox(width: 12), Text( - localization.lookup('$action1')!, + localization.lookup('$action1'), textAlign: TextAlign.center, style: TextStyle( color: textColor.withOpacity( @@ -84,7 +84,7 @@ class BottomButtons extends StatelessWidget { Icon(getEntityActionIcon(action2)), SizedBox(width: 12), Text( - localization.lookup('$action2')!, + localization.lookup('$action2'), textAlign: TextAlign.center, style: TextStyle( color: textColor.withOpacity( diff --git a/lib/ui/app/dialogs/multiselect_dialog.dart b/lib/ui/app/dialogs/multiselect_dialog.dart index afae20f13..805354f4f 100644 --- a/lib/ui/app/dialogs/multiselect_dialog.dart +++ b/lib/ui/app/dialogs/multiselect_dialog.dart @@ -98,9 +98,9 @@ class MultiSelectListState extends State { if (parts.length == 1 || parts[0] == widget.prefix) { return localization!.lookup(parts.last); } else { - return localization!.lookup(parts[0])! + + return localization!.lookup(parts[0])+ ' ' + - localization.lookup(parts[1])!; + localization.lookup(parts[1]); } } diff --git a/lib/ui/app/edit_scaffold.dart b/lib/ui/app/edit_scaffold.dart index ca58229dc..d2f7899d4 100644 --- a/lib/ui/app/edit_scaffold.dart +++ b/lib/ui/app/edit_scaffold.dart @@ -76,7 +76,8 @@ class EditScaffold extends StatelessWidget { if (account.trialDaysLeft <= 1) { upgradeMessage = localization.freeTrialEndsToday; } else { - upgradeMessage = localization.freeTrialEndsInDays.replaceFirst(':count', account.trialDaysLeft.toString()); + upgradeMessage = localization.freeTrialEndsInDays + .replaceFirst(':count', account.trialDaysLeft.toString()); } } @@ -306,9 +307,7 @@ class EditScaffold extends StatelessWidget { .secondary), SizedBox(width: 16.0), Text(AppLocalization.of(context)! - .lookup( - action.toString()) ?? - ''), + .lookup(action.toString())), ], ), ); @@ -451,8 +450,7 @@ class EditScaffold extends StatelessWidget { SizedBox(width: 16.0), Text(AppLocalization.of( context)! - .lookup( - action.toString())!), + .lookup(action.toString())), ], ), value: action, diff --git a/lib/ui/app/entities/entity_actions_dialog.dart b/lib/ui/app/entities/entity_actions_dialog.dart index 887aca51f..c01b60583 100644 --- a/lib/ui/app/entities/entity_actions_dialog.dart +++ b/lib/ui/app/entities/entity_actions_dialog.dart @@ -106,7 +106,7 @@ class EntityActionListTile extends StatelessWidget { return ListTile( leading: Icon(getEntityActionIcon(action)), title: Text( - localization.lookup(action.toString())!, + localization.lookup(action.toString()), overflow: TextOverflow.ellipsis, ), onTap: () { diff --git a/lib/ui/app/entities/entity_status_chip.dart b/lib/ui/app/entities/entity_status_chip.dart index d48a13a13..af45d00d1 100644 --- a/lib/ui/app/entities/entity_status_chip.dart +++ b/lib/ui/app/entities/entity_status_chip.dart @@ -127,7 +127,7 @@ class EntityStatusChip extends StatelessWidget { return SizedBox(); } - label = localization!.lookup(label) ?? ''; + label = localization!.lookup(label); if (label.isEmpty) { label = localization.logged; diff --git a/lib/ui/app/entity_top_filter.dart b/lib/ui/app/entity_top_filter.dart index e49c8004a..9319ce10a 100644 --- a/lib/ui/app/entity_top_filter.dart +++ b/lib/ui/app/entity_top_filter.dart @@ -141,7 +141,7 @@ class EntityTopFilter extends StatelessWidget { child: TextButton( child: Text( localization!.lookup( - '${relatedTypes[i].plural}')!, + '${relatedTypes[i].plural}'), style: TextStyle( color: state.headerTextColor, ), @@ -434,8 +434,7 @@ class EntityTopFilterHeader extends StatelessWidget { .secondary), SizedBox(width: 16.0), Text(AppLocalization.of(context)! - .lookup(action.toString()) ?? - ''), + .lookup(action.toString())), ], ), ); diff --git a/lib/ui/app/forms/notification_settings.dart b/lib/ui/app/forms/notification_settings.dart index 7cc4a01c4..70315068e 100644 --- a/lib/ui/app/forms/notification_settings.dart +++ b/lib/ui/app/forms/notification_settings.dart @@ -134,7 +134,7 @@ class NotificationSettings extends StatelessWidget { return DataRow(cells: [ // workaround for mistake in translations DataCell(Text(eventType == kNotificationsInvoiceSent - ? localization.invoiceSentNotificationLabel: localization.lookup(eventType)!)), + ? localization.invoiceSentNotificationLabel: localization.lookup(eventType))), DataCell(isAllEnabled ? value == NOTIFY_ALL ? IconText( diff --git a/lib/ui/app/history_drawer.dart b/lib/ui/app/history_drawer.dart index ac30819b6..7b0ae1d39 100644 --- a/lib/ui/app/history_drawer.dart +++ b/lib/ui/app/history_drawer.dart @@ -120,20 +120,20 @@ class _HistoryListTileState extends State { EntityType.reports, EntityType.settings, ].contains(history.entityType)) { - title = Text(localization!.lookup(history.entityType.toString())!); + title = Text(localization!.lookup(history.entityType.toString())); if (history.entityType == EntityType.reports) { subtitle = Text( - localization.lookup(state.uiState.reportsUIState.report)!, + localization.lookup(state.uiState.reportsUIState.report), style: Theme.of(context).textTheme.bodySmall, ); } else if (history.entityType == EntityType.settings) { subtitle = Text( - localization.lookup(history.id ?? kSettingsCompanyDetails)!, + localization.lookup(history.id ?? kSettingsCompanyDetails), style: Theme.of(context).textTheme.bodySmall, ); } } else if (history.id == null) { - title = Text(localization!.lookup(history.entityType.plural)!); + title = Text(localization!.lookup(history.entityType.plural)); } else { entity = state.getEntityMap(history.entityType)![history.id] as BaseEntity?; @@ -153,7 +153,7 @@ class _HistoryListTileState extends State { : entity.listDisplayName); subtitle = Text( - localization!.lookup('${history.entityType}')!, + localization!.lookup('${history.entityType}'), style: Theme.of(context).textTheme.bodySmall, ); } diff --git a/lib/ui/app/invoice/invoice_item_view.dart b/lib/ui/app/invoice/invoice_item_view.dart index 3839a9a1a..f3ad8561f 100644 --- a/lib/ui/app/invoice/invoice_item_view.dart +++ b/lib/ui/app/invoice/invoice_item_view.dart @@ -65,7 +65,7 @@ class InvoiceItemListTile extends StatelessWidget { if (company.calculateTaxes) { subtitle += ' • ' + - localization!.lookup(kTaxCategories[invoiceItem!.taxCategoryId])!; + localization!.lookup(kTaxCategories[invoiceItem!.taxCategoryId]); } if (invoiceItem!.taxRate1 != 0) { diff --git a/lib/ui/app/list_filter.dart b/lib/ui/app/list_filter.dart index 374800ebf..587c64280 100644 --- a/lib/ui/app/list_filter.dart +++ b/lib/ui/app/list_filter.dart @@ -79,7 +79,7 @@ class _ListFilterState extends State { return isSingle ? placeholder - : placeholder!.replaceFirst( + : placeholder.replaceFirst( ':count', formatNumber(count.toDouble(), context, formatNumberType: FormatNumberType.int)!); @@ -184,7 +184,7 @@ class _ListFilterState extends State { menuItembuilder: (dynamic value) { final state = value as EntityState; return Text( - localization.lookup(state.name)!, + localization.lookup(state.name), overflow: TextOverflow.clip, maxLines: 1, ); @@ -244,7 +244,7 @@ class _ListFilterState extends State { whenEmpty: localization!.all, menuItembuilder: (dynamic value) { final state = value as EntityStatus; - return Text(localization.lookup(state.name)!); + return Text(localization.lookup(state.name)); }, decoration: InputDecoration( border: OutlineInputBorder(), diff --git a/lib/ui/app/lists/activity_list_tile.dart b/lib/ui/app/lists/activity_list_tile.dart index 91ac3c24c..3c90f481e 100644 --- a/lib/ui/app/lists/activity_list_tile.dart +++ b/lib/ui/app/lists/activity_list_tile.dart @@ -140,7 +140,7 @@ class ActivityListTile extends StatelessWidget { children: [ Flexible( child: Text(((activity.notes).isNotEmpty - ? localization.lookup(activity.notes)!.trim() + '\n' + ? localization.lookup(activity.notes).trim() + '\n' : '') + formatDate( convertTimestampToDateString(activity.createdAt), context, diff --git a/lib/ui/app/system_log_viewer.dart b/lib/ui/app/system_log_viewer.dart index 809af3678..0c3f25f4b 100644 --- a/lib/ui/app/system_log_viewer.dart +++ b/lib/ui/app/system_log_viewer.dart @@ -67,11 +67,11 @@ class _SystemLogViewerState extends State { headerBuilder: (BuildContext context, bool isExpanded) { return ListTile( leading: Icon(getActivityIcon(systemLog.categoryId)), - title: Text(localization!.lookup(systemLog.category)! + + title: Text(localization!.lookup(systemLog.category)+ ' › ' + - localization.lookup(systemLog.type)!), + localization.lookup(systemLog.type)), isThreeLine: true, - subtitle: Text(localization.lookup(systemLog.event)! + + subtitle: Text(localization.lookup(systemLog.event)+ (client.isOld ? ' • ${client.displayName}' : '') + '\n' + formatDate( diff --git a/lib/ui/app/tables/entity_list.dart b/lib/ui/app/tables/entity_list.dart index f5ed2e423..fef25458a 100644 --- a/lib/ui/app/tables/entity_list.dart +++ b/lib/ui/app/tables/entity_list.dart @@ -277,7 +277,7 @@ class _EntityListState extends State { return DataColumn( label: Container( child: Text( - label!, + label, overflow: TextOverflow.ellipsis, ), ), @@ -442,9 +442,7 @@ class _EntityListState extends State { .secondary), SizedBox(width: 16.0), Text(AppLocalization.of(context)! - .lookup( - action.toString()) ?? - ''), + .lookup(action.toString())), ], ), ); diff --git a/lib/ui/client/client_pdf.dart b/lib/ui/client/client_pdf.dart index fb07073a6..cc1ba84f9 100644 --- a/lib/ui/client/client_pdf.dart +++ b/lib/ui/client/client_pdf.dart @@ -268,7 +268,7 @@ class _ClientPdfViewState extends State { .where((value) => value != DateRange.allTime) .map((dateRange) => DropdownMenuItem( child: Text(localization - .lookup(dateRange.toString())!), + .lookup(dateRange.toString())), value: dateRange, )) .toList(), @@ -298,7 +298,7 @@ class _ClientPdfViewState extends State { kStatementStatusUnpaid, ] .map((value) => DropdownMenuItem( - child: Text(localization.lookup(value)!), + child: Text(localization.lookup(value)), value: value, )) .toList()), @@ -321,7 +321,7 @@ class _ClientPdfViewState extends State { selectedValues: state.prefState.statementIncludes.toList(), menuItembuilder: (dynamic option) => Text( - localization.lookup(option)!, + localization.lookup(option), style: TextStyle(fontSize: 14), ), isDense: true, diff --git a/lib/ui/client/client_presenter.dart b/lib/ui/client/client_presenter.dart index d0311510c..32accb251 100644 --- a/lib/ui/client/client_presenter.dart +++ b/lib/ui/client/client_presenter.dart @@ -164,7 +164,7 @@ class ClientPresenter extends EntityPresenter { client!.contacts.map((contact) => contact.fullName).join('\n'); return TableTooltip(message: contacts); case ClientFields.classification: - return Text(localization!.lookup(client!.classification)!); + return Text(localization!.lookup(client!.classification)); } return super.getField(field: field, context: context); diff --git a/lib/ui/client/edit/client_edit_details.dart b/lib/ui/client/edit/client_edit_details.dart index 86d70a9fa..68cd901ca 100644 --- a/lib/ui/client/edit/client_edit_details.dart +++ b/lib/ui/client/edit/client_edit_details.dart @@ -306,7 +306,7 @@ class ClientEditDetailsState extends State { }, items: kTaxClassifications .map((classification) => DropdownMenuItem( - child: Text(localization.lookup(classification)!), + child: Text(localization.lookup(classification)), value: classification, )) .toList(), diff --git a/lib/ui/company_gateway/edit/company_gateway_edit.dart b/lib/ui/company_gateway/edit/company_gateway_edit.dart index 48c75a078..f1c08250d 100644 --- a/lib/ui/company_gateway/edit/company_gateway_edit.dart +++ b/lib/ui/company_gateway/edit/company_gateway_edit.dart @@ -245,7 +245,7 @@ class _CompanyGatewayEditState extends State SettingsEntity.AUTO_BILL_OFF, ] .map((type) => - Text(localization.lookup(type)!)) + Text(localization.lookup(type))) .toList(), onChanged: (dynamic value) => viewModel.onChanged( companyGateway @@ -267,8 +267,7 @@ class _CompanyGatewayEditState extends State SwitchListTile( title: Text(kGatewayTypes.containsKey(gatewayTypeId) ? localization - .lookup(kGatewayTypes[gatewayTypeId] ?? '')! - : '$gatewayTypeId'), + .lookup(kGatewayTypes[gatewayTypeId] ?? ''): '$gatewayTypeId'), activeColor: Theme.of(context).colorScheme.secondary, value: companyGateway .getSettingsForGatewayTypeId(gatewayTypeId) @@ -466,7 +465,7 @@ class _CompanyGatewayEditState extends State items: enabledGatewayIds .map((gatewayTypeId) => DropdownMenuItem( child: Text(localization.lookup( - kGatewayTypes[gatewayTypeId] ?? '')!), + kGatewayTypes[gatewayTypeId] ?? '')), value: gatewayTypeId, )) .toList(), diff --git a/lib/ui/company_gateway/view/company_gateway_view.dart b/lib/ui/company_gateway/view/company_gateway_view.dart index e147ee04b..8160445db 100644 --- a/lib/ui/company_gateway/view/company_gateway_view.dart +++ b/lib/ui/company_gateway/view/company_gateway_view.dart @@ -232,7 +232,7 @@ class _CompanyGatewayOverview extends StatelessWidget { Padding( padding: const EdgeInsets.only(top: 20, left: 20), child: Text( - localization.lookup(kGatewayTypes[entry.key])!, + localization.lookup(kGatewayTypes[entry.key]), style: Theme.of(context).textTheme.titleLarge, ), ), diff --git a/lib/ui/credit/credit_list_item.dart b/lib/ui/credit/credit_list_item.dart index 7d641879b..1a39d366f 100644 --- a/lib/ui/credit/credit_list_item.dart +++ b/lib/ui/credit/credit_list_item.dart @@ -228,7 +228,7 @@ class CreditListItem extends StatelessWidget { ), Text( localization!.lookup( - kCreditStatuses[credit.calculatedStatusId])!, + kCreditStatuses[credit.calculatedStatusId]), style: TextStyle( color: !credit.isSent ? textColor diff --git a/lib/ui/dashboard/dashboard_chart.dart b/lib/ui/dashboard/dashboard_chart.dart index e2871a3ff..9ae39dd8d 100644 --- a/lib/ui/dashboard/dashboard_chart.dart +++ b/lib/ui/dashboard/dashboard_chart.dart @@ -186,7 +186,7 @@ class _DashboardChartState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(localization!.lookup(dataGroup.name)!, + Text(localization!.lookup(dataGroup.name), style: theme.textTheme.titleLarge!.copyWith( color: isSelected ? Colors.white : null, )), diff --git a/lib/ui/dashboard/dashboard_date_range_picker.dart b/lib/ui/dashboard/dashboard_date_range_picker.dart index 95dfe7e6e..6dbb538cc 100644 --- a/lib/ui/dashboard/dashboard_date_range_picker.dart +++ b/lib/ui/dashboard/dashboard_date_range_picker.dart @@ -68,7 +68,7 @@ class _DashboardDateRangePickerState extends State { .where((value) => value != DateRange.allTime) .map((dateRange) => DropdownMenuItem( child: Text(localization - .lookup(dateRange.toString())!), + .lookup(dateRange.toString())), value: dateRange, )) .toList(), @@ -134,7 +134,7 @@ class _DashboardDateRangePickerState extends State { .map((dateRange) => DropdownMenuItem< DateRangeComparison>( child: Text(localization.lookup( - dateRange.toString())!), + dateRange.toString())), value: dateRange, )) .toList(), diff --git a/lib/ui/dashboard/dashboard_panels.dart b/lib/ui/dashboard/dashboard_panels.dart index f62a99529..af70216ba 100644 --- a/lib/ui/dashboard/dashboard_panels.dart +++ b/lib/ui/dashboard/dashboard_panels.dart @@ -164,7 +164,7 @@ class DashboardPanels extends StatelessWidget { .map((dateRange) => PopupMenuItem( child: Text(dateRange == DateRange.custom ? '${localization.more}...' - : localization.lookup(dateRange.toString())!), + : localization.lookup(dateRange.toString())), value: dateRange, )) .toList(), @@ -634,7 +634,7 @@ class DashboardPanels extends StatelessWidget { padding: const EdgeInsets.all(0), children: [ Text( - localization!.lookup(dashboardField.field)!, + localization!.lookup(dashboardField.field), style: textTheme.titleMedium, textAlign: TextAlign.center), SizedBox(height: 6), @@ -649,7 +649,7 @@ class DashboardPanels extends StatelessWidget { textAlign: TextAlign.center), SizedBox(height: 6), Text( - localization.lookup(dashboardField.period)!, + localization.lookup(dashboardField.period), style: textTheme.bodySmall, textAlign: TextAlign.center), ], @@ -1192,9 +1192,9 @@ class __DashboardSettingsState extends State<_DashboardSettings> { ListTile( key: ValueKey( '__${dashboardField.field}_${dashboardField.period}_'), - title: Text(localization.lookup(dashboardField.field)!), + title: Text(localization.lookup(dashboardField.field)), subtitle: - Text(localization.lookup(dashboardField.period)!), + Text(localization.lookup(dashboardField.period)), leading: IconButton( icon: Icon(Icons.close), onPressed: () { @@ -1297,7 +1297,7 @@ class _DashboardFieldState extends State<_DashboardField> { fields.forEach((field) { if (company.isModuleEnabled(entityType)) { items.add(DropdownMenuItem( - child: Text(localization.lookup(field)!), + child: Text(localization.lookup(field)), value: field, )); } diff --git a/lib/ui/dashboard/dashboard_screen.dart b/lib/ui/dashboard/dashboard_screen.dart index f93aaece0..5e2563cb6 100644 --- a/lib/ui/dashboard/dashboard_screen.dart +++ b/lib/ui/dashboard/dashboard_screen.dart @@ -418,7 +418,7 @@ class _CustomTabBarView extends StatelessWidget { trailing: Icon(Icons.navigate_next), subtitle: Text(subtitle != null ? subtitle - : localization!.lookup('${entity.entityType}')!), + : localization!.lookup('${entity.entityType}')), onTap: () => viewEntity(entity: entity), ); }); diff --git a/lib/ui/expense/edit/expense_edit_details.dart b/lib/ui/expense/edit/expense_edit_details.dart index 7cf63d03a..1e96550e2 100644 --- a/lib/ui/expense/edit/expense_edit_details.dart +++ b/lib/ui/expense/edit/expense_edit_details.dart @@ -357,7 +357,7 @@ class ExpenseEditDetailsState extends State { items: kFrequencies.entries .map((entry) => DropdownMenuItem( value: entry.key, - child: Text(localization.lookup(entry.value)!), + child: Text(localization.lookup(entry.value)), )) .toList()), DatePicker( diff --git a/lib/ui/expense/expense_list_item.dart b/lib/ui/expense/expense_list_item.dart index e54f0d61e..e4f44e8bf 100644 --- a/lib/ui/expense/expense_list_item.dart +++ b/lib/ui/expense/expense_list_item.dart @@ -247,7 +247,7 @@ class ExpenseListItem extends StatelessWidget { ), Text( localization!.lookup( - kExpenseStatuses[expense.calculatedStatusId])!, + kExpenseStatuses[expense.calculatedStatusId]), style: TextStyle( color: category.color.isNotEmpty && category.color != '#fff' diff --git a/lib/ui/invoice/edit/invoice_edit_desktop.dart b/lib/ui/invoice/edit/invoice_edit_desktop.dart index 03e30d542..404bd6744 100644 --- a/lib/ui/invoice/edit/invoice_edit_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_desktop.dart @@ -371,7 +371,7 @@ class InvoiceEditDesktopState extends State .map((entry) => DropdownMenuItem( value: entry.key, child: Text(localization - .lookup(entry.value)!), + .lookup(entry.value)), )) .toList()), DatePicker( @@ -568,7 +568,7 @@ class InvoiceEditDesktopState extends State SettingsEntity.AUTO_BILL_OFF, ] .map((type) => - Text(localization.lookup(type)!)) + Text(localization.lookup(type))) .toList(), onChanged: (dynamic value) => viewModel .onChanged!( diff --git a/lib/ui/invoice/edit/invoice_edit_details.dart b/lib/ui/invoice/edit/invoice_edit_details.dart index 79cf9365f..ba6d8aac2 100644 --- a/lib/ui/invoice/edit/invoice_edit_details.dart +++ b/lib/ui/invoice/edit/invoice_edit_details.dart @@ -219,7 +219,7 @@ class InvoiceEditDetailsState extends State { items: kFrequencies.entries .map((entry) => DropdownMenuItem( value: entry.key, - child: Text(localization.lookup(entry.value)!), + child: Text(localization.lookup(entry.value)), )) .toList()), DatePicker( @@ -357,7 +357,7 @@ class InvoiceEditDetailsState extends State { SettingsEntity.AUTO_BILL_OPT_IN, SettingsEntity.AUTO_BILL_OFF, ] - .map((type) => Text(localization.lookup(type)!)) + .map((type) => Text(localization.lookup(type))) .toList(), onChanged: (dynamic value) => viewModel .onChanged!(invoice.rebuild((b) => b..autoBill = value)), diff --git a/lib/ui/invoice/edit/invoice_edit_items.dart b/lib/ui/invoice/edit/invoice_edit_items.dart index c7806ea20..e33f8163d 100644 --- a/lib/ui/invoice/edit/invoice_edit_items.dart +++ b/lib/ui/invoice/edit/invoice_edit_items.dart @@ -334,7 +334,7 @@ class ItemEditDetailsState extends State { .map((key) => DropdownMenuItem( child: Text(localization.lookup( kTaxCategories[key], - )!), + )), value: key, )) .toList()), diff --git a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart index a89ea3431..1860d9588 100644 --- a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart @@ -471,7 +471,7 @@ class _InvoiceEditItemsDesktopState extends State { return Text(item.taxName3); } else if (column == COLUMN_TAX_CATEGORY) { return Text(localization - .lookup(kTaxCategories[item.taxCategoryId])!); + .lookup(kTaxCategories[item.taxCategoryId])); } else if (column == COLUMN_UNIT_COST) { return Text( formatNumber( @@ -966,7 +966,7 @@ class _InvoiceEditItemsDesktopState extends State { .map((key) => DropdownMenuItem( child: Text(localization.lookup( kTaxCategories[key], - )!), + )), value: key, )) .toList()), diff --git a/lib/ui/invoice/invoice_list_item.dart b/lib/ui/invoice/invoice_list_item.dart index b1eabedf5..74f4cf109 100644 --- a/lib/ui/invoice/invoice_list_item.dart +++ b/lib/ui/invoice/invoice_list_item.dart @@ -252,7 +252,7 @@ class InvoiceListItem extends StatelessWidget { overflow: TextOverflow.ellipsis, ), ), - Text(statusLabel!, + Text(statusLabel, style: TextStyle( color: !invoice.isSent ? textColor : statusColor, diff --git a/lib/ui/invoice/invoice_pdf.dart b/lib/ui/invoice/invoice_pdf.dart index 673914a55..cc83471e5 100644 --- a/lib/ui/invoice/invoice_pdf.dart +++ b/lib/ui/invoice/invoice_pdf.dart @@ -259,7 +259,7 @@ class _InvoicePdfViewState extends State { Uri.parse(invoice.invitationDownloadLink)); } else { final fileName = localization - .lookup('${invoice.entityType}')! + + .lookup('${invoice.entityType}')+ '_' + (invoice.number.isEmpty ? localization.pending @@ -322,7 +322,7 @@ class _InvoicePdfViewState extends State { canDebug: false, maxPageWidth: 800, pdfFileName: - localization.lookup(invoice.entityType!.snakeCase)! + + localization.lookup(invoice.entityType!.snakeCase)+ '_' + invoice.number + '.pdf', diff --git a/lib/ui/invoice/invoice_presenter.dart b/lib/ui/invoice/invoice_presenter.dart index d0d0b9992..4cfa72a03 100644 --- a/lib/ui/invoice/invoice_presenter.dart +++ b/lib/ui/invoice/invoice_presenter.dart @@ -155,7 +155,7 @@ class InvoicePresenter extends EntityPresenter { return Text(invoice.isViewed ? localization!.yes : localization!.no); case InvoiceFields.autoBillEnabled: return Text(localization!.lookup( - invoice.autoBillEnabled ? localization.yes : localization.no)!); + invoice.autoBillEnabled ? localization.yes : localization.no)); case InvoiceFields.clientState: return Text(client.state); case InvoiceFields.clientCity: diff --git a/lib/ui/invoice/view/invoice_view_overview.dart b/lib/ui/invoice/view/invoice_view_overview.dart index 170c8b58e..3eb508b51 100644 --- a/lib/ui/invoice/view/invoice_view_overview.dart +++ b/lib/ui/invoice/view/invoice_view_overview.dart @@ -190,7 +190,7 @@ class InvoiceOverview extends StatelessWidget { ? localization.endless : '${invoice.remainingCycles}', RecurringInvoiceFields.autoBill: - localization.lookup(invoice.autoBill)! + + localization.lookup(invoice.autoBill)+ ([ SettingsEntity.AUTO_BILL_OPT_IN, SettingsEntity.AUTO_BILL_OPT_OUT diff --git a/lib/ui/payment/payment_list_item.dart b/lib/ui/payment/payment_list_item.dart index 2c25fe9b5..f0e177f2a 100644 --- a/lib/ui/payment/payment_list_item.dart +++ b/lib/ui/payment/payment_list_item.dart @@ -214,7 +214,7 @@ class PaymentListItem extends StatelessWidget { ), Text( localization!.lookup( - 'payment_status_${payment.calculatedStatusId}')!, + 'payment_status_${payment.calculatedStatusId}'), style: TextStyle( color: PaymentStatusColors( state.prefState.colorThemeModel) diff --git a/lib/ui/payment/payment_presenter.dart b/lib/ui/payment/payment_presenter.dart index 6e7cd98c7..889e5250f 100644 --- a/lib/ui/payment/payment_presenter.dart +++ b/lib/ui/payment/payment_presenter.dart @@ -126,7 +126,7 @@ class PaymentPresenter extends EntityPresenter { return Text(companyGateway.label); case PaymentFields.gatewayType: return Text( - localization!.lookup(kGatewayTypes[payment!.gatewayTypeId])!); + localization!.lookup(kGatewayTypes[payment!.gatewayTypeId])); } return super.getField(field: field, context: context); diff --git a/lib/ui/product/edit/product_edit.dart b/lib/ui/product/edit/product_edit.dart index 3f0dc8037..2c16ec6a4 100644 --- a/lib/ui/product/edit/product_edit.dart +++ b/lib/ui/product/edit/product_edit.dart @@ -229,7 +229,7 @@ class _ProductEditState extends State { items: kTaxCategories.keys .map((key) => DropdownMenuItem( child: Text( - localization.lookup(kTaxCategories[key])!), + localization.lookup(kTaxCategories[key])), value: key, )) .toList()), diff --git a/lib/ui/product/product_presenter.dart b/lib/ui/product/product_presenter.dart index 1295d5306..bae10e1cb 100644 --- a/lib/ui/product/product_presenter.dart +++ b/lib/ui/product/product_presenter.dart @@ -107,7 +107,7 @@ class ProductPresenter extends EntityPresenter { formatNumberType: FormatNumberType.int)!); case ProductFields.taxCategory: return Text( - localization!.lookup(kTaxCategories[product!.taxCategoryId])!); + localization!.lookup(kTaxCategories[product!.taxCategoryId])); case ProductFields.notificationThreshold: final store = StoreProvider.of(context); return Text(formatNumber( diff --git a/lib/ui/purchase_order/purchase_order_list_item.dart b/lib/ui/purchase_order/purchase_order_list_item.dart index 6a6f96a57..1127b7c44 100644 --- a/lib/ui/purchase_order/purchase_order_list_item.dart +++ b/lib/ui/purchase_order/purchase_order_list_item.dart @@ -234,7 +234,7 @@ class PurchaseOrderListItem extends StatelessWidget { ), Text( localization!.lookup(kPurchaseOrderStatuses[ - purchaseOrder.calculatedStatusId])!, + purchaseOrder.calculatedStatusId]), style: TextStyle( color: !purchaseOrder.isSent ? textColor diff --git a/lib/ui/quote/quote_list_item.dart b/lib/ui/quote/quote_list_item.dart index 061a856e1..97a6435ee 100644 --- a/lib/ui/quote/quote_list_item.dart +++ b/lib/ui/quote/quote_list_item.dart @@ -227,7 +227,7 @@ class QuoteListItem extends StatelessWidget { ), Text( localization!.lookup( - kQuoteStatuses[quote.calculatedStatusId])!, + kQuoteStatuses[quote.calculatedStatusId]), style: TextStyle( color: !quote.isSent ? textColor diff --git a/lib/ui/recurring_expense/recurring_expense_presenter.dart b/lib/ui/recurring_expense/recurring_expense_presenter.dart index 7d3795755..07b7e1747 100644 --- a/lib/ui/recurring_expense/recurring_expense_presenter.dart +++ b/lib/ui/recurring_expense/recurring_expense_presenter.dart @@ -151,7 +151,7 @@ class RecurringExpensePresenter extends EntityPresenter { case RecurringExpenseFields.remainingCycles: return Text('${expense!.remainingCycles}'); case RecurringExpenseFields.frequency: - return Text(localization!.lookup(kFrequencies[expense!.frequencyId])!); + return Text(localization!.lookup(kFrequencies[expense!.frequencyId])); } return super.getField(field: field, context: context); diff --git a/lib/ui/recurring_invoice/recurring_invoice_list_item.dart b/lib/ui/recurring_invoice/recurring_invoice_list_item.dart index 351f84067..d79c17e3a 100644 --- a/lib/ui/recurring_invoice/recurring_invoice_list_item.dart +++ b/lib/ui/recurring_invoice/recurring_invoice_list_item.dart @@ -60,7 +60,7 @@ class RecurringInvoiceListItem extends StatelessWidget { if (subtitle.isNotEmpty) { subtitle += ' • '; } - subtitle += localization.lookup(kFrequencies[invoice.frequencyId])!; + subtitle += localization.lookup(kFrequencies[invoice.frequencyId]); return DismissibleEntity( isSelected: isDesktop(context) && @@ -235,7 +235,7 @@ class RecurringInvoiceListItem extends StatelessWidget { overflow: TextOverflow.ellipsis, ), ), - Text(statusLabel!, + Text(statusLabel, style: TextStyle( color: !invoice.isSent ? textColor : statusColor, diff --git a/lib/ui/recurring_invoice/recurring_invoice_presenter.dart b/lib/ui/recurring_invoice/recurring_invoice_presenter.dart index 287f70f48..af37d9218 100644 --- a/lib/ui/recurring_invoice/recurring_invoice_presenter.dart +++ b/lib/ui/recurring_invoice/recurring_invoice_presenter.dart @@ -118,7 +118,7 @@ class RecurringInvoicePresenter extends EntityPresenter { showTime: true, showSeconds: false) : formatDate(invoice.nextSendDate, context)); case RecurringInvoiceFields.frequency: - return Text(localization!.lookup(kFrequencies[invoice.frequencyId])!); + return Text(localization!.lookup(kFrequencies[invoice.frequencyId])); case RecurringInvoiceFields.dueDateDays: return Text(invoice.dueDateDays == 'terms' ? localization!.paymentTerm @@ -130,7 +130,7 @@ class RecurringInvoicePresenter extends EntityPresenter { : localization!.dayCount .replaceFirst(':count', '${invoice.dueDateDays}')); case RecurringInvoiceFields.autoBill: - return Text(localization!.lookup(invoice.autoBill)!); + return Text(localization!.lookup(invoice.autoBill)); } return super.getField(field: field, context: context); diff --git a/lib/ui/reports/reports_screen.dart b/lib/ui/reports/reports_screen.dart index bd7ecbaf3..44d193960 100644 --- a/lib/ui/reports/reports_screen.dart +++ b/lib/ui/reports/reports_screen.dart @@ -141,7 +141,7 @@ class ReportsScreen extends StatelessWidget { items: reports .map((report) => DropdownMenuItem( value: report, - child: Text(localization.lookup(report)!), + child: Text(localization.lookup(report)), )) .toList(), ), @@ -160,8 +160,7 @@ class ReportsScreen extends StatelessWidget { final columnTitle = state.company.getCustomFieldLabel(column); return DropdownMenuItem( child: Text(columnTitle.isEmpty - ? localization.lookup(column)! - : columnTitle), + ? localization.lookup(column): columnTitle), value: column, ); }).toList(), @@ -246,7 +245,7 @@ class ReportsScreen extends StatelessWidget { .map((column) => DropdownMenuItem( value: column, child: Text( - localization.lookup(column)!, + localization.lookup(column), ), )) .toList()), @@ -269,7 +268,7 @@ class ReportsScreen extends StatelessWidget { items: DateRange.values .where((value) => value != DateRange.allTime) .map((dateRange) => DropdownMenuItem( - child: Text(localization.lookup(dateRange.toString())!), + child: Text(localization.lookup(dateRange.toString())), value: dateRange, )) .toList(), @@ -314,7 +313,7 @@ class ReportsScreen extends StatelessWidget { ReportColumnType.duration, ].contains(getReportColumnType(column, context))) .map((column) => DropdownMenuItem( - child: Text(localization.lookup(column)!), + child: Text(localization.lookup(column)), value: column, )) .toList(), @@ -396,7 +395,7 @@ class ReportsScreen extends StatelessWidget { : reportResult.entities!; confirmCallback( context: context, - message: localization.lookup(action.toString())! + + message: localization.lookup(action.toString())+ ' • ' + (entities.length == 1 ? '1 ${localization.lookup(firstEntity!.entityType.toString())}' @@ -949,7 +948,7 @@ class ReportResult { } final localization = AppLocalization.of(navigatorKey.currentContext!)!; - if (localization.lookup(value)!.toLowerCase().contains(filter)) { + if (localization.lookup(value).toLowerCase().contains(filter)) { return true; } @@ -1054,7 +1053,7 @@ class ReportResult { Text( (company.getCustomFieldLabel(column!).isNotEmpty ? company.getCustomFieldLabel(column) - : localization!.lookup(column))! + + : localization!.lookup(column))+ ' ', maxLines: 1, overflow: TextOverflow.ellipsis, @@ -1136,7 +1135,7 @@ class ReportResult { }, items: kAgeGroups.keys .map((ageGroup) => DropdownMenuItem( - child: Text(localization!.lookup(ageGroup)!), + child: Text(localization!.lookup(ageGroup)), value: ageGroup, )) .toList(), @@ -1186,7 +1185,7 @@ class ReportResult { items: DateRange.values .where((value) => value != DateRange.allTime) .map((dateRange) => DropdownMenuItem( - child: Text(localization!.lookup(dateRange.toString())!), + child: Text(localization!.lookup(dateRange.toString())), value: dateRange, )) .toList(), @@ -1370,7 +1369,7 @@ class ReportResult { } else { value = group == 'null' ? localization!.blank : group; } - value = value! + ' (' + values!['count']!.floor().toString() + ')'; + value = value+ ' (' + values!['count']!.floor().toString() + ')'; } else if (columnType == ReportColumnType.number) { final currencyId = values!['${column}_currency_id']; value = formatNumber(values[column], context, @@ -1465,8 +1464,7 @@ class ReportResult { mt.DataColumn( label: Text( company.getCustomFieldLabel(column!).isEmpty - ? localization.lookup(column)! - : company.getCustomFieldLabel(column), + ? localization.lookup(column): company.getCustomFieldLabel(column), overflow: TextOverflow.ellipsis, ), numeric: true, diff --git a/lib/ui/reports/reports_screen_vm.dart b/lib/ui/reports/reports_screen_vm.dart index 1e8eac15d..0882a90c4 100644 --- a/lib/ui/reports/reports_screen_vm.dart +++ b/lib/ui/reports/reports_screen_vm.dart @@ -474,12 +474,12 @@ class ReportsScreenVM { columns .sort((String? str1, String? str2) => str1!.compareTo(str2!)); - csvData += localization!.lookup(reportState.group)! + + csvData += localization!.lookup(reportState.group)+ ',' + localization.count; columns.forEach((column) { - csvData += ',' + localization.lookup(column)!; + csvData += ',' + localization.lookup(column); }); csvData += '\n'; diff --git a/lib/ui/schedule/edit/schedule_edit.dart b/lib/ui/schedule/edit/schedule_edit.dart index 47671b37b..bbb1b20e1 100644 --- a/lib/ui/schedule/edit/schedule_edit.dart +++ b/lib/ui/schedule/edit/schedule_edit.dart @@ -164,7 +164,7 @@ class _ScheduleEditState extends State { items: ScheduleEntity.TEMPLATES .map((entry) => DropdownMenuItem( value: entry, - child: Text(localization.lookup(entry)!), + child: Text(localization.lookup(entry)), )) .toList()), DatePicker( @@ -203,7 +203,7 @@ class _ScheduleEditState extends State { .map((entry) => DropdownMenuItem( value: entry.key, child: - Text(localization.lookup(entry.value)!), + Text(localization.lookup(entry.value)), )) .toList()), if (schedule.frequencyId.isNotEmpty) @@ -249,7 +249,7 @@ class _ScheduleEditState extends State { .where((value) => value != DateRange.custom) .map((dateRange) => DropdownMenuItem( child: Text( - localization.lookup(dateRange.toString())!), + localization.lookup(dateRange.toString())), value: dateRange, )) .toList(), @@ -268,7 +268,7 @@ class _ScheduleEditState extends State { kStatementStatusUnpaid, ] .map((value) => DropdownMenuItem( - child: Text(localization.lookup(value)!), + child: Text(localization.lookup(value)), value: value, )) .toList(), @@ -357,7 +357,7 @@ class _ScheduleEditState extends State { .map((entityType) => DropdownMenuItem( value: entityType.apiValue, child: Text( - localization.lookup(entityType.apiValue)!, + localization.lookup(entityType.apiValue), ), )) .toList()), diff --git a/lib/ui/schedule/schedule_list_item.dart b/lib/ui/schedule/schedule_list_item.dart index 7b8d6f4d1..965213275 100644 --- a/lib/ui/schedule/schedule_list_item.dart +++ b/lib/ui/schedule/schedule_list_item.dart @@ -43,7 +43,7 @@ class ScheduleListItem extends StatelessWidget { String subtitle = formatDate(schedule.nextRun, context); - String title = localization.lookup(schedule.template) ?? ''; + String title = localization.lookup(schedule.template); if (schedule.template == ScheduleEntity.TEMPLATE_EMAIL_RECORD) { final entityType = EntityType.valueOf(schedule.parameters.entityType!); final entity = @@ -60,7 +60,7 @@ class ScheduleListItem extends StatelessWidget { } subtitle += ' • ' + - localization.lookup(schedule.parameters.entityType)! + + localization.lookup(schedule.parameters.entityType) + ' ' + (entity?.listDisplayName ?? ''); } else if (schedule.template == ScheduleEntity.TEMPLATE_EMAIL_STATEMENT) { @@ -74,7 +74,7 @@ class ScheduleListItem extends StatelessWidget { ': ${schedule.parameters.clients!.length} ${localization.clients}'; } subtitle += - ' • ' + localization.lookup(kFrequencies[schedule.frequencyId])!; + ' • ' + localization.lookup(kFrequencies[schedule.frequencyId]); } return DismissibleEntity( diff --git a/lib/ui/settings/account_management.dart b/lib/ui/settings/account_management.dart index 0099e5e2b..6bebfe121 100644 --- a/lib/ui/settings/account_management.dart +++ b/lib/ui/settings/account_management.dart @@ -205,7 +205,7 @@ class _AccountManagementState extends State children: kModules.keys.map((module) { return CheckboxListTile( controlAffinity: ListTileControlAffinity.leading, - title: Text(localization.lookup(kModules[module])!), + title: Text(localization.lookup(kModules[module])), value: company.enabledModules & module != 0, activeColor: Theme.of(context).colorScheme.secondary, onChanged: (value) { diff --git a/lib/ui/settings/client_portal.dart b/lib/ui/settings/client_portal.dart index 389bbdf5e..2763e3f76 100644 --- a/lib/ui/settings/client_portal.dart +++ b/lib/ui/settings/client_portal.dart @@ -559,7 +559,7 @@ class _ClientPortalState extends State return Row( children: [ Expanded( - child: Text(localization.lookup(field.key)!), + child: Text(localization.lookup(field.key)), ), Expanded( child: AppDropdownButton( diff --git a/lib/ui/settings/company_details.dart b/lib/ui/settings/company_details.dart index 95df97ead..93f8d0964 100644 --- a/lib/ui/settings/company_details.dart +++ b/lib/ui/settings/company_details.dart @@ -393,7 +393,7 @@ class _CompanyDetailsState extends State }, items: kTaxClassifications .map((classification) => DropdownMenuItem( - child: Text(localization.lookup(classification)!), + child: Text(localization.lookup(classification)), value: classification, )) .toList(), diff --git a/lib/ui/settings/generated_numbers.dart b/lib/ui/settings/generated_numbers.dart index c1d82af6f..0cd6e69ea 100644 --- a/lib/ui/settings/generated_numbers.dart +++ b/lib/ui/settings/generated_numbers.dart @@ -302,7 +302,7 @@ class _GeneratedNumbersState extends State id, DropdownMenuItem( child: - Text(localization.lookup(frequency)!), + Text(localization.lookup(frequency)), value: id, ))) .values diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart index 3d2e475fb..a609a63aa 100644 --- a/lib/ui/settings/import_export.dart +++ b/lib/ui/settings/import_export.dart @@ -221,7 +221,7 @@ class _ImportExportState extends State { .map((importType) => DropdownMenuItem( value: importType, child: Text( - localization.lookup('$importType')!))) + localization.lookup('$importType')))) .toList()), ), ), @@ -237,7 +237,7 @@ class _ImportExportState extends State { items: ExportType.values .map((importType) => DropdownMenuItem( value: importType, - child: Text(localization.lookup('$importType')!))) + child: Text(localization.lookup('$importType')))) .toList(), ), if (DATE_FIELDS.containsKey(_exportType)) ...[ @@ -254,7 +254,7 @@ class _ImportExportState extends State { .map((dateField) => DropdownMenuItem( value: dateField, child: - Text(localization.lookup('$dateField')!))) + Text(localization.lookup('$dateField')))) .toList(), ), if (_exportDate.isNotEmpty) @@ -278,7 +278,7 @@ class _ImportExportState extends State { } return DropdownMenuItem( value: dateRange, - child: Text(label!), + child: Text(label), ); }, ).toList(), @@ -494,7 +494,7 @@ class _FileImportState extends State<_FileImport> { ] .map((importType) => DropdownMenuItem( value: importType, - child: Text(localization.lookup('$importType')!))) + child: Text(localization.lookup('$importType')))) .toList()), ), ) @@ -666,7 +666,7 @@ class __FileMapperState extends State<_FileMapper> { children.addAll([ SizedBox(height: 25), Text( - localization!.lookup(entry.key)!, + localization!.lookup(entry.key), style: Theme.of(context).textTheme.titleMedium, overflow: TextOverflow.clip, maxLines: 1, @@ -845,13 +845,11 @@ class _FieldMapper extends StatelessWidget { final partsB = fieldB.split('.'); if (partsA[0] == partsB[0]) { return localization! - .lookup(partsA[1])! - .compareTo(localization.lookup(partsB[1])!); + .lookup(partsA[1]).compareTo(localization.lookup(partsB[1])); } return localization! - .lookup(partsA[0])! - .compareTo(localization.lookup(partsB[0])!); + .lookup(partsA[0]).compareTo(localization.lookup(partsB[0])); }); return Row( diff --git a/lib/ui/settings/invoice_design.dart b/lib/ui/settings/invoice_design.dart index 9dd08d537..b4699c929 100644 --- a/lib/ui/settings/invoice_design.dart +++ b/lib/ui/settings/invoice_design.dart @@ -426,7 +426,7 @@ class _InvoiceDesignState extends State .map((pageLayout) => DropdownMenuItem( value: pageLayout, child: - Text(localization.lookup(pageLayout)!), + Text(localization.lookup(pageLayout)), )) .toList(), ), @@ -439,7 +439,7 @@ class _InvoiceDesignState extends State items: kPageSizes .map((pageSize) => DropdownMenuItem( value: pageSize, - child: Text(localization.lookup(pageSize)!), + child: Text(localization.lookup(pageSize)), )) .toList(), ), diff --git a/lib/ui/settings/localization_settings.dart b/lib/ui/settings/localization_settings.dart index 1af95660a..46bb30a6f 100644 --- a/lib/ui/settings/localization_settings.dart +++ b/lib/ui/settings/localization_settings.dart @@ -113,7 +113,7 @@ class _LocalizationSettingsState extends State final customLabels = kCustomLabels.where((key) => !translations.keys.contains(key)).toList(); customLabels.sort( - (a, b) => localization.lookup(a)!.compareTo(localization.lookup(b)!)); + (a, b) => localization.lookup(a).compareTo(localization.lookup(b))); return EditScaffold( title: localization.localization, @@ -257,7 +257,7 @@ class _LocalizationSettingsState extends State MapEntry>( id, DropdownMenuItem( - child: Text(localization.lookup(month)!), + child: Text(localization.lookup(month)), value: id, ))) .values @@ -280,7 +280,7 @@ class _LocalizationSettingsState extends State child: DropdownButton( items: customLabels .map((key) => DropdownMenuItem( - child: Text(localization.lookup(key)!), + child: Text(localization.lookup(key)), value: key, )) .toList(), @@ -348,7 +348,7 @@ class _LocalizationSettingsState extends State child: Text( key!.startsWith('country_') ? key.split('_')[1] - : localization.lookup(key)!, + : localization.lookup(key), maxLines: 1, overflow: TextOverflow.ellipsis, )), diff --git a/lib/ui/settings/payment_settings.dart b/lib/ui/settings/payment_settings.dart index 4f0748d00..f0aaf137b 100644 --- a/lib/ui/settings/payment_settings.dart +++ b/lib/ui/settings/payment_settings.dart @@ -133,7 +133,7 @@ class _PaymentSettingsState extends State { SettingsEntity.AUTO_BILL_OPT_IN, SettingsEntity.AUTO_BILL_OFF, ] - .map((type) => Text(localization.lookup(type)!)) + .map((type) => Text(localization.lookup(type))) .toList(), items: [ SettingsEntity.AUTO_BILL_ALWAYS, diff --git a/lib/ui/settings/settings_list.dart b/lib/ui/settings/settings_list.dart index abf81c6a7..244e09dde 100644 --- a/lib/ui/settings/settings_list.dart +++ b/lib/ui/settings/settings_list.dart @@ -310,7 +310,7 @@ class _SettingsListTileState extends State { child: Icon(icon ?? icon, size: 22), ), title: Text( - localization.lookup(widget.section)!, + localization.lookup(widget.section), style: Theme.of(context).textTheme.bodyLarge!.copyWith(fontSize: 14), ), @@ -331,7 +331,7 @@ class SettingsSearch extends StatelessWidget { @override Widget build(BuildContext context) { - final localization = AppLocalization.of(context); + final localization = AppLocalization.of(context)!; final store = StoreProvider.of(context); final company = store.state.company; @@ -417,7 +417,7 @@ class SettingsSearch extends StatelessWidget { 'online_payment_email', 'manual_payment_email', 'use_available_credits', - 'enable_applying_payments_later#2022-06-06', + 'admin_initiated_payments#2022-06-06', 'allow_over_payment', 'allow_under_payment', 'auto_bill_standard_invoices#2023-01-17', @@ -696,8 +696,8 @@ class SettingsSearch extends StatelessWidget { for (var parts in sections.map((section) => section.split('#').toList())) if ((filter ?? '').trim().isEmpty || - localization! - .lookup(parts[1])! + localization + .lookup(parts[1]) .toLowerCase() .contains(filter!.toLowerCase())) ListTile( @@ -708,9 +708,9 @@ class SettingsSearch extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(localization!.lookup(parts[1])!), + Text(localization.lookup(parts[1])), Text( - localization.lookup(parts[2])!, + localization.lookup(parts[2]), style: Theme.of(context).textTheme.bodySmall, ), ], @@ -739,17 +739,17 @@ class SettingsSearch extends StatelessWidget { for (var section in map.keys) for (int i = 0; i < map[section]!.length; i++) for (var field in map[section]![i]) - if (localization! - .lookup(field.split('#')[0])! + if (localization + .lookup(field.split('#')[0]) .toLowerCase() .contains(filter!.toLowerCase())) ListTile( - title: Text(localization.lookup(field.split('#')[0])!), + title: Text(localization.lookup(field.split('#')[0])), leading: Padding( padding: const EdgeInsets.only(left: 6, top: 10), child: Icon(getSettingIcon(section), size: 22), ), - subtitle: Text(localization.lookup(section)!), + subtitle: Text(localization.lookup(section)), onTap: () => viewModel!.loadSection(context, section, i), ), ], diff --git a/lib/ui/settings/task_settings.dart b/lib/ui/settings/task_settings.dart index 138b8e40d..f5bbb7210 100644 --- a/lib/ui/settings/task_settings.dart +++ b/lib/ui/settings/task_settings.dart @@ -274,7 +274,7 @@ class _TaskSettingsState extends State { SettingsEntity.PORTAL_TASKS_ALL, ] .map((value) => DropdownMenuItem( - child: Text(localization.lookup(value)!), + child: Text(localization.lookup(value)), value: value, )) .toList(), diff --git a/lib/ui/settings/templates_and_reminders.dart b/lib/ui/settings/templates_and_reminders.dart index 837e84cbf..b0a8d841e 100644 --- a/lib/ui/settings/templates_and_reminders.dart +++ b/lib/ui/settings/templates_and_reminders.dart @@ -397,7 +397,7 @@ class _TemplatesAndRemindersState extends State } return DropdownMenuItem( - child: Text(name!), + child: Text(name), value: item, ); }).toList(), @@ -509,7 +509,7 @@ class _TemplatesAndRemindersState extends State id, DropdownMenuItem( child: - Text(localization.lookup(frequency)!), + Text(localization.lookup(frequency)), value: id, ))) .values diff --git a/lib/ui/settings/workflow_settings.dart b/lib/ui/settings/workflow_settings.dart index 783209139..cec00a883 100644 --- a/lib/ui/settings/workflow_settings.dart +++ b/lib/ui/settings/workflow_settings.dart @@ -146,7 +146,7 @@ class _WorkflowSettingsState extends State SettingsEntity.LOCK_INVOICES_PAID, ] .map((option) => DropdownMenuItem( - child: Text(localization.lookup(option)!), + child: Text(localization.lookup(option)), value: option, )) .toList(), diff --git a/lib/ui/subscription/edit/subscription_edit.dart b/lib/ui/subscription/edit/subscription_edit.dart index 86e71d1e4..4d97d8166 100644 --- a/lib/ui/subscription/edit/subscription_edit.dart +++ b/lib/ui/subscription/edit/subscription_edit.dart @@ -446,7 +446,7 @@ class _SubscriptionEditState extends State items: kFrequencies.entries .map((entry) => DropdownMenuItem( value: entry.key, - child: Text(localization.lookup(entry.value)!), + child: Text(localization.lookup(entry.value)), )) .toList()), AppDropdownButton( @@ -461,7 +461,7 @@ class _SubscriptionEditState extends State SettingsEntity.AUTO_BILL_OPT_OUT, SettingsEntity.AUTO_BILL_OPT_IN, SettingsEntity.AUTO_BILL_OFF, - ].map((type) => Text(localization.lookup(type)!)).toList(), + ].map((type) => Text(localization.lookup(type))).toList(), items: [ SettingsEntity.AUTO_BILL_ALWAYS, SettingsEntity.AUTO_BILL_OPT_OUT, diff --git a/lib/ui/task/kanban/kanban_card.dart b/lib/ui/task/kanban/kanban_card.dart index d36a2aed7..da60cf718 100644 --- a/lib/ui/task/kanban/kanban_card.dart +++ b/lib/ui/task/kanban/kanban_card.dart @@ -298,7 +298,7 @@ class _KanbanTaskCardState extends State { ] .map((value) => PopupMenuItem( child: - Text(localization.lookup(value)!), + Text(localization.lookup(value)), value: value, )) .toList(); diff --git a/lib/ui/transaction/transaction_list_item.dart b/lib/ui/transaction/transaction_list_item.dart index 4fb6f72b1..c3c552f05 100644 --- a/lib/ui/transaction/transaction_list_item.dart +++ b/lib/ui/transaction/transaction_list_item.dart @@ -227,7 +227,7 @@ class TransactionListItem extends StatelessWidget { ), Text( localization!.lookup( - kPurchaseOrderStatuses[transaction.statusId])!, + kPurchaseOrderStatuses[transaction.statusId]), style: TextStyle( color: TransactionStatusColors( state.prefState.colorThemeModel) diff --git a/lib/ui/transaction_rule/edit/transaction_rule_edit.dart b/lib/ui/transaction_rule/edit/transaction_rule_edit.dart index d5445bce5..c3fc91f5b 100644 --- a/lib/ui/transaction_rule/edit/transaction_rule_edit.dart +++ b/lib/ui/transaction_rule/edit/transaction_rule_edit.dart @@ -180,11 +180,11 @@ class _TransactionRuleEditState extends State { children: [ Expanded( child: - Text(localization.lookup(rule.searchKey)!), + Text(localization.lookup(rule.searchKey)), ), Expanded( child: - Text(localization.lookup(rule.operator)!), + Text(localization.lookup(rule.operator)), ), Expanded( child: Text(rule.value), diff --git a/lib/ui/transaction_rule/view/transaction_rule_view.dart b/lib/ui/transaction_rule/view/transaction_rule_view.dart index 9c1bf4c5a..a1066f590 100644 --- a/lib/ui/transaction_rule/view/transaction_rule_view.dart +++ b/lib/ui/transaction_rule/view/transaction_rule_view.dart @@ -102,10 +102,10 @@ class _TransactionRuleViewState extends State { child: Row( children: [ Expanded( - child: Text(localization.lookup(rule.searchKey)!), + child: Text(localization.lookup(rule.searchKey)), ), Expanded( - child: Text(localization.lookup(rule.operator)!), + child: Text(localization.lookup(rule.operator)), ), Expanded( child: Text(rule.value), diff --git a/lib/ui/user/edit/user_edit.dart b/lib/ui/user/edit/user_edit.dart index 66665a8ba..6fdf0ada8 100644 --- a/lib/ui/user/edit/user_edit.dart +++ b/lib/ui/user/edit/user_edit.dart @@ -431,7 +431,7 @@ class _UserEditState extends State final editPermission = 'edit_' + type.apiValue; final viewPermission = 'view_' + type.apiValue; return DataRow(cells: [ - DataCell(Text(localization.lookup('$type')!), + DataCell(Text(localization.lookup('$type')), onTap: () { _togglePermission(createPermission); WidgetsBinding.instance diff --git a/lib/ui/vendor/edit/vendor_edit_details.dart b/lib/ui/vendor/edit/vendor_edit_details.dart index 74833c94b..8629f6192 100644 --- a/lib/ui/vendor/edit/vendor_edit_details.dart +++ b/lib/ui/vendor/edit/vendor_edit_details.dart @@ -285,7 +285,7 @@ class VendorEditDetailsState extends State { }, items: kTaxClassifications .map((classification) => DropdownMenuItem( - child: Text(localization.lookup(classification)!), + child: Text(localization.lookup(classification)), value: classification, )) .toList(), diff --git a/lib/ui/vendor/vendor_presenter.dart b/lib/ui/vendor/vendor_presenter.dart index ad02b6f2d..a2c1972e5 100644 --- a/lib/ui/vendor/vendor_presenter.dart +++ b/lib/ui/vendor/vendor_presenter.dart @@ -128,7 +128,7 @@ class VendorPresenter extends EntityPresenter { : formatDate( convertTimestampToDateString(vendor.lastLogin), context)); case VendorFields.classification: - return Text(localization!.lookup(vendor!.classification)!); + return Text(localization!.lookup(vendor!.classification)); } return super.getField(field: field, context: context); diff --git a/lib/ui/webhook/edit/webhook_edit.dart b/lib/ui/webhook/edit/webhook_edit.dart index d14dd600b..e9102a47c 100644 --- a/lib/ui/webhook/edit/webhook_edit.dart +++ b/lib/ui/webhook/edit/webhook_edit.dart @@ -130,7 +130,7 @@ class _WebhookEditState extends State { items: WebhookEntity.EVENT_MAP.keys .map((eventId) => DropdownMenuItem( child: Text(localization - .lookup(WebhookEntity.EVENT_MAP[eventId])!), + .lookup(WebhookEntity.EVENT_MAP[eventId])), value: eventId, )) .toList(), diff --git a/lib/ui/webhook/webhook_list_item.dart b/lib/ui/webhook/webhook_list_item.dart index 028f70c06..8796d5ae4 100644 --- a/lib/ui/webhook/webhook_list_item.dart +++ b/lib/ui/webhook/webhook_list_item.dart @@ -89,7 +89,7 @@ class WebhookListItem extends StatelessWidget { subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(localization.lookup(webhook.eventType)!), + Text(localization.lookup(webhook.eventType)), subtitle != null && subtitle.isNotEmpty ? Text( subtitle, diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 3a210cea5..db55b84e8 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -109889,7 +109889,7 @@ mixin LocalizationsProvider on LocaleCodeAware { // STARTER: lang field - do not remove comment - String? lookup(String? key) { + String lookup(String? key) { final lookupKey = toSnakeCase(key); if ((key ?? '').isEmpty) { @@ -109897,7 +109897,7 @@ mixin LocalizationsProvider on LocaleCodeAware { } if (lookupKey.startsWith('_')) { - return key; + return key ?? ''; } final value = _localizedValues[localeCode]![lookupKey] ?? @@ -109907,9 +109907,9 @@ mixin LocalizationsProvider on LocaleCodeAware { if (value.isEmpty) { print('## ERROR: localization key not found - $key'); - final englishValue = _localizedValues['en']![lookupKey]!; + final englishValue = _localizedValues['en']![lookupKey] ?? ''; - return englishValue.isEmpty ? key : englishValue; + return englishValue.isEmpty ? (key ?? '') : englishValue; } return value;