Files
maps_bookmarks/lib/widgets/create_bookmark_dialog.dart

103 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import '../model/bookmark.dart';
class CreateBookmarkDialog extends StatelessWidget {
const CreateBookmarkDialog({
super.key,
required this.collectionId,
required this.onSavePressed,
this.selectedBookmark,
});
final void Function(Bookmark bookmark) onSavePressed;
final int collectionId;
final Bookmark? selectedBookmark;
@override
Widget build(BuildContext context) {
final nameController = TextEditingController();
final linkController = TextEditingController();
final descriptionController = TextEditingController();
return AlertDialog(
title: Text('Create Bookmark'),
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: 'Bookmark Title',
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: '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: 'Description',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
],
),
),
actions: [
FloatingActionButton(
onPressed: () {
onSavePressed(
Bookmark(
collectionId: collectionId,
name: nameController.text,
link: linkController.text,
description: descriptionController.text,
),
);
Navigator.of(context).pop();
},
child: Icon(Icons.save),
),
],
);
}
}