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 在Flatter中将图像上载到FireBase后无法获取下载URL_Flutter_Dart_Firebase Storage - Fatal编程技术网

Flutter 在Flatter中将图像上载到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

在我上传我的图片到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_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的其余工作。:)通过使用复选标记按钮,您应该能够接受正确的答案。