在 flutter 中使用 firebase 存储模拟器给我操作系统错误:连接被拒绝,errno = 111,地址 = localhost,端口 = 39280

Mar*_*tin 5 android firebase-tools flutter firebase-storage

我正在尝试使用 firebase 模拟器,一切正常,但不适用于存储模拟器。

下面是我正在使用的代码,我也尝试过 10.0.2.2 但仍然出现相同的错误。

void main() async {
  Bloc.observer = AppBlocObserver();

  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  if (USE_EMULATOR) {
    await _connectToFirebaseEmulator();
  }

  runZonedGuarded(() {
    runApp(ElectronicCupongs(appTitle: 'LunchBrejk'));
  }, (error, stacktrace) {
    FirebaseCrashlytics.instance.recordError(error, stacktrace);
  });
}

/// Connect to firebase emulator and authentication
Future _connectToFirebaseEmulator() async {
  final localHost = Platform.isAndroid ? '127.0.0.1' : 'localhost';

  // FirebaseFirestore.instance.settings = Settings(
  //     host: '$localHost:8080', sslEnabled: false, persistenceEnabled: false);

  FirebaseFirestore.instance.useFirestoreEmulator(localHost, 8080);
  FirebaseStorage.instance.useStorageEmulator(localHost, 9199);
  FirebaseFunctions.instance.useFunctionsEmulator(localHost, 5001);

  await FirebaseAuth.instance.useAuthEmulator(localHost, 9099);
}
Run Code Online (Sandbox Code Playgroud)

当颤动启动时,我在调试控制台中得到这个。

I/flutter ( 7233): Mapping Firestore Emulator host "127.0.0.1" to "10.0.2.2".
I/flutter ( 7233): Mapping Storage Emulator host "127.0.0.1" to "10.0.2.2".
I/flutter ( 7233): Mapping Functions Emulator host "127.0.0.1" to "10.0.2.2".
I/flutter ( 7233): Mapping Auth Emulator host "127.0.0.1" to "10.0.2.2".
Run Code Online (Sandbox Code Playgroud)

所以看起来 flutter 设置正确。但是当我尝试从存储加载图像时,我明白了。

I/flutter ( 7233): CacheManager: Failed to download file from http://localhost:9199/v0/b/default-bucket/o/restaurants%2FR81.jpg?alt=media&token=4983e466-53d1-4f4e-a1d4-09cce1b27ba1 with error:
I/flutter ( 7233): SocketException: OS Error: Connection refused, errno = 111, address = localhost, port = 39308
Run Code Online (Sandbox Code Playgroud)

如果我点击链接,我会在浏览器中看到该图像。

我已确保可以通过更改 storage.rules 文件来读取和写入

顺便说一句,我正在使用cached_network_image,也许它可以处理模拟器?