diff --git a/lib/ui/app/buttons/elevated_button.dart b/lib/ui/app/buttons/elevated_button.dart index 6b2ae681c..ef00ebdd5 100644 --- a/lib/ui/app/buttons/elevated_button.dart +++ b/lib/ui/app/buttons/elevated_button.dart @@ -5,12 +5,12 @@ class ElevatedButton extends StatelessWidget { const ElevatedButton( {@required this.label, @required this.onPressed, - this.icon, + this.iconData, this.color, this.width}); final Color color; - final IconData icon; + final IconData iconData; final String label; final Function onPressed; final double width; @@ -22,9 +22,9 @@ class ElevatedButton extends StatelessWidget { child: RaisedButton( padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), color: color ?? Theme.of(context).buttonColor, - child: icon != null + child: iconData != null ? IconText( - icon: icon, + icon: iconData, text: label, ) : Text(label), diff --git a/lib/ui/app/document_grid.dart b/lib/ui/app/document_grid.dart index 41ff9ccc0..6f5fa12ae 100644 --- a/lib/ui/app/document_grid.dart +++ b/lib/ui/app/document_grid.dart @@ -40,7 +40,7 @@ class DocumentGrid extends StatelessWidget { children: [ Expanded( child: ElevatedButton( - icon: Icons.camera_alt, + iconData: Icons.camera_alt, label: localization.takePicture, onPressed: () async { final image = await ImagePicker.pickImage( @@ -56,7 +56,7 @@ class DocumentGrid extends StatelessWidget { ), Expanded( child: ElevatedButton( - icon: Icons.insert_drive_file, + iconData: Icons.insert_drive_file, label: localization.uploadFile, onPressed: () async { final image = await ImagePicker.pickImage( @@ -133,7 +133,7 @@ class DocumentTile extends StatelessWidget { children: [ isFromExpense ? ElevatedButton( - icon: getEntityIcon(EntityType.expense), + iconData: getEntityIcon(EntityType.expense), label: localization.expense, onPressed: () { Navigator.of(context).pop(); @@ -142,7 +142,7 @@ class DocumentTile extends StatelessWidget { ) : ElevatedButton( color: Colors.red, - icon: Icons.delete, + iconData: Icons.delete, label: localization.delete, onPressed: () { confirmCallback( @@ -157,7 +157,7 @@ class DocumentTile extends StatelessWidget { width: 16, ), ElevatedButton( - icon: Icons.check_circle, + iconData: Icons.check_circle, label: localization.done, onPressed: () { Navigator.of(context).pop(); diff --git a/lib/ui/client/edit/client_edit_contacts.dart b/lib/ui/client/edit/client_edit_contacts.dart index d7e193811..2af88a7bf 100644 --- a/lib/ui/client/edit/client_edit_contacts.dart +++ b/lib/ui/client/edit/client_edit_contacts.dart @@ -250,7 +250,7 @@ class ContactEditDetailsState extends State { ), ElevatedButton( color: Colors.red, - icon: Icons.delete, + iconData: Icons.delete, label: localization.remove, onPressed: () => confirmCallback( context: context, @@ -264,7 +264,7 @@ class ContactEditDetailsState extends State { width: 10.0, ), ElevatedButton( - icon: Icons.check_circle, + iconData: Icons.check_circle, label: localization.done, onPressed: () { viewModel.onDoneContactPressed(); diff --git a/lib/ui/group/view/group_view.dart b/lib/ui/group/view/group_view.dart index 69f3f05bf..48ad4af60 100644 --- a/lib/ui/group/view/group_view.dart +++ b/lib/ui/group/view/group_view.dart @@ -45,7 +45,7 @@ class _GroupViewState extends State { padding: const EdgeInsets.all(16), child: ElevatedButton( label: localization.configureSettings.toUpperCase(), - icon: Icons.settings, + iconData: Icons.settings, onPressed: () => handleGroupAction(context, [group], EntityAction.settings), ), diff --git a/lib/ui/invoice/edit/invoice_edit_items.dart b/lib/ui/invoice/edit/invoice_edit_items.dart index 38a389746..8af983dca 100644 --- a/lib/ui/invoice/edit/invoice_edit_items.dart +++ b/lib/ui/invoice/edit/invoice_edit_items.dart @@ -210,7 +210,7 @@ class ItemEditDetailsState extends State { children: [ ElevatedButton( color: Colors.red, - icon: Icons.delete, + iconData: Icons.delete, label: localization.remove, onPressed: () { widget.viewModel.onRemoveInvoiceItemPressed(widget.index); @@ -221,7 +221,7 @@ class ItemEditDetailsState extends State { width: 10.0, ), ElevatedButton( - icon: Icons.check_circle, + iconData: Icons.check_circle, label: localization.done, onPressed: () { viewModel.onDoneInvoiceItemPressed(); diff --git a/lib/ui/settings/account_management.dart b/lib/ui/settings/account_management.dart index 70f4da369..e9935f36d 100644 --- a/lib/ui/settings/account_management.dart +++ b/lib/ui/settings/account_management.dart @@ -1,10 +1,12 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/constants.dart'; +import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart'; import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart'; import 'package:invoiceninja_flutter/ui/settings/account_management_vm.dart'; +import 'package:invoiceninja_flutter/utils/dialogs.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class AccountManagement extends StatefulWidget { @@ -16,8 +18,7 @@ class AccountManagement extends StatefulWidget { final AccountManagementVM viewModel; @override - _AccountManagementState createState() => - _AccountManagementState(); + _AccountManagementState createState() => _AccountManagementState(); } class _AccountManagementState extends State @@ -69,38 +70,53 @@ class _AccountManagementState extends State children: [ ListView( children: [ - + ElevatedButton( + label: localization.deleteCompany, + color: Colors.red, + iconData: Icons.delete, + onPressed: () { + confirmCallback( + context: context, + callback: () { + passwordCallback( + context: context, + callback: (password) { + print('delete'); + }); + }); + }, + ), ], ), ListView( children: [ FormCard( - // TODO change to kModules.keys + // TODO change to kModules.keys children: kModules.keys.map((module) { - final implementedModules = [ - kModuleQuotes, - kModuleCredits, - ]; - final isImplemented = implementedModules.contains(module); - return CheckboxListTile( - controlAffinity: ListTileControlAffinity.leading, - title: Text(localization.lookup(kModules[module])), - value: company.enabledModules & module != 0, - activeColor: Theme.of(context).accentColor, - onChanged: isImplemented - ? (value) { - int enabledModules = company.enabledModules; - if (value) { - enabledModules = enabledModules | module; - } else { - enabledModules = enabledModules ^ module; + final implementedModules = [ + kModuleQuotes, + kModuleCredits, + ]; + final isImplemented = implementedModules.contains(module); + return CheckboxListTile( + controlAffinity: ListTileControlAffinity.leading, + title: Text(localization.lookup(kModules[module])), + value: company.enabledModules & module != 0, + activeColor: Theme.of(context).accentColor, + onChanged: isImplemented + ? (value) { + int enabledModules = company.enabledModules; + if (value) { + enabledModules = enabledModules | module; + } else { + enabledModules = enabledModules ^ module; + } + viewModel.onCompanyChanged(company.rebuild( + (b) => b..enabledModules = enabledModules)); } - viewModel.onCompanyChanged(company - .rebuild((b) => b..enabledModules = enabledModules)); - } - : null, - ); - }).toList()), + : null, + ); + }).toList()), ], ), ], diff --git a/lib/ui/settings/company_details.dart b/lib/ui/settings/company_details.dart index a73f110f2..09e8e3153 100644 --- a/lib/ui/settings/company_details.dart +++ b/lib/ui/settings/company_details.dart @@ -344,7 +344,7 @@ class _CompanyDetailsState extends State width: double.infinity, color: Colors.redAccent, label: localization.delete, - icon: Icons.delete, + iconData: Icons.delete, onPressed: () { confirmCallback( context: context, @@ -359,7 +359,7 @@ class _CompanyDetailsState extends State child: ElevatedButton( width: double.infinity, label: localization.uploadLogo, - icon: Icons.cloud_upload, + iconData: Icons.cloud_upload, onPressed: () async { String path; if (kIsWeb) { diff --git a/lib/ui/task/edit/task_edit_times.dart b/lib/ui/task/edit/task_edit_times.dart index 5d566eb9c..27741f86c 100644 --- a/lib/ui/task/edit/task_edit_times.dart +++ b/lib/ui/task/edit/task_edit_times.dart @@ -144,7 +144,7 @@ class TimeEditDetailsState extends State { children: [ ElevatedButton( color: Colors.red, - icon: Icons.delete, + iconData: Icons.delete, label: localization.remove, onPressed: () { widget.viewModel.onRemoveTaskTimePressed(widget.index); @@ -155,7 +155,7 @@ class TimeEditDetailsState extends State { width: 10.0, ), ElevatedButton( - icon: Icons.check_circle, + iconData: Icons.check_circle, label: localization.done, onPressed: () { final startDate = DateTime.parse(_date); diff --git a/lib/ui/vendor/edit/vendor_edit_contacts.dart b/lib/ui/vendor/edit/vendor_edit_contacts.dart index 649993b5f..9c7111d70 100644 --- a/lib/ui/vendor/edit/vendor_edit_contacts.dart +++ b/lib/ui/vendor/edit/vendor_edit_contacts.dart @@ -239,7 +239,7 @@ class ContactEditDetailsState extends State { ), ElevatedButton( color: Colors.red, - icon: Icons.delete, + iconData: Icons.delete, label: localization.remove, onPressed: () => confirmCallback( context: context, @@ -253,7 +253,7 @@ class ContactEditDetailsState extends State { width: 10.0, ), ElevatedButton( - icon: Icons.check_circle, + iconData: Icons.check_circle, label: localization.done, onPressed: () { viewModel.onDoneContactPressed(); diff --git a/lib/utils/dialogs.dart b/lib/utils/dialogs.dart index a67ba8380..16d262daf 100644 --- a/lib/utils/dialogs.dart +++ b/lib/utils/dialogs.dart @@ -12,7 +12,11 @@ void showErrorDialog({BuildContext context, String message}) { }); } -void confirmCallback({BuildContext context, VoidCallback callback}) { +void confirmCallback({ + @required BuildContext context, + @required VoidCallback callback, + String message, +}) { final localization = AppLocalization.of(context); showDialog( @@ -20,6 +24,7 @@ void confirmCallback({BuildContext context, VoidCallback callback}) { builder: (BuildContext context) => AlertDialog( semanticLabel: localization.areYouSure, title: Text(localization.areYouSure), + content: message == null ? null : Text(message), actions: [ FlatButton( child: Text(localization.cancel.toUpperCase()), diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 89755f34f..0f40cf26e 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -15,6 +15,7 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { // STARTER: lang key - do not remove comment + 'delete_company': 'Delete Company', 'enable_modules': 'Enable Modules', 'converted_quote': 'Successfully converted quote', 'credit_design': 'Credit Design', @@ -32853,6 +32854,9 @@ mixin LocalizationsProvider on LocaleCodeAware { String get enableModules => _localizedValues[localeCode]['enable_modules']; + String get deleteCompany => _localizedValues[localeCode]['delete_company']; + + String lookup(String key) { final lookupKey = toSnakeCase(key); return _localizedValues[localeCode][lookupKey] ??