Saltar al contenido

Flutter + firebase: configura la aplicación para usar el emulador de base de fuego local

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *