Files
hlaskovnik-reimagined/frontend/lib/pages/add.dart
T
2026-04-22 19:45:24 +02:00

110 lines
3.5 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:frontend/provider/quote_provider.dart';
import 'package:frontend/model/quote.dart';
import 'package:provider/provider.dart';
import 'package:frontend/values/strings.dart';
import 'package:frontend/values/constants.dart';
class AddPage extends StatelessWidget {
const AddPage({super.key});
@override
Widget build(BuildContext context) {
final bodyController = TextEditingController(text: '');
final authorController = TextEditingController(text: '');
final provider = Provider.of<QuoteProvider>(context);
return Card(
margin: const EdgeInsets.all(Constants.edgeInset),
child: Padding(
padding: const EdgeInsets.all(Constants.edgeInset),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
autofocus: true,
controller: bodyController,
decoration: const InputDecoration(
labelText: Strings.quote,
),
),
const SizedBox(height: 8),
TextField(
controller: authorController,
decoration: InputDecoration(
labelText: Strings.author,
suffixIcon: IconButton(
icon: Icon(Icons.arrow_drop_down),
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) {
var authors = provider.authors.toList()..sort();
return SizedBox(
height: 300,
child: ListView.builder(
padding: const EdgeInsets.all(Constants.edgeInset),
itemCount: authors.length,
itemBuilder: (context, index) {
final author = authors[index];
return ListTile(
title: Text(author),
onTap: () {
authorController.text = author;
Navigator.pop(context);
},
);
},
),
);
},
);
},
),
),
),
const SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () {
bodyController.clear();
authorController.clear();
},
child: const Text(Strings.cancel),
),
const SizedBox(width: 8),
ElevatedButton(
onPressed: () {
final quote = Quote(
id: 0,
body: bodyController.text,
author: authorController.text,
);
provider.createQuote(quote);
bodyController.clear();
authorController.clear();
},
child: const Text(Strings.save),
),
],
),
],
),
),
);
}
}