Flutter 在Flatter中将图像上载到FireBase后无法获取下载URL
在我上传我的图片到Firebase后,我无法获得它的下载url。我想让它显示在其他页面上传的图片。这是我的密码:Flutter 在Flatter中将图像上载到FireBase后无法获取下载URL,flutter,dart,firebase-storage,Flutter,Dart,Firebase Storage,在我上传我的图片到Firebase后,我无法获得它的下载url。我想让它显示在其他页面上传的图片。这是我的密码: import 'dart:io'; import 'package:firebase/GetPic.dart'; import 'package:firebase_storage/firebase_storage.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_p
import 'dart:io';
import 'package:firebase/GetPic.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class ImageUploadPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return ImageUploadPageState();
}
}
class ImageUploadPageState extends State{
TextEditingController _control= TextEditingController();
File _selectedImage;
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("IMAGE UPLOAD PAGE"),
actions: [
IconButton(
icon: Icon(Icons.arrow_right_alt), onPressed: (){
Navigator.push(context, MaterialPageRoute(
builder: (context)=>GetPic(),));
}),
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text("Galeriden resim seçin"),
onPressed: (){_selectImage();}),
Expanded(
child: _selectedImage== null ?
Text("there is no pic"): Image.file(_selectedImage)),
Form(
key: _formKey,
child: Padding(
padding: const EdgeInsets.all(25.0),
child: TextFormField(
controller: _control,
decoration: InputDecoration(
labelText: "image's name",
labelStyle: TextStyle(color: Colors.greenAccent)
),
style: TextStyle(fontStyle: FontStyle.italic, fontSize: 17),
),
),
),
RaisedButton(
child: Text("Upload image"),
onPressed: (){_uploadImage();}),
]
),
),
);
}
void _selectImage() async {
var _iamge= await ImagePicker.pickImage(source: ImageSource.gallery);
_selelctedImage= _image;
setState(() {});
}
Future<String> _uploadImage() async {
_formKey.currentState.save();
String imageFileName = _control.text;
final Reference ref = await FirebaseStorage.instance.ref().child("deneme").child("resimler").child(imageFileName);
UploadTask uploadTask = ref.putFile(_selectedImage);
var downloadUrl = await (await uploadTask.snapshot).ref.getDownloadURL();
debugPrint(downloadUrl.toString());
return downloadUrl.toString();
}
}
这是我的应用程序/build.gradle
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google() // Google's Maven repository
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
}
}
allprojects {
repositories {
google() // Google's Maven repository
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.firebase.crashlytics'
android {
compileSdkVersion 29
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "meb.firebase"
minSdkVersion 16
targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.20"
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation platform('com.google.firebase:firebase-bom:26.1.0')
implementation 'com.android.support:multidex:1.0.3'
implementation "com.google.firebase:firebase-messaging:20.2.4"
}
最后是我的错误信息:
E/flutter (17095): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: [firebase_storage/object-not-found] No object exists at the desired reference.
E/flutter (17095): #0 MethodChannelReference.getDownloadURL (package:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:57:7)
E/flutter (17095): <asynchronous suspension>
E/flutter (17095): #1 Reference.getDownloadURL (package:firebase_storage/src/reference.dart:94:48)
E/flutter (17095): #2 ImageUploadPageState._resimYukle (package:firebase/ImageUploadPage.dart:83:61)
E/flutter (17095): <asynchronous suspension>
E/flutter (17095): #3 ImageUploadPageState.build.<anonymous closure> (package:firebase/ImageUploadPage.dart:62:31)
E/flutter (17095): #4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
E/flutter (17095): #5 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
E/flutter (17095): #6 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter (17095): #7 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
E/flutter (17095): #8 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter (17095): #9 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
E/flutter (17095): #10 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:476:9)
E/flutter (17095): #11 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:77:12)
E/flutter (17095): #12 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter (17095): #13 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter (17095): #14 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter (17095): #15 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter (17095): #16 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:358:19)
E/flutter (17095): #17 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter (17095): #18 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter (17095): #19 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
E/flutter (17095): #20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
E/flutter (17095): #21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
E/flutter (17095): #22 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter (17095): #23 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (17095): #24 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (17095): #25 _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter (17095): #26 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
E/flutter (17095):
E/flatter(17095):[错误:flatter/lib/ui/ui\u dart\u state.cc(177)]未处理的异常:[未找到firebase\u存储/对象]所需引用处不存在对象。
E/flatter(17095):#0 MethodChannelReference.getDownloadURL(包:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:57:7)
E/颤振(17095):
E/flatter(17095):#1 Reference.getDownloadURL(包:firebase_storage/src/Reference.dart:94:48)
E/flatter(17095):#2图像上传页面状态。_resimYukle(包:firebase/ImageUploadPage.dart:83:61)
E/颤振(17095):
E/颤振(17095):#3 ImageUploadPageState.build。(软件包:firebase/ImageUploadPage.dart:62:31)
E/颤振(17095):#4(InkResponse Estate.)(handleTap)(包装:颤振/src/材料/墨水(well.省道:993:19)
E/颤振(17095):#5#InkResponse.build。(包装:颤振/src/材料/墨水井。省道:1111:38)
E/flatter(17095):#6手势识别器.invokeCallback(包:flatter/src/signatures/recognizer.dart:183:24)
E/flatter(17095):#7 TapGestureRecognitor.handleTapUp(包:flatter/src/signatures/tap.dart:598:11)
电子/颤振(17095):#8 BaseTapgestureRecognitor.#检查(软件包:颤振/src/signatures/tap.dart:287:5)
E/flatter(17095):#9 BaseTapgestureRecognitor.handlePrimaryPointer(包:flatter/src/signatures/tap.dart:222:7)
E/颤振(17095):#10 PrimaryPointerTestureRecognizer.handleEvent(包:颤振/src/手势/识别器。dart:476:9)
E/flatter(17095):#11点路由器。#调度(包:flatter/src/signatures/pointer#u路由器。dart:77:12)
E/颤振(17095):#12点外部。#调度事件路线。(包装:颤振/src/signatures/pointer_router.省道:122:9)
E/flatter(17095):#13 LinkedHashMapMixin.forEach(dart:collection patch/compact_hash.dart:377:8)
E/flatter(17095):#14点路由器。#调度事件路由(包:flatter/src/signatures/pointer#路由器。dart:120:18)
E/flatter(17095):#15 PointerRouter.route(包:flatter/src/signatures/pointer_router.dart:106:7)
E/flatter(17095):#16 GestureBinding.handleEvent(包:flatter/src/signatures/binding.dart:358:19)
E/flatter(17095):#17 GestureBinding.dispatchEvent(包:flatter/src/signatures/binding.dart:338:22)
E/flatter(17095):#18 renderbinding.dispatchEvent(包:flatter/src/rendering/binding.dart:267:11)
电子/颤振(17095):#19手势绑定。#手持点事件(包装:颤振/src/手势/绑定。省道:295:7)
E/flatter(17095):#20个手势绑定。(u flushPointerEventQueue(包装:flatter/src/signatures/binding.dart:240:7)
E/flatter(17095):#21手势绑定。"handlePointerDataPacket(包:flatter/src/signatures/binding.dart:213:7)
E/颤振(17095):#22 RootRunnary(dart:async/zone.dart:1206:13)
E/flatter(17095):#23 _CustomZone.runUnary(dart:async/zone.dart:1100:19)
E/flatter(17095):#24 _CustomZone.runUnaryGuarded(dart:async/zone.dart:1005:7)
E/颤振(17095):#25 _调用1(省道:ui/挂钩。省道:265:10)
E/flatter(17095):#26 dispatchPointerDataPacket(dart:ui/hooks.dart:174:5)
E/颤振(17095):
只需等待putFile
的结果,等待上传完成后再请求URL
await ref.putFile(_selectedImage);
var downloadUrl = await ref.getDownloadURL();
debugPrint(downloadUrl);
我建议查看更多详细信息。谢谢,这很好用。很高兴听到这个消息。在堆栈溢出时,通常使用左边的按钮向上投票并接受正确的有用答案。我已经尝试过了。当我投票认为答案有用时,会收到这样一条信息:“感谢您的反馈!声誉低于15的人所投的票会被记录下来,但不会更改公开显示的帖子分数。”。非常感谢你。但我可以说,由于这个简短的解决方案,我能够完成Firebase的其余工作。:)通过使用复选标记按钮,您应该能够接受正确的答案。