mynotes: Add New Note page

This commit is contained in:
Evan Ferrao 2024-08-04 01:45:36 +05:30
parent f758264a82
commit 6a7241a702
No known key found for this signature in database
GPG Key ID: F01DEB4D7CFC9B52
4 changed files with 184 additions and 5 deletions

View File

@ -1,14 +1,11 @@
import 'package:flutter/material.dart';
import 'package:mynotes/constants/routes.dart';
import 'package:mynotes/enums/menu_action.dart';
import 'package:mynotes/firebase_options.dart';
import 'package:mynotes/services/auth/auth_service.dart';
import 'package:mynotes/views/login_view.dart';
import 'package:mynotes/views/notes/new_note_view.dart';
import 'package:mynotes/views/notes/notes_view.dart';
import 'package:mynotes/views/register_view.dart';
import 'package:mynotes/views/verify_email_view.dart';
import 'dart:developer' as devtools show log;
void main() {
WidgetsFlutterBinding.ensureInitialized();

View File

@ -1,4 +1,6 @@
import 'package:flutter/material.dart';
import 'package:mynotes/services/auth/auth_service.dart';
import 'package:mynotes/services/crud/notes_service.dart';
class NewNoteView extends StatefulWidget {
const NewNoteView({super.key});
@ -8,6 +10,71 @@ class NewNoteView extends StatefulWidget {
}
class _NewNoteViewState extends State<NewNoteView> {
DatabaseNote? _note;
late final NotesService _notesService;
late final TextEditingController _textController;
@override
void initState() {
_notesService = NotesService();
_textController = TextEditingController();
super.initState();
}
void _textControllerListener() async {
final note = _note;
if (note == null) {
return;
}
final text = _textController.text;
await _notesService.updateNote(
note: note,
text: text,
);
}
void _setupTextControllerListener() {
_textController.removeListener(_textControllerListener);
_textController.addListener(_textControllerListener);
}
Future<DatabaseNote> createNewNote() async {
final existingNote = _note;
if (existingNote != null) {
return existingNote;
}
final currentUser = AuthService.firebase().currentUser!;
final email = currentUser.email!;
final owner = await _notesService.getUser(email: email);
return await _notesService.createNote(owner: owner);
}
void _deleteNoteIfTextIsEmpty() {
final note = _note;
if (_textController.text.isEmpty && note != null) {
_notesService.deleteNote(id: note.id);
}
}
void _saveNoteIfTextIsNotEmpty() async {
final note = _note;
final text = _textController.text;
if (note != null && text.isNotEmpty) {
await _notesService.updateNote(
note: note,
text: text,
);
}
}
@override
void dispose() {
_deleteNoteIfTextIsEmpty();
_saveNoteIfTextIsNotEmpty();
_textController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -22,7 +89,32 @@ class _NewNoteViewState extends State<NewNoteView> {
icon: const Icon(Icons.arrow_back, color: Colors.white),
),
),
body: const Text('Write Your Note Here'),
body: FutureBuilder(
future: createNewNote(),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
// temporary fix: I'm not sure why the type of snapshot.data is dynamic
// Im not sure which line to comment out and which to keep
// got this fix in youtube comments section
// without the ? in DatabaseNote? it throws an error which is shown below
// _CastError (type 'Null' is not a subtype of type 'int' in type cast)
_note = snapshot.data as DatabaseNote?;
//_note = snapshot.data;
_setupTextControllerListener();
return TextField(
controller: _textController,
keyboardType: TextInputType.multiline,
maxLines: null,
decoration: const InputDecoration(
hintText: 'Start typing your note here ...',
),
);
default:
return const CircularProgressIndicator();
}
}),
);
}
}

91
tatus Normal file
View File

@ -0,0 +1,91 @@
commit f758264a8292ddb6ea2637bcce7ee0b0edf2cb8c (HEAD -> master, tag: step13, origin/master)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Sat Aug 3 14:15:43 2024 +0530
mynotes: add NewNoteRoute
commit 751fcfccb4e408865b2c58ab82a06919b6b165c0 (tag: step12)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Fri Aug 2 13:03:27 2024 +0530
mynotes: Add streambuilder in UI along with initialize and dispose NotesService in NotesView
commit 93164afa7cb12808e575be505183259457f98ed9 (tag: step11)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Tue Jul 30 12:33:05 2024 +0530
mynotes: Implement CRUD operations using sqlite
commit 68854afae663fa769527b3bc3719770ef87682f6 (tag: step10)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Tue Jul 23 10:29:28 2024 +0530
mynotes: Add tests
commit 6a391c23cdcfa1bd1928707f4ab033e469e0910a (tag: step9)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Sun Jul 21 12:52:12 2024 +0530
mynotes: use AuthService at the UI level
commit 843631195ad2a79bfb5985b1bcf668d5e5560148 (tag: step8)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Wed Jul 17 13:16:22 2024 +0530
mynotes: Implement auth service
commit 4bfe0acf49dbda3c820950d2174e23775d01ddee
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Wed Jul 10 18:14:00 2024 +0530
mynotes: Prevent login if user hasn't verified email
commit 4939850724fc1388183faba1932b5bf57fa23079 (tag: step7)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Wed Jul 10 17:13:17 2024 +0530
mynotes: Improve email verification
commit a2c2b9570dbc4de98ad50ce0bc6d7e690ed9a978 (tag: step6)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Mon Jul 8 05:08:33 2024 +0530
mynotes: add error popup in login page
commit c6944a1f7b921f37ea9e554197ce29549d11df6c (tag: step5)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Mon Jul 8 04:37:27 2024 +0530
mynotes: Avoid repeated hardcoded values
commit 8258bcf56a08a4f486489746efbed763f778b406 (tag: step4)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Mon Jul 8 04:25:37 2024 +0530
mynotes: use logger instead of print
also redirect to /notes/ upon login
commit 8c335a41a232ec7c6e95efe9c10d1060e5818659 (tag: step3)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Mon Jul 8 03:09:46 2024 +0530
mynotes: Add logout screen
commit 7ab25055851281b1e88c71ff31c52d5049d074a3
Author: evanferrao <evanferrao@gmail.com>
Date: Sun Jul 7 10:22:01 2024 +0000
mynotes: misc: add google idx config
commit 00e9bfef1221391a269027f4cbe25ddeb7abfa5a (tag: step2)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Sun Jul 7 02:25:00 2024 +0530
mynotes: Add verify email & improve logic of login_view and register_view
commit 7e499836af5775b9ef3bcc6f6bdc0bc16ffaaa38 (tag: step1)
Author: Evan Ferrao <evanferrao@gmail.com>
Date: Sat Jul 6 19:07:59 2024 +0530
mynotes: Initial Commit

View File

@ -1,4 +1,3 @@
import 'dart:math';
import 'package:mynotes/services/auth/auth_exceptions.dart';
import 'package:mynotes/services/auth/auth_provider.dart';