diff --git a/i18n/de.json b/i18n/de.json index b390883..8afe471 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -11,8 +11,20 @@ "title": "Dashboard" } }, + "buttons": { + "delete": "Löschen", + "cancel": "Abbrechen", + "save": "Speichern" + }, "spacer": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." }, + "dashboard": { + "business": { + "area": { + "title_edit_area": "Fläche bearbeiten" + } + } + }, "start": { "links": { "massnahmen": { diff --git a/lib/src/entity/lists/list_repository.dart b/lib/src/entity/lists/list_repository.dart index eab0f8a..9200d3f 100644 --- a/lib/src/entity/lists/list_repository.dart +++ b/lib/src/entity/lists/list_repository.dart @@ -145,8 +145,6 @@ class ListRepository { void buildListMeasureSingle() { List measuresAll = isar.measureGenerals.where().findAll(); - List lms = []; - isar.write((isar) { isar.listMeasureSingles.clear(); }); @@ -164,7 +162,7 @@ class ListRepository { for (final cat in cats) { final ListMeasureSingle single = ListMeasureSingle() - ..id = isar.listMeasureSingles.autoIncrement() + ..id = measure.id ..name = measure.name ..description = types.description ..measureCategory = cat.measureCategory @@ -179,12 +177,6 @@ class ListRepository { isar.listMeasureSingles.put(single); }); } - - /*final ListMeasureSingle single = ListMeasureSingle() - ..id = isar.listMeasureSingles.autoIncrement() - ..name = measure.name - ..description = types.description - ..measureCategory =*/ } } } diff --git a/lib/src/pages/measure/detail/measure_detail_page.dart b/lib/src/pages/measure/detail/measure_detail_page.dart index 9c7699c..587252e 100644 --- a/lib/src/pages/measure/detail/measure_detail_page.dart +++ b/lib/src/pages/measure/detail/measure_detail_page.dart @@ -6,9 +6,11 @@ import 'package:expansion_tile_card/expansion_tile_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_breadcrumb/flutter_breadcrumb.dart'; import 'package:get/get.dart'; +import 'package:isar/isar.dart'; import 'package:screen_breakpoints/screen_breakpoints.dart'; import '../../../config/config.dart'; +import '../../../consts/consts.dart'; import '../../../packages/ambito_theme/ambito_theme.dart'; import '../../../widgets/appbar/ambito_appbar.dart'; import '../../ambito_page.dart'; @@ -35,7 +37,7 @@ class MeasureDetailPageState extends State { final ScrollController scrollController = ScrollController(); bool showBackToTopButton = false; final Map> expansionKeys = {}; - MeasureTypes? massnahme; + MeasureGeneral? measureGeneral; List contentItems = []; final Set visibleItems = {}; bool collapsed = false; @@ -47,6 +49,15 @@ class MeasureDetailPageState extends State { //massnahme = MeasureRepository().get(int.parse(id)) as MeasureTypes; //} + List generals = isar.measureGenerals.where().findAll(); + + logger.d(generals.map((el) => el.id)); + + measureGeneral = + isar.measureGenerals.where().idEqualTo(widget.id).findFirst(); + + logger.d(measureGeneral); + scrollController.addListener(() { const showOffset = 10.0; setState( @@ -63,7 +74,7 @@ class MeasureDetailPageState extends State { breakpoint: Breakpoint.fromContext(context), theme: theme, ), - body: (context.breakpoint != myBreakpoints.sm) + /*body: (context.breakpoint != myBreakpoints.sm) ? _buildInfoPage(context, massnahme) : _tabbedInfoPage(context, massnahme), floatingActionButton: (context.breakpoint != myBreakpoints.sm) @@ -83,7 +94,7 @@ class MeasureDetailPageState extends State { color: theme.currentColorScheme.onPrimary), ), ) - : null, + : null,*/ ); } diff --git a/lib/src/widgets/buttons/cancel_button.dart b/lib/src/widgets/buttons/cancel_button.dart new file mode 100644 index 0000000..82cc50c --- /dev/null +++ b/lib/src/widgets/buttons/cancel_button.dart @@ -0,0 +1,23 @@ +import 'package:ambito/src/extensions/extensions.dart'; +import 'package:flutter/material.dart'; + +import '../../packages/ambito_theme/ambito_theme.dart'; +import 'outline_button.dart'; + +class CancelButton extends StatelessWidget { + const CancelButton({super.key}); + + @override + Widget build(BuildContext context) { + final AmbitoTheme theme = getTheme(context); + return WidgetOutlineButton( + onPressed: () { + Navigator.pop(context); + }, + title: context.translate('pages.general.buttons.cancel'), + backgroundColor: theme.currentColorScheme.tertiary, + foregroundColor: theme.currentColorScheme.error, + borderColor: theme.currentColorScheme.error, + ); + } +} diff --git a/lib/src/widgets/buttons/delete_button.dart b/lib/src/widgets/buttons/delete_button.dart new file mode 100644 index 0000000..a9a1154 --- /dev/null +++ b/lib/src/widgets/buttons/delete_button.dart @@ -0,0 +1,23 @@ +import 'package:ambito/src/extensions/extensions.dart'; +import 'package:flutter/material.dart'; + +import '../../packages/ambito_theme/ambito_theme.dart'; +import 'outline_button.dart'; + +class DeleteButton extends StatelessWidget { + final VoidCallback onPressed; + + const DeleteButton({super.key, required this.onPressed}); + + @override + Widget build(BuildContext context) { + final AmbitoTheme theme = getTheme(context); + return WidgetOutlineButton( + onPressed: onPressed, + title: context.translate('pages.general.buttons.delete'), + backgroundColor: theme.currentColorScheme.error, + foregroundColor: theme.currentColorScheme.onError, + borderColor: theme.currentColorScheme.error, + ); + } +} diff --git a/lib/src/widgets/buttons/delete_buttons_group.dart b/lib/src/widgets/buttons/delete_buttons_group.dart new file mode 100644 index 0000000..60756dd --- /dev/null +++ b/lib/src/widgets/buttons/delete_buttons_group.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; + +import '../../packages/ambito_theme/ambito_theme.dart'; +import 'cancel_button.dart'; +import 'delete_button.dart'; + +class DeleteButtonsGroup extends StatelessWidget { + final VoidCallback onPressed; + + const DeleteButtonsGroup({super.key, required this.onPressed}); + + @override + Widget build(BuildContext context) { + final AmbitoTheme theme = getTheme(context); + return Align( + alignment: Alignment.centerRight, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + const CancelButton(), + theme.horizontalSpacer, + DeleteButton(onPressed: onPressed), + ], + ), + ); + } +} diff --git a/lib/src/widgets/buttons/save_button.dart b/lib/src/widgets/buttons/save_button.dart new file mode 100644 index 0000000..c2a8df5 --- /dev/null +++ b/lib/src/widgets/buttons/save_button.dart @@ -0,0 +1,23 @@ +import 'package:ambito/src/extensions/extensions.dart'; +import 'package:flutter/material.dart'; + +import '../../packages/ambito_theme/ambito_theme.dart'; +import 'outline_button.dart'; + +class SaveButton extends StatelessWidget { + final VoidCallback onPressed; + + const SaveButton({super.key, required this.onPressed}); + + @override + Widget build(BuildContext context) { + final AmbitoTheme theme = getTheme(context); + return WidgetOutlineButton( + onPressed: onPressed, + title: context.translate('pages.general.buttons.save'), + backgroundColor: theme.currentColorScheme.secondary, + foregroundColor: theme.currentColorScheme.onPrimary, + borderColor: theme.currentColorScheme.secondary, + ); + } +} diff --git a/lib/src/widgets/buttons/save_buttons_group.dart b/lib/src/widgets/buttons/save_buttons_group.dart new file mode 100644 index 0000000..73bf556 --- /dev/null +++ b/lib/src/widgets/buttons/save_buttons_group.dart @@ -0,0 +1,28 @@ +import 'package:ambito/src/widgets/buttons/cancel_button.dart'; +import 'package:ambito/src/widgets/buttons/save_button.dart'; +import 'package:flutter/material.dart'; + +import '../../packages/ambito_theme/ambito_theme.dart'; + +class SaveButtonsGroup extends StatelessWidget { + final VoidCallback onPressed; + + const SaveButtonsGroup({super.key, required this.onPressed}); + + @override + Widget build(BuildContext context) { + final AmbitoTheme theme = getTheme(context); + + return Align( + alignment: Alignment.centerRight, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + const CancelButton(), + theme.horizontalSpacer, + SaveButton(onPressed: onPressed), + ], + ), + ); + } +} diff --git a/lib/src/widgets/buttons/text_button.dart b/lib/src/widgets/buttons/text_button.dart index c53e936..d9f5123 100644 --- a/lib/src/widgets/buttons/text_button.dart +++ b/lib/src/widgets/buttons/text_button.dart @@ -16,17 +16,19 @@ class TextButtonElement extends StatelessWidget { return TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(theme.currentColorScheme.secondary), - padding: WidgetStateProperty.all( - const EdgeInsets.all(16), - ), - shape: WidgetStateProperty.all( - RoundedRectangleBorder( + backgroundColor: + WidgetStateProperty.all(theme.currentColorScheme.secondary), + padding: WidgetStateProperty.all( + const EdgeInsets.all(16), + ), + shape: WidgetStateProperty.all( + RoundedRectangleBorder( borderRadius: BorderRadius.circular( 8.0, ), - ))), + ), + ), + ), onPressed: onPressed, child: Text( context.translate(title), diff --git a/lib/src/widgets/dialogs/delete_entity/delete_area_dialog.dart b/lib/src/widgets/dialogs/delete_entity/delete_area_dialog.dart index 4bd8c49..f54a33b 100644 --- a/lib/src/widgets/dialogs/delete_entity/delete_area_dialog.dart +++ b/lib/src/widgets/dialogs/delete_entity/delete_area_dialog.dart @@ -1,10 +1,10 @@ +import 'package:ambito/src/widgets/buttons/delete_buttons_group.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../entity/area/area_repository.dart'; import '../../../packages/ambito_api/base_api.dart'; import '../../../packages/ambito_theme/ambito_theme.dart'; -import '../../buttons/outline_button.dart'; class DeleteAreaDialog extends StatelessWidget { const DeleteAreaDialog({super.key, required this.id}); @@ -45,37 +45,13 @@ class DeleteAreaDialog extends StatelessWidget { style: theme.bodyMedium, ), theme.verticalSpacerMax, - Align( - alignment: Alignment.centerRight, - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - WidgetOutlineButton( - onPressed: () { - Navigator.pop(context); - }, - title: 'Abbrechen', - backgroundColor: theme.currentColorScheme.tertiary, - foregroundColor: theme.currentColorScheme.error, - borderColor: theme.currentColorScheme.error, - ), - theme.horizontalSpacer, - WidgetOutlineButton( - onPressed: () { - AreaRepository().delete(id); - BaseApi().deleteContent('area', id).then((_) { - Navigator.pop(context); - Get.offAndToNamed('/dashboard/flaechen/1'); - }); - }, - title: 'Löschen', - backgroundColor: theme.currentColorScheme.error, - foregroundColor: theme.currentColorScheme.onError, - borderColor: theme.currentColorScheme.error, - ), - ], - ), - ), + DeleteButtonsGroup(onPressed: () { + AreaRepository().delete(id); + BaseApi().deleteContent('area', id).then((_) { + Navigator.pop(context); + Get.offAndToNamed('/dashboard/flaechen/1'); + }); + }), ], ), ), diff --git a/lib/src/widgets/dialogs/edit_entity_dialog/edit_area_dialog.dart b/lib/src/widgets/dialogs/edit_entity_dialog/edit_area_dialog.dart index 6e8885f..976fd86 100644 --- a/lib/src/widgets/dialogs/edit_entity_dialog/edit_area_dialog.dart +++ b/lib/src/widgets/dialogs/edit_entity_dialog/edit_area_dialog.dart @@ -1,4 +1,5 @@ -import 'package:ambito/src/widgets/buttons/outline_button.dart'; +import 'package:ambito/src/widgets/buttons/save_buttons_group.dart'; +import 'package:ambito/src/widgets/texts/text_headline.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:isar/isar.dart'; @@ -54,62 +55,29 @@ class EditAreaDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ theme.verticalSpacer, - Text( - 'Fläche bearbeiten', - style: theme.headlineMedium.copyWith( - color: theme.currentColorScheme.onSurface, - ), - ), + const TextHeadline( + text: + 'pages.dashboard.business.area.title_edit_area'), theme.verticalSpacer, - Align( - alignment: Alignment.centerRight, - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - WidgetOutlineButton( - onPressed: () { - Navigator.pop(context); - }, - title: 'Abbrechen', - backgroundColor: theme - .currentColorScheme.surface - .withOpacity(.1), - foregroundColor: - theme.currentColorScheme.primary, - borderColor: theme.currentColorScheme.primary, - ), - theme.horizontalSpacer, - WidgetOutlineButton( - onPressed: () { - Area area = isar.areas.get(id)!; - area.description = - _controllerDescription.value.text; - area.name = _controllerName.value.text; - area.size = _controllerSize.value.text; - AreaRepository().put(area); - BaseApi() - .patchContent('area', id, area.toJson()) - .then((_) { - Navigator.pop(context); - Get.offAndToNamed('/dashboard/flaechen/1'); - }); - }, - title: 'Speichern', - backgroundColor: - theme.currentColorScheme.secondary, - foregroundColor: - theme.currentColorScheme.onPrimary, - borderColor: theme.currentColorScheme.secondary, - ), - ], - ), - ), + SaveButtonsGroup(onPressed: () { + Area area = isar.areas.get(id)!; + area.description = _controllerDescription.value.text; + area.name = _controllerName.value.text; + area.size = _controllerSize.value.text; + AreaRepository().put(area); + BaseApi() + .patchContent('area', id, area.toJson()) + .then((_) { + Navigator.pop(context); + Get.offAndToNamed('/dashboard/flaechen/1'); + }); + }), theme.verticalSpacer, Card( elevation: 0, color: theme.currentColorScheme.tertiary, child: Padding( - padding: EdgeInsets.all(20), + padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/src/widgets/fields/text_field_with_controller.dart b/lib/src/widgets/fields/text_field_with_controller.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/src/widgets/texts/text_headline.dart b/lib/src/widgets/texts/text_headline.dart new file mode 100644 index 0000000..d57215a --- /dev/null +++ b/lib/src/widgets/texts/text_headline.dart @@ -0,0 +1,22 @@ +import 'package:ambito/src/extensions/extensions.dart'; +import 'package:flutter/material.dart'; + +import '../../packages/ambito_theme/ambito_theme.dart'; + +class TextHeadline extends StatelessWidget { + const TextHeadline({super.key, required this.text}); + + final String text; + + @override + Widget build(BuildContext context) { + final AmbitoTheme theme = getTheme(context); + + return Text( + context.translate(text), + style: theme.headlineMedium.copyWith( + color: theme.currentColorScheme.onSurface, + ), + ); + } +}