Skip to content

Commit 2631004

Browse files
committed
offlineMode
Added off-line mode for developer to decide whether to cash this particular list or objects
1 parent 34aa3fd commit 2631004

2 files changed

Lines changed: 32 additions & 8 deletions

File tree

packages/dart/lib/src/storage/core_store_sem_impl.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@ Future<List<String>?> getStringList(String key) async {
9090
return null;
9191
}
9292

93+
// @override
94+
// Future<List<String>?> getStringList(String key) async {
95+
// final List<String>? storedItem = await get(key);
96+
// return storedItem;
97+
// }
98+
9399
@override
94100
Future<void> remove(String key) {
95101
return _store.record(key).delete(_database);

packages/flutter/lib/src/utils/parse_live_list.dart

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
part of 'package:parse_server_sdk_flutter/parse_server_sdk_flutter.dart';
22

3+
4+
35
/// The type of function that builds a child widget for a ParseLiveList element.
46
typedef ChildBuilder<T extends sdk.ParseObject> = Widget Function(
57
BuildContext context, sdk.ParseLiveListElementSnapshot<T> snapshot, [int? index]);
@@ -136,14 +138,22 @@ class _ParseLiveListWidgetState<T extends sdk.ParseObject>
136138
}
137139

138140
Future<void> _checkConnectivityAndLoad() async {
141+
final connectivityResult = await Connectivity().checkConnectivity();
142+
_isOffline = connectivityResult == ConnectivityResult.none;
143+
if (_isOffline) {
139144
if (widget.offlineMode) {
140-
_isOffline = true;
141145
await _loadFromCache();
142146
} else {
143-
_isOffline = false;
144-
await _loadData();
147+
// Show a message or empty state, since offlineMode is not enabled
148+
setState(() {
149+
_items.clear();
150+
_noDataNotifier.value = true;
151+
});
145152
}
153+
} else {
154+
await _loadData();
146155
}
156+
}
147157

148158
Future<void> _loadFromCache() async {
149159
_items.clear();
@@ -193,8 +203,10 @@ class _ParseLiveListWidgetState<T extends sdk.ParseObject>
193203
final item = liveList.getPreLoadedAt(i);
194204
if (item != null) {
195205
_items.add(item);
196-
// Save to offline cache as user browses
197-
item.saveToLocalCache();
206+
// Only save to offline cache if offlineMode is enabled
207+
if (widget.offlineMode) {
208+
item.saveToLocalCache();
209+
}
198210
}
199211
}
200212
}
@@ -205,17 +217,23 @@ class _ParseLiveListWidgetState<T extends sdk.ParseObject>
205217
if (event is sdk.ParseLiveListAddEvent<sdk.ParseObject>) {
206218
setState(() {
207219
_items.insert(event.index, event.object as T);
208-
(event.object as T).saveToLocalCache();
220+
if (widget.offlineMode) {
221+
(event.object as T).saveToLocalCache();
222+
}
209223
});
210224
} else if (event is sdk.ParseLiveListDeleteEvent<sdk.ParseObject>) {
211225
setState(() {
212226
_items.removeAt(event.index);
213-
(event.object as T).removeFromLocalCache();
227+
if (widget.offlineMode) {
228+
(event.object as T).removeFromLocalCache();
229+
}
214230
});
215231
} else if (event is sdk.ParseLiveListUpdateEvent<sdk.ParseObject>) {
216232
setState(() {
217233
_items[event.index] = event.object as T;
218-
(event.object as T).saveToLocalCache();
234+
if (widget.offlineMode) {
235+
(event.object as T).saveToLocalCache();
236+
}
219237
});
220238
}
221239
_noDataNotifier.value = _items.isEmpty;

0 commit comments

Comments
 (0)