Я использую флаттер с редуксом для управления состоянием. Когда приложение загружается, я загружаю данные из пожарного хранилища, чтобы заполнить мое состояние притока. Теперь проблема в том, что каждый раз, когда приложение инициализирует, оно читает более 800 документов. Единственный источник изменений в пользовательских данных - это само приложение, и поскольку локальное постоянное хранилище включено, не следует ли загружать данные из локального кэша? .. Чего мне не хватает?
Интересно то, что, если я отключаю интернет-соединение с устройством, загружаю приложение и затем включаю соединение, приложение все равно работает нормально (по-видимому, без чтения документа из процесса инициализации приложения, поскольку они поступают из кеша) .
По сути, желаемое поведение - приложение, которое инициализирует локальные данные, а затем синхронизирует только обновления, сделанные пользователем, на сервере firebase.
class _MyAppState extends State<MyApp> {
final store = new Store<AppState>(
appReducer,
initialState: new AppState(isLoading: true, logs: []),
middleware: [thunkMiddleware]);
initState(){
super.initState();
loadData();
}
loadData(){
FirebaseAuth.instance.currentUser().then( (loggedInUser) async {
if(loggedInUser==null){
store.dispatch(SetUser(null));
}
QuerySnapshot logsQuery = await Firestore.instance.collection("/users/"+loggedInUser.uid+"/logs").getDocuments();
List<Log> logs = [];
final logDocs = logsQuery.documents;
for (DocumentSnapshot logDoc in logDocs) {
logs.add(Log.fromFireStoreData(logDoc.documentID, logDoc.data));
}
store.dispatch(SetUserLogs(logs));
}
}
...
}