Solución:
¡Larga historia corta!
para obtener la guía más reciente, siga https://firebase.flutter.dev/docs/firestore/usage#emulator-usage
Viejo pero, dorado. Configuración detallada.
PASO 1 [setup firestore in flutter in main.dart]
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); <--- Important!
await Firestore.instance.settings(
host: '192.168.1.38:5002', <--- Make sure to put your local ip
sslEnabled: false); it will not work if you use 'localhost:5002'
Google it "how to find my local ip"
}
PASO 1 [setup firestore in flutter in main.dart] para una versión más reciente de firebase
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); <--- Important!
String host = Platform.isAndroid ? '10.0.2.2:5002' : 'localhost:5002';
await FirebaseFirestore.instance.settings = Settings(
host: host,
sslEnabled: false,
);
}
PASO 2 [init firebase project]
firebase init
PASO 3 [config firestore emulator e.g firebase.json]
"emulators": {
"ui": {
"enabled": true,
"host": "localhost",
"port": 4000
},
"functions": {
"port": 5001
},
"firestore": {
"host": "0.0.0.0", <------ Make sure to set it "0.0.0.0"
"port": 5002
},
}
PASO 4 [run emulators and flutter app]
firebase emulators:start
flutter run
Trabajó tanto en el simulador de iOS como en los emuladores de Android
PD: intente reiniciar el emulador de Firestore o la aplicación Flutter
¡Hecho!
PRIMA [import export data to firestore emulator]
cuando detenga el emulador de firestore, todos los datos en firestore desaparecerán. Entonces, tal vez antes de detener el emulador, si desea continuar desde donde lo dejó, puede exportar datos del emulador de firestore como tal
firebase emulators:export ../data
(../data puede ser cualquier ruta que desee)
para cargar datos exportados
firebase emulators:start --import ../data
puede guardar diferentes estados de su emulador firestore para diferentes casos, ejemplo
firebase emulators:start --import ../initialData
firebase emulators:start --import ../otherStateData
❤️ Nota para mí usar dardo para funciones de base de fuego ❤️
Si desea utilizar dart para las funciones de base de fuego, puede seguir este https://github.com/pulyaevskiy/firebase-functions-interop
una cosa buena que encontré por mí mismo para detectar si su función se está ejecutando en emulador o producción Usted puede leer más aquí
larga historia corta
functions/index.js
export const prepopulateFirestoreEmulator = functions.https.onRequest(
(request, response) => {
if (process.env.FUNCTIONS_EMULATOR && process.env.FIRESTORE_EMULATOR_HOST) {
// TODO: prepopulate firestore emulator from 'yourproject/src/sample_data.json
response.send('Prepopulated firestore with sample_data.json!');
} else {
response.send(
"Do not populate production firestore with sample_data.json"
);
}
}
);
funciones / index.dart
import 'package:firebase_functions_interop/firebase_functions_interop.dart';
import 'package:node_interop/node.dart';
import 'package:node_interop/util.dart';
void devPrepopulateCollections(ExpressHttpRequest request) {
var env =
new Map<String, String>.from(dartify(process.env)); // <-- important part
if (env.containsKey('FUNCTIONS_EMULATOR') &&
env.containsKey('FIRESTORE_EMULATOR_HOST')) {
// TODO: prepopulate firestore emulator from 'yourproject/src/sample_data.json
request.response
..write("Prepopulated firestore with sample_data.json!")
..close();
} else {
request.response
..write("Do not populate production firestore with sample_data.json")
..close();
}
}
Después de revisar cuidadosamente los documentos aquí, lo hice funcionar configurando la configuración del host en la instancia de Firestore:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:tracker/screens/screens.dart';
void main() async {
// This will set the app to communicate with localhost
await Firestore.instance.settings(host: "10.0.2.2:8080", sslEnabled: false);
runApp(AppSetupScreen());
}
Nota: Esto solo funcionará con el emulador y no con el dispositivo físico.