Skip to content

Commit 6517295

Browse files
updating SQLite by firestore listener
1 parent 169cd0b commit 6517295

File tree

9 files changed

+73
-181
lines changed

9 files changed

+73
-181
lines changed

lib/backend/backend.dart

Whitespace-only changes.

lib/backend/database.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ Future insertSQLite({required Map<String, dynamic> item}) async {
3939
// await batch.commit(noResult: true);
4040
}
4141

42+
Future insertBatchSQLite({required List<Map<String, dynamic>> list}) async {
43+
final db = await cacheDatabase();
44+
// db.insert('cache', item);
45+
final batch = db.batch();
46+
for (var item in list) {
47+
batch.insert('cache', item, conflictAlgorithm: ConflictAlgorithm.replace);
48+
}
49+
await batch.commit(noResult: true);
50+
}
51+
4252
Future updateSQLite({required Map<String, dynamic> item}) async {
4353
final db = await cacheDatabase();
4454
db.update('cache', item, where: 'doc_id = ?', whereArgs: [item['doc_id']]);
@@ -49,6 +59,11 @@ Future updateSQLite({required Map<String, dynamic> item}) async {
4959
// await batch.commit(noResult: true);
5060
}
5161

62+
Future deleteSQLite({required Map<String, dynamic> item}) async {
63+
final db = await cacheDatabase();
64+
db.delete('cache', where: 'doc_id = ?', whereArgs: [item['doc_id']]);
65+
}
66+
5267
// add entry
5368
Future addBatchOfEntries({required List<dynamic> entries}) async {
5469
final db = await cacheDatabase();

lib/backend/firestore_changes.dart

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'package:cloud_firestore/cloud_firestore.dart';
2+
import 'package:fetchingapp/backend/database.dart';
3+
import 'package:flutter/foundation.dart';
4+
5+
class FirestoreChanges extends ChangeNotifier {
6+
List<Map<String, dynamic>> list = [];
7+
Map<String, dynamic> map = {};
8+
bool isFirstBoot = true;
9+
10+
void listenOnFirestoreChanges() {
11+
FirebaseFirestore.instance
12+
.collection('flutter-caching')
13+
.snapshots()
14+
.listen((event) {
15+
if (isFirstBoot) {
16+
cleanDB();
17+
for (var change in event.docChanges) {
18+
map = {'name': change.doc.data()!['name'], 'doc_id': change.doc.id};
19+
list.add(map);
20+
}
21+
print('first boot');
22+
print(list);
23+
insertBatchSQLite(list: list);
24+
isFirstBoot = false;
25+
} else {
26+
for (var change in event.docChanges) {
27+
map = {'name': change.doc.data()!['name'], 'doc_id': change.doc.id};
28+
if (change.type == DocumentChangeType.added) {
29+
insertSQLite(item: map);
30+
} else if (change.type == DocumentChangeType.modified) {
31+
updateSQLite(item: map);
32+
} else if (change.type == DocumentChangeType.removed) {
33+
deleteSQLite(item: map);
34+
}
35+
print('Change type: ${change.type};\n'
36+
'Doc ID: ${change.doc.id}\n'
37+
'Data: ${change.doc.data()}\n\n');
38+
}
39+
}
40+
// notifyListeners();
41+
});
42+
}
43+
}
44+
45+

lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:fetchingapp/backend/firestore_changes.dart';
1+
import 'package:fetchingapp/backend/firestore_listener.dart';
22
import 'package:fetchingapp/backend/notifications.dart';
33
import 'package:fetchingapp/screens/home.dart';
44
import 'package:fetchingapp/screens/login.dart';

lib/screens/firestore_collection.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:cloud_firestore/cloud_firestore.dart';
2-
import 'package:fetchingapp/backend/database.dart';
32
import 'package:flutter/material.dart';
43

54
class FirestoreCollectionCaching extends StatefulWidget {
@@ -14,17 +13,14 @@ class _FirestoreCollectionCachingState
1413
extends State<FirestoreCollectionCaching> {
1514
@override
1615
Widget build(BuildContext context) {
17-
readCache();
18-
cleanDB();
19-
2016
return Scaffold(
2117
appBar: AppBar(
2218
title: const Text('Firestore Collection'),
2319
),
2420
body: Column(
2521
children: [
2622
Expanded(
27-
child: Text('List'),
23+
child: list(),
2824
),
2925
inputfield(),
3026
],
@@ -33,10 +29,14 @@ class _FirestoreCollectionCachingState
3329
}
3430
}
3531

32+
Widget list() {
33+
return Text('list');
34+
}
35+
3636
Widget inputfield() {
3737
final textController = TextEditingController();
3838

39-
void addEntry() {
39+
void addDocToFirebase() {
4040
if (textController.text == '') {
4141
return;
4242
}
@@ -50,7 +50,7 @@ Widget inputfield() {
5050
return TextField(
5151
controller: textController,
5252
onEditingComplete: () {
53-
addEntry();
53+
addDocToFirebase();
5454
},
5555
decoration: InputDecoration(
5656
prefixIcon: const Icon(Icons.add_circle),
@@ -60,7 +60,7 @@ Widget inputfield() {
6060
splashColor: Colors.blue,
6161
tooltip: "Post message",
6262
onPressed: () {
63-
addEntry();
63+
addDocToFirebase();
6464
},
6565
)));
6666
}

lib/screens/home.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ class HomePage extends StatelessWidget {
3434
'Firestore Collection',
3535
style: TextStyle(fontSize: 25),
3636
)),
37-
ElevatedButton(
38-
onPressed: () {
39-
cleanDB();
40-
},
41-
child: const Text('Clean DB')),
4237
ElevatedButton(
4338
onPressed: () {
4439
readCache();

lib/screens/old screens/provider_test.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:fetchingapp/backend/firestore_changes.dart';
1+
import 'package:fetchingapp/backend/firestore_listener.dart';
22
import 'package:flutter/material.dart';
33
import 'package:provider/provider.dart';
44

@@ -33,7 +33,9 @@ class _ProviderTestPageState extends State<ProviderTestPage> {
3333
style: TextStyle(fontSize: 25),
3434
),
3535
Text(
36-
'\n' + Provider.of<FirestoreChanges>(context).changeStr,
36+
'\n'
37+
// + Provider.of<FirestoreChanges>(context).changeStr,
38+
,
3739
style: const TextStyle(fontSize: 15),
3840
)
3941
],

lib/screens/old_screens/home.dart

Lines changed: 0 additions & 111 deletions
This file was deleted.

0 commit comments

Comments
 (0)