Я пытаюсь уменьшить количество подключений к FireStore в своем приложении Flutter и использую кэшированные данные, пока не добавлю новый элемент (Provider.of (context, listen: false) .synced = false; - для повторной синхронизации c).
Затем передайте: source: synced == true? Source.cache: Source.serverAndCache до getDocuments ()
Теперь все данные извлекаются только в первый раз и когда мне это нужно.
Но может быть, есть более элегантный способ? Какой правильный способ сократить количество подключений и снизить затраты.
Я использую этот код в моем хранилище задач:
class TaskRepository extends BaseRepository {
String status;
bool synced;
TaskRepository() {
ref = db.collection('tasks');
}
Future<List<Task>> fetchDocuments() async {
List<Task> documents;
await ref
.where('ownerUID', isEqualTo: await Auth.getUID())
.where('status', isEqualTo: status ?? 'assigned')
.orderBy('createdAt', descending: true)
.getDocuments(source: synced == true ? Source.cache : Source.serverAndCache)
.then((result) {
documents = result.documents.map((doc) {
print(doc.metadata.isFromCache ? "Task from CACHE" : "Task from NETWORK");
synced = true;
return Task.fromMap(doc.data, doc.documentID);
}).toList();
}).catchError((error) {
print('Error: $error');
});
return documents;
}
}
И BaseRepository
class BaseRepository with ChangeNotifier {
final Firestore db = Firestore.instance;
final FirebaseAuth auth = FirebaseAuth.instance;
bool debug = true;
CollectionReference ref;
DateTime now = DateTime.now();
BaseRepository() {
db.settings(persistenceEnabled: true);
}
}