#firebase #flutter #google-cloud-firestore
#firebase #флаттер #google-облако-firestore
Вопрос:
Я начинаю с firebase и flutter. Я хочу начать с рабочего кода, поэтому я внедрил дочернюю кодовую лабораторию. Это сработало. А затем перестал работать. Я попытался обновить codelab, чтобы использовать последние версии firestore. Все еще больше не работает. Это случилось со мной с другим приложением. Несмотря на то, что я живу в Таиланде, мое интернет-соединение довольно хорошее.
это обновленная кодовая лаборатория дочерних имен
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
final dummySnapshot = [
{"name": "Filip", "votes": 15},
{"name": "Abraham", "votes": 14},
{"name": "Richard", "votes": 11},
{"name": "Ike", "votes": 10},
{"name": "Justin", "votes": 1},
];
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: FirebaseFirestore.instance.collection('baby').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return LinearProgressIndicator();
return _buildList(context, snapshot.data.docs);
},
);
}
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: () => record.reference.update({'votes': FieldValue.increment(1)})
),
),
);
}
}
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>";
}
это соответствующий раздел pubspec.yaml
зависимости: flutter: sdk: flutter
cupertino_icons: ^ 1.0.0 cloud_firestore: ^ 0.14.3 firebase_core: ^ 0.5.2
вот соответствующий (я надеюсь) раздел из flutter run — подробный
[ ] I/ProviderInstaller(30660): Installed default security provider GmsCore_OpenSSL
[ 91 ms] D/ConnectivityManager(30660): requestNetwork; CallingUid : 10182, CallingPid : 30660
[ 76 ms] W/ware.baby_name(30660): Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
[ ] W/ware.baby_name(30660): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
[ 5234 ms] D/ViewRootImpl@7513633[MainActivity](30660): ViewPostIme pointer 0
[ 73 ms] D/ViewRootImpl@7513633[MainActivity](30660): ViewPostIme pointer 1
[ 4565 ms] W/Firestore(30660): (22.0.0) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds
[ ] W/Firestore(30660):
[ ] W/Firestore(30660): This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.
[ 5138 ms] D/ConnectivityManager(30660): unregisterNetworkCallback; CallingUid : 10182, CallingPid : 30660
[ 28 ms] W/Firestore(30660): (22.0.0) [WriteStream]: (eed8101) Stream closed with status: Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}.
[ 12 ms] W/DynamiteModule(30660): Local module descriptor class for providerinstaller not found.
[ ] W/Firestore(30660): (22.0.0) [WatchStream]: (78299e7) Stream closed with status: Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}.
[ 11 ms] I/DynamiteModule(30660): Considering local module providerinstaller:0 and remote module providerinstaller:0
[ ] W/ProviderInstaller(30660): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
[ 9 ms] D/ConnectivityManager(30660): requestNetwork; CallingUid : 10182, CallingPid : 30660
[ 15025 ms] D/ConnectivityManager(30660): unregisterNetworkCallback; CallingUid : 10182, CallingPid : 30660
[ 10 ms] W/Firestore(30660): (22.0.0) [WriteStream]: (eed8101) Stream closed with status: Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}.
[ 4 ms] W/Firestore(30660): (22.0.0) [WatchStream]: (78299e7) Stream closed with status: Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}.
Я вижу раздел, в котором говорится, что серверная часть не отвечала в течение 30 секунд и может указывать на плохое подключение к Интернету. но с моим Интернетом все в порядке. он работает нормально. Чтобы попытаться устранить неполадки, я изначально настроил его в юго-Восточной Азии 2, потому что я в Таиланде. Когда он перестал работать на следующий день. я удалил свой проект из firebase и перестроил его на западном побережье США. Я также запустил его с включенным vpn на случай, если это помогло. Затем я удалил проект и вернул его в Юго-Восточную Азию. ничто из этого не повлияло на эту ошибку.
Ответ №1:
Возможно, вы просто пропустили шаг или что-то перепутали с конфигурацией в какой-то момент. Попробуйте запустить другой проект с нуля и посмотрите, сохраняется ли проблема.
Комментарии:
1. ОК. Я удалил проект. Создан новый. взял имя пути из моего файла манифеста. убедился, что минимальный sdk равен 21. Отключена аналитика. удалил старый файл JSON из моего проекта и добавил новый после его загрузки. Убедитесь, что для файлов build.gradle были выполнены шаги. Проверил мою скорость Интернета. Скорость передачи данных 350 Мбит / с, скорость до 15 Мбит / с. задержка 45 мс (сервер в Сингапуре). пробовал на двух разных планшетах. Тот же результат. У меня есть подробный запуск, но он слишком большой для публикации. Как я могу поделиться им?
2. одна вещь, которая изменилась: когда я впервые создал проект, мне было предложено следовать до завершения, а затем он подключался к моему приложению, когда мое приложение запускалось в первый раз. Этого больше не происходит. Я пропустил шаг, на котором он подключается к моему приложению? как вы можете принудительно установить это соединение?
3. У меня такая же проблема, но если я поменяю подключение к телефону на использование 4g вместо Wi-Fi, это сработает
Ответ №2:
Проблема решена. Я попытался использовать свой телефон в качестве горячей точки, чтобы проверить, была ли это моя сеть. Как только я это сделал, он начал работать.