fnotes/lib/notes.dart
2024-03-17 18:02:00 +01:00

126 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:fnotes/theme_bloc.dart';
import 'package:uuid/uuid.dart';
class Notes extends StatefulWidget {
const Notes({
super.key,
});
@override
State<Notes> createState() => _NotesState();
}
class _NotesState extends State<Notes> {
List<String> notes = List.empty(growable: true);
final phraseController = TextEditingController();
Map<Uuid, String> notesMap = {};
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Your notes:'),
actions: [
IconButton(
icon: const Icon(Icons.light_mode),
onPressed: () {
context.read<ThemeBloc>().add(ThemeEvent());
},
)
],
),
body: BlocBuilder<ThemeBloc, ThemeState>(
builder: (context, state) {
return ListView.builder(
itemCount: notes.length,
itemBuilder: (context, index) {
return Dismissible(
onDismissed: (direction) {
notes.removeAt(index);
setState(() {});
},
key: ValueKey(notes[index]),
child: Card(
elevation: 5,
color: state.theme.colorScheme.primaryContainer,
child: SizedBox(
height: 50,
child: Padding(
padding: const EdgeInsets.only(left: 20),
child: Align(
alignment: Alignment.centerLeft,
child: Text(
notes[index],
style: TextStyle(
color:
state.theme.colorScheme.onPrimaryContainer),
),
),
),
),
),
);
},
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
final newNote = showEnterItemDialog(context);
newNote.then(
(value) {
if (value != null && value.isNotEmpty) {
addNote(value);
setState(() {});
}
},
);
},
child: const Icon(Icons.add)),
);
}
Future<String?> showEnterItemDialog(BuildContext context) {
return showDialog<String>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('New list item'),
content: TextField(
onSubmitted: (val) {
Navigator.pop(context, val);
phraseController.clear();
},
autofocus: true,
controller: phraseController,
decoration: InputDecoration(
hintText: 'Remember me!',
suffixIcon: IconButton(
onPressed: () {
Navigator.pop(context, phraseController.value.text);
phraseController.clear();
},
icon: const Icon(Icons.check),
)),
),
actions: <Widget>[
TextButton(
child: const Text('Cancel'),
onPressed: () {
Navigator.pop(context);
},
),
],
);
},
);
}
void addNote(String text) {
notes.add(text);
}
}