1
1
import 'dart:async' ;
2
2
import 'package:flutter/foundation.dart' ;
3
+ import 'package:mynoteapp/extensions/list/filter.dart' ;
3
4
import 'package:mynoteapp/services/crud/crud_exceptions.dart' ;
4
5
import 'package:sqflite/sqflite.dart' ;
5
6
import 'package:path_provider/path_provider.dart'
@@ -10,10 +11,12 @@ class NotesService {
10
11
Database ? _db;
11
12
List <DatabaseNote > _notes = [];
12
13
14
+ DatabaseUser ? _user;
15
+
13
16
static final NotesService _shared = NotesService ._sharedInstance ();
14
17
NotesService ._sharedInstance () {
15
18
_notesStreamController = StreamController <List <DatabaseNote >>.broadcast (
16
- onListen: () {
19
+ onListen: () {
17
20
_notesStreamController.sink.add (_notes);
18
21
},
19
22
);
@@ -23,15 +26,30 @@ class NotesService {
23
26
24
27
late final StreamController <List <DatabaseNote >> _notesStreamController;
25
28
26
- Stream <List <DatabaseNote >> get allNotes => _notesStreamController.stream;
29
+ Stream <List <DatabaseNote >> get allNotes => _notesStreamController.stream.filter ((note) {
30
+ final currentUser = _user;
31
+ if (currentUser != null ) {
32
+ return note.userId == currentUser.id;
33
+ } else {
34
+ throw UserShouldBeSetBeforeReadingAllNotesException ();
35
+ }
36
+ });
27
37
28
- Future <DatabaseUser > getOrCreateUser ({required String email}) async {
38
+ Future <DatabaseUser > getOrCreateUser ({
39
+ required String email,
40
+ bool setAsCurrentUser = true ,
41
+ }) async {
29
42
try {
30
43
final user = await getUser (email: email);
44
+ if (setAsCurrentUser) {
45
+ _user = user;
46
+ }
31
47
return user;
32
48
} on CouldNotFindUserException {
33
49
final createdUser = await createUser (email: email);
34
-
50
+ if (setAsCurrentUser) {
51
+ _user = createdUser;
52
+ }
35
53
return createdUser;
36
54
} catch (e) {
37
55
rethrow ;
@@ -55,10 +73,12 @@ class NotesService {
55
73
56
74
await getNote (id: note.id); // not yoksa exception döndürsün
57
75
58
- final updatesCount = await db.update (noteTable, {
59
- textColumn: text,
60
- isSyncedWithCloudColumn: 0 ,
61
- });
76
+ final updatesCount = await db.update (
77
+ noteTable,
78
+ {textColumn: text, isSyncedWithCloudColumn: 0 },
79
+ where: 'id = ?' ,
80
+ whereArgs: [note.id],
81
+ );
62
82
63
83
if (updatesCount == 0 ) {
64
84
throw CouldNotUpdateNoteException ();
0 commit comments