J'écris une application FLUTTER et j'essaye de télécharger une image sur le stockage Firebase. Ceci est une application de test simple que j'ai créée pour reproduire l'erreur.
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write; } } }
Comme vous pouvez le voir lorsque je clique sur le bouton Load Image
je prends une image des actifs et je la stocke dans un objet File
, et cela fonctionne bien. Ensuite, lorsque je veux télécharger cette image sur le stockage de Firebase à l'aide du bouton Submit
j'obtiens cette erreur:
E/MethodChannel#plugins.flutter.io/firebase_storage(19436): Failed to handle method call E/MethodChannel#plugins.flutter.io/firebase_storage(19436): java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.test_project. Make sure to call FirebaseApp.initializeApp(Context) first. E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@17.0.0:234) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at com.google.firebase.storage.FirebaseStorage.getInstance(com.google.firebase:firebase-storage@@17.0.0:86) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at io.flutter.plugins.firebase.storage.FirebaseStoragePlugin.onMethodCall(FirebaseStoragePlugin.java:57) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:222) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:96) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:656) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at android.os.MessageQueue.nativePollOnce(Native Method) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at android.os.MessageQueue.next(MessageQueue.java:326) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at android.os.Looper.loop(Looper.java:160) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at android.app.ActivityThread.main(ActivityThread.java:6669) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at java.lang.reflect.Method.invoke(Native Method) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) E/MethodChannel#plugins.flutter.io/firebase_storage(19436): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) E/flutter (19436): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(error, Default FirebaseApp is not initialized in this process com.example.test_project. Make sure to call FirebaseApp.initializeApp(Context) first., null) E/flutter (19436): #0 StandardMethodCodec.decodeEnvelope package:flutter/â¦/services/message_codecs.dart:569 E/flutter (19436): #1 MethodChannel.invokeMethod package:flutter/â¦/services/platform_channel.dart:316 E/flutter (19436): <asynchronous suspension> E/flutter (19436): #2 _StorageFileUploadTask._platformStart package:firebase_storage/src/upload_task.dart:130 E/flutter (19436): #3 StorageUploadTask._start package:firebase_storage/src/upload_task.dart:35 E/flutter (19436): <asynchronous suspension> E/flutter (19436): #4 StorageReference.putFile package:firebase_storage/src/storage_reference.dart:65 E/flutter (19436): #5 _MyHomePageState.build.<anonymous closure> package:test_project/main.dart:60 E/flutter (19436): <asynchronous suspension> E/flutter (19436): #6 _InkResponseState._handleTap package:flutter/â¦/material/ink_well.dart:654 E/flutter (19436): #7 _InkResponseState.build.<anonymous closure> package:flutter/â¦/material/ink_well.dart:729 E/flutter (19436): #8 GestureRecognizer.invokeCallback package:flutter/â¦/gestures/recognizer.dart:182 E/flutter (19436): #9 TapGestureRecognizer._checkUp package:flutter/â¦/gestures/tap.dart:365 E/flutter (19436): #10 TapGestureRecognizer.handlePrimaryPointer package:flutter/â¦/gestures/tap.dart:275 E/flutter (19436): #11 PrimaryPointerGestureRecognizer.handleEvent package:flutter/â¦/gestures/recognizer.dart:455 E/flutter (19436): #12 PointerRouter._dispatch package:flutter/â¦/gestures/pointer_router.dart:75 E/flutter (19436): #13 PointerRouter.route package:flutter/â¦/gestures/pointer_router.dart:102 E/flutter (19436): #14 GestureBinding.handleEvent package:flutter/â¦/gestures/binding.dart:218 E/flutter (19436): #15 GestureBinding.dispatchEvent package:flutter/â¦/gestures/binding.dart:198 E/flutter (19436): #16 GestureBinding._handlePointerEvent package:flutter/â¦/gestures/binding.dart:156 E/flutter (19436): #17 GestureBinding._flushPointerEventQueue package:flutter/â¦/gestures/binding.dart:102 E/flutter (19436): #18 GestureBinding._handlePointerDataPacket package:flutter/â¦/gestures/binding.dart:86 E/flutter (19436): #19 _rootRunUnary (dart:async/zone.dart:1136:13) E/flutter (19436): #20 _CustomZone.runUnary (dart:async/zone.dart:1029:19) E/flutter (19436): #21 _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7) E/flutter (19436): #22 _invoke1 (dart:ui/hooks.dart:263:10) E/flutter (19436): #23 _dispatchPointerDataPacket (dart:ui/hooks.dart:172:5) E/flutter (19436):
Les règles de la base de données sont les règles publiques:
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(() {}); }, ), ], ), ), ); } }
Quelqu'un peut-il me dire ce que je fais de mal?
4 Réponses :
Pour ceux qui viennent ici, j'ai résolu le problème. Il y a beaucoup de choses à faire, comme ajouter votre application à votre projet Firebase et modifier certains fichiers. La seule chose à faire est de mieux lire la documentation et de suivre toutes les étapes: Ajouter Firebase à votre application Flutter
Copie du code d'un projet déjà opérationnel vers une nouvelle application et j'ai oublié de tout configurer à nouveau. Merci!
Selon la documentation, changez simplement votre méthode principale:
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
Merci! J'avais ça, mais j'ai oublié d'attendre! Lol
import 'package: firebase_core / firebase_core.dart';
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et / ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse.
Toutes les versions de Firebase ont été mises à jour et vous devez maintenant appeler Firebase.initializeApp () avant d'utiliser un produit Firebase, par exemple: Premièrement, tous les produits Firebase dépendent désormais de la version de firebase_core (0.5.0+), vous devez donc l'ajouter dans le fichier pubspec.yaml
Toutes les versions de Firebase ont été mises à jour et vous devez maintenant appeler Firebase.initializeApp () avant d'utiliser un produit Firebase, par exemple:
Tout d'abord, tous les produits Firebase dépendent désormais de la version Firebase_core (0.5.0+), vous devez donc l'ajouter dans le fichier pubspec.yaml:
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); //Make sure you imported firebase_core runApp(MaterialApp( home: GettingStartedPage(), )); }
Ensuite, vous devez appeler Firebase.initializeApp ():
Dans le main.dart:
dependencies: flutter: sdk: flutter firebase_core : ^0.5.0