Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:确保首先调用FirebaseApp.initializeApp(上下文)_Flutter_Firebase Storage - Fatal编程技术网

Flutter 颤振:确保首先调用FirebaseApp.initializeApp(上下文)

Flutter 颤振:确保首先调用FirebaseApp.initializeApp(上下文),flutter,firebase-storage,Flutter,Firebase Storage,我正在编写一个flatter应用程序,并试图在Firebase存储上上载一个图像。这是我创建的一个简单的测试应用程序,用于重现错误 import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show rootBundle; import 'package:path_provider/path_provider.dart'; import 'package:fi

我正在编写一个flatter应用程序,并试图在Firebase存储上上载一个图像。这是我创建的一个简单的测试应用程序,用于重现错误

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';
import 'package:firebase_storage/firebase_storage.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  File image;

  Future<File> getImageFileFromAssets(String path) async {
    final byteData = await rootBundle.load('assets/$path');

    final file = File('${(await getTemporaryDirectory()).path}/$path');
    await file.writeAsBytes(byteData.buffer
        .asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

    return file;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test App'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              height: 300,
              width: 450,
              child: image == null ? null : Image.file(image),
            ),
            RaisedButton(
              child: Text('Submit'),
              onPressed: () async {
                final fileName = 'imageName';
                final firebaseStorageRef =
                    FirebaseStorage.instance.ref().child('userFolder');
                final uploadTask =
                    firebaseStorageRef.child(fileName).putFile(image);
                await uploadTask.onComplete;
              },
            ),
            RaisedButton(
              child: Text('Load immagine'),
              onPressed: () async {
                image = await getImageFileFromAssets('test.jpg');
                setState(() {});
              },
            ),
          ],
        ),
      ),
    );
  }
}
数据库的规则是公共规则:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

有人能告诉我我做错了什么吗?

对于来到这里的人,我解决了这个问题。有很多事情要做,比如将你的应用程序添加到你的Firebase项目和编辑一些文件。 唯一要做的是更好地阅读文档并遵循所有步骤:

根据文档,只需更改您的主要方法:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
Future main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();
runApp(MyApp());
}

导入“包:firebase_core/firebase_core.dart”

所有Firebase版本都已更新,现在您必须在使用任何Firebase产品之前调用Firebase.initializeApp(),例如:

首先,所有Firebase产品现在都依赖于Firebase_核心版本(0.5.0+),因此您需要将其添加到pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
然后必须调用Firebase.initializeApp():

在main.dart中:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(); //Make sure you imported firebase_core
  runApp(MaterialApp(
    home: GettingStartedPage(),
  ));
}
Future main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();//确保已导入Firebase_核心
runApp(材料应用程序)(
主页:GettingStartedPage(),
));
}

谢谢!我有这个,但我忘了等待!Lol将一个已经在工作的项目中的代码复制到一个新的应用程序中,却忘了重新设置所有内容。谢谢虽然此代码可能会回答此问题,但提供有关如何和/或为什么解决此问题的附加上下文将提高答案的长期价值。所有Firebase版本都已更新,现在您必须在使用任何Firebase产品之前调用Firebase.initializeApp(),例如:First,所有Firebase产品现在都依赖于Firebase_核心版本(0.5.0+),因此您需要将其添加到pubspec.yaml文件中
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(); //Make sure you imported firebase_core
  runApp(MaterialApp(
    home: GettingStartedPage(),
  ));
}