это происходит в моем основном приложении
а также
Я повторяю это с данными кодовыми метками:
https://codelabs.developers.google.com/codelabs/flutter-firebase/index.html?index=..%2F..index#10
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Baby Names',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() {
return _MyHomePageState();
}
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Baby Name Votes')),
body: _buildBody(context),
);
}
Widget _buildBody(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('baby').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return LinearProgressIndicator();
return _buildList(context, snapshot.data.documents);
},
);
}
Widget _buildList(BuildContext context, List<DocumentSnapshot> snapshot){
return ListView(
padding: const EdgeInsets.only(top: 20.0),
children: snapshot.map((data) => _buildListItem(context, data)).toList(),
);
}
Widget _buildListItem(BuildContext context, DocumentSnapshot data) {
final record = Record.fromSnapshot(data);
return Padding(
key: ValueKey(record.name),
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(5.0),
),
child: ListTile(
title: Text(record.name),
trailing: Text(record.votes.toString()),
onTap: () => print(record),
),
),
);
}
}
class Record {
final String name;
final int votes;
final DocumentReference reference;
Record.fromMap(Map<String, dynamic> map, {this.reference})
: assert(map['name'] != null),
assert(map['votes'] != null),
name = map['name'],
votes = map['votes'];
Record.fromSnapshot(DocumentSnapshot snapshot)
: this.fromMap(snapshot.data, reference: snapshot.reference);
@override
String toString() => "Record<$name:$votes>";
}
Единственный используемый мной плагин - это cloud_firestore 0.9.5 + 2 . Вам необходимо набраться терпения в этом процессе тестирования, пожалуйста. Вы не увидите проблему сразу. Сначала запустите приложение, настройте этот проект. Вы можете следовать указаниям в данных коде. Как только все настроено на передний конец и на задний план (создайте документы в первом магазине). Сходите на обеденный перерыв, поужинайте, поиграйте в видеоигры или пообщайтесь с друзьями. Вернись через 1 час. Запустите приложение, вы будете платить за эти чтения как новые. Сделай это снова, вернись через 1 час, и это случится снова
Как повторить это в реальной жизни:
Запустите это приложение по заданному коду из codelabs. Запустите его, должно произойти 4 чтения документа, если вы сохранили 4 документа в пожарном депо.
Запустите его снова. Нет чтения не взимается. Отлично, это работает! но нет, это действительно не так.
Я просыпаюсь на следующий день и открываю приложение, я заряжен за 4 чтения. Хорошо, возможно, произошло какое-то волшебство. Я перезагружаю его сразу же, и никаких расходов не возникает (отлично!). Спустя 1 час я запускаю приложение, и мне платят 4 чтения, чтобы отобразить те же 4 документа, которые не были изменены вообще.
Проблема в том, что приложение запускается. Похоже, загрузка документов из снимка запроса. Никаких изменений не было внесено в документы. Этот построитель потоков ранее запускался много раз.
Автономный режим (режим самолета), кэшированные данные отображаются без проблем.
в моем основном приложении, например, у меня есть photoUrl, и при новом запуске приложения вы можете видеть, как он загружается из пожарного хранилища (то есть загружается как свежий документ, таким образом, взимается плата READ). Я перезагружаю свое основное приложение, никаких начислений и фото не обновляется (отлично!). Через 1 час я запускаю приложение и взимаю плату за каждый извлеченный документ (ничего не изменилось).
Так должен вести себя облачный пожарный магазин?
Из того, что я прочитал, не должно быть так: (