mirror of https://github.com/evanferrao/mynotes
mynotes: Add New Note page
This commit is contained in:
parent
f758264a82
commit
6a7241a702
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,91 @@
|
|||
[33mcommit f758264a8292ddb6ea2637bcce7ee0b0edf2cb8c[m[33m ([m[1;36mHEAD -> [m[1;32mmaster[m[33m, [m[1;33mtag: step13[m[33m, [m[1;31morigin/master[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Sat Aug 3 14:15:43 2024 +0530
|
||||
|
||||
mynotes: add NewNoteRoute
|
||||
|
||||
[33mcommit 751fcfccb4e408865b2c58ab82a06919b6b165c0[m[33m ([m[1;33mtag: step12[m[33m)[m
|
||||
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
|
||||
|
||||
[33mcommit 93164afa7cb12808e575be505183259457f98ed9[m[33m ([m[1;33mtag: step11[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Tue Jul 30 12:33:05 2024 +0530
|
||||
|
||||
mynotes: Implement CRUD operations using sqlite
|
||||
|
||||
[33mcommit 68854afae663fa769527b3bc3719770ef87682f6[m[33m ([m[1;33mtag: step10[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Tue Jul 23 10:29:28 2024 +0530
|
||||
|
||||
mynotes: Add tests
|
||||
|
||||
[33mcommit 6a391c23cdcfa1bd1928707f4ab033e469e0910a[m[33m ([m[1;33mtag: step9[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Sun Jul 21 12:52:12 2024 +0530
|
||||
|
||||
mynotes: use AuthService at the UI level
|
||||
|
||||
[33mcommit 843631195ad2a79bfb5985b1bcf668d5e5560148[m[33m ([m[1;33mtag: step8[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Wed Jul 17 13:16:22 2024 +0530
|
||||
|
||||
mynotes: Implement auth service
|
||||
|
||||
[33mcommit 4bfe0acf49dbda3c820950d2174e23775d01ddee[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Wed Jul 10 18:14:00 2024 +0530
|
||||
|
||||
mynotes: Prevent login if user hasn't verified email
|
||||
|
||||
[33mcommit 4939850724fc1388183faba1932b5bf57fa23079[m[33m ([m[1;33mtag: step7[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Wed Jul 10 17:13:17 2024 +0530
|
||||
|
||||
mynotes: Improve email verification
|
||||
|
||||
[33mcommit a2c2b9570dbc4de98ad50ce0bc6d7e690ed9a978[m[33m ([m[1;33mtag: step6[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Mon Jul 8 05:08:33 2024 +0530
|
||||
|
||||
mynotes: add error popup in login page
|
||||
|
||||
[33mcommit c6944a1f7b921f37ea9e554197ce29549d11df6c[m[33m ([m[1;33mtag: step5[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Mon Jul 8 04:37:27 2024 +0530
|
||||
|
||||
mynotes: Avoid repeated hardcoded values
|
||||
|
||||
[33mcommit 8258bcf56a08a4f486489746efbed763f778b406[m[33m ([m[1;33mtag: step4[m[33m)[m
|
||||
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
|
||||
|
||||
[33mcommit 8c335a41a232ec7c6e95efe9c10d1060e5818659[m[33m ([m[1;33mtag: step3[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Mon Jul 8 03:09:46 2024 +0530
|
||||
|
||||
mynotes: Add logout screen
|
||||
|
||||
[33mcommit 7ab25055851281b1e88c71ff31c52d5049d074a3[m
|
||||
Author: evanferrao <evanferrao@gmail.com>
|
||||
Date: Sun Jul 7 10:22:01 2024 +0000
|
||||
|
||||
mynotes: misc: add google idx config
|
||||
|
||||
[33mcommit 00e9bfef1221391a269027f4cbe25ddeb7abfa5a[m[33m ([m[1;33mtag: step2[m[33m)[m
|
||||
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
|
||||
|
||||
[33mcommit 7e499836af5775b9ef3bcc6f6bdc0bc16ffaaa38[m[33m ([m[1;33mtag: step1[m[33m)[m
|
||||
Author: Evan Ferrao <evanferrao@gmail.com>
|
||||
Date: Sat Jul 6 19:07:59 2024 +0530
|
||||
|
||||
mynotes: Initial Commit
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
import 'dart:math';
|
||||
|
||||
import 'package:mynotes/services/auth/auth_exceptions.dart';
|
||||
import 'package:mynotes/services/auth/auth_provider.dart';
|
||||
|
|
|
|||
Loading…
Reference in New Issue