Files
maps_bookmarks/lib/widgets/create_bookmark_dialog.dart
marco 99a8aaa409
Some checks failed
Flutter APK Build / Calculate Version (pull_request) Successful in 15s
Flutter APK Build / Create Release (pull_request) Has been cancelled
Flutter APK Build / Build Flutter APK (pull_request) Has been cancelled
added localizations
2026-01-21 14:11:50 +01:00

129 lines
4.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import '../l10n/app_localizations.dart';
import '../model/bookmark.dart';
import '../model/maps_link_metadata.dart';
import 'edit_dialog_widgets/edit_dialog_actions.dart';
import 'edit_dialog_widgets/edit_dialog_title.dart';
class CreateBookmarkDialog extends StatelessWidget {
const CreateBookmarkDialog({
super.key,
required this.collectionId,
this.onSavePressed,
this.onDeletePressed,
this.selectedBookmark,
this.selectedMapsLink,
});
final void Function(Bookmark bookmark)? onSavePressed;
final void Function()? onDeletePressed;
final int collectionId;
final Bookmark? selectedBookmark;
final MapsLinkMetadata? selectedMapsLink;
@override
Widget build(BuildContext context) {
final nameController = TextEditingController();
final linkController = TextEditingController();
final descriptionController = TextEditingController();
if (selectedMapsLink != null) {
nameController.text = selectedMapsLink!.placeName;
linkController.text = selectedMapsLink!.url;
descriptionController.text = selectedMapsLink!.description;
} else if (selectedBookmark != null) {
nameController.text = selectedBookmark!.name;
linkController.text = selectedBookmark!.link;
descriptionController.text = selectedBookmark!.description;
}
return AlertDialog(
title: EditDialogTitle(
dialogType: DialogType.bookmark,
onDeletePressed: onDeletePressed,
),
content: SingleChildScrollView(
child: Column(
children: [
Padding(padding: EdgeInsetsGeometry.only(top: 10)),
TextField(
controller: nameController,
autofocus: true,
maxLines: 1,
maxLength: 50,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'[a-zA-Z0-9äöüÄÖÜß\s]'),
),
FilteringTextInputFormatter.deny(RegExp(r'\s\s+')),
],
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.bookmarkTitle,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
TextField(
controller: linkController,
maxLines: 1,
maxLength: 50,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'[a-zA-Z0-9äöüÄÖÜß\s/:\.]'),
),
FilteringTextInputFormatter.deny(RegExp(r'\s\s+')),
],
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.url,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
TextField(
controller: descriptionController,
maxLines: 3,
maxLength: 300,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'[a-zA-Z0-9äöüÄÖÜß\s]'),
),
FilteringTextInputFormatter.deny(RegExp(r'\s\s+')),
],
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.description,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
],
),
),
actions: [
EditDialogActions(
onSavePressed: () {
final bookmark =
selectedBookmark?.copyWith(
name: nameController.text,
link: linkController.text,
description: descriptionController.text,
) ??
Bookmark(
collectionId: collectionId,
name: nameController.text,
link: linkController.text,
description: descriptionController.text,
);
onSavePressed?.call(bookmark);
Navigator.of(context).pop();
},
),
],
);
}
}