187 lines
6.4 KiB
Dart

// ignore_for_file: use_build_context_synchronously
import 'package:refilc/api/providers/database_provider.dart';
import 'package:refilc/api/providers/self_note_provider.dart';
import 'package:refilc/api/providers/user_provider.dart';
import 'package:refilc/models/self_note.dart';
import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc_kreta_api/providers/homework_provider.dart';
import 'package:refilc_mobile_ui/screens/notes/notes_screen.i18n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart';
import 'package:uuid/uuid.dart';
class AddNoteScreen extends StatefulWidget {
const AddNoteScreen({super.key, this.initialNote});
final SelfNote? initialNote;
@override
AddNoteScreenState createState() => AddNoteScreenState();
}
class AddNoteScreenState extends State<AddNoteScreen> {
late UserProvider user;
late HomeworkProvider homeworkProvider;
late DatabaseProvider databaseProvider;
late SelfNoteProvider selfNoteProvider;
final _contentController = TextEditingController();
final _titleController = TextEditingController();
@override
void initState() {
_contentController.text = widget.initialNote?.content ?? '';
_titleController.text = widget.initialNote?.title ?? '';
super.initState();
}
@override
Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context);
homeworkProvider = Provider.of<HomeworkProvider>(context);
databaseProvider = Provider.of<DatabaseProvider>(context);
selfNoteProvider = Provider.of<SelfNoteProvider>(context);
return Scaffold(
appBar: AppBar(
surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
leading: BackButton(color: AppColors.of(context).text),
title: Text(
widget.initialNote == null ? 'new_note'.i18n : 'edit_note'.i18n,
style: TextStyle(
color: AppColors.of(context).text,
fontSize: 26.0,
fontWeight: FontWeight.bold,
),
),
actions: [
ClipRRect(
borderRadius: BorderRadius.circular(10.1),
child: GestureDetector(
onTap: () async {
// handle tap
if (_contentController.text.replaceAll(' ', '') == '') {
return;
}
var notes = selfNoteProvider.notes;
if (widget.initialNote == null) {
notes.add(SelfNote.fromJson({
'id': const Uuid().v4(),
'title': _titleController.text.replaceAll(' ', '') == ''
? null
: _titleController.text,
'content': _contentController.text
}));
} else {
var i =
notes.indexWhere((e) => e.id == widget.initialNote!.id);
notes[i] = SelfNote.fromJson({
'id': notes[i].id,
'title': _titleController.text.replaceAll(' ', '') == ''
? null
: _titleController.text,
'content': _contentController.text,
});
}
await selfNoteProvider.store(notes);
Navigator.of(context).pop();
if (widget.initialNote != null) {
Navigator.of(context).pop();
}
},
child: Container(
color: Theme.of(context).colorScheme.primary.withOpacity(0.4),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Stack(
children: [
IconTheme(
data: IconThemeData(
color: Theme.of(context).colorScheme.secondary,
),
child: const Icon(
FeatherIcons.check,
size: 20.0,
),
),
IconTheme(
data: IconThemeData(
color:
Theme.of(context).brightness == Brightness.light
? Colors.black.withOpacity(.5)
: Colors.white.withOpacity(.3),
),
child: const Icon(
FeatherIcons.check,
size: 20.0,
),
),
],
),
),
),
),
),
const SizedBox(
width: 20,
),
],
),
body: SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 22.0),
child: Column(
children: [
TextField(
controller: _titleController,
expands: false,
maxLines: 1,
decoration: InputDecoration(
border: InputBorder.none,
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
hintText: "hint_t".i18n,
hintStyle: const TextStyle(
fontSize: 22.0,
fontWeight: FontWeight.w600,
),
),
textAlign: TextAlign.start,
style: const TextStyle(
fontSize: 22.0,
fontWeight: FontWeight.w600,
),
),
Expanded(
child: TextField(
controller: _contentController,
expands: true,
minLines: null,
maxLines: null,
decoration: InputDecoration(
border: InputBorder.none,
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
hintText: "hint".i18n,
hintStyle: const TextStyle(fontSize: 16.0),
),
textAlign: TextAlign.start,
style: const TextStyle(fontSize: 16.0),
),
),
],
),
),
),
);
}
}