flutter - 将文件上传到 Firebase 存储不起作用
问题描述
当我尝试使用颤振将图像上传到 Firebase 存储时,它不起作用。它不会给出错误,但不会加载到 android 设备。它只是显示正在运行的 gradle task 'assemble task' .. 它不会从那里开始
这是我用来上传图片的代码noticeUpload.dart
import 'dart:io';
import 'dart:async';
import 'package:image_picker/image_picker.dart';
import 'package:flutter/material.dart';
import 'package:firebase_storage/firebase_storage.dart';
class NoticeUpload extends StatefulWidget {
@override
_NoticeUploadState createState() => _NoticeUploadState();
}
class _NoticeUploadState extends State<NoticeUpload> {
File sampleImage;
Future getImage()async{
var tempImage= await ImagePicker.pickImage(source: ImageSource.gallery );
setState(() {
sampleImage=tempImage;
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('Upload Notices'),
),
body: Row(
children:<Widget>[
sampleImage==null? Text('select image'):enableUpload(),
RaisedButton(
onPressed: getImage,
child: Text('uppload image'),
),
RaisedButton(
onPressed: (){
},
child:Text('uppload file') ,
)
]
),
);
}
Widget enableUpload(){
return Container(
child: Column(
children: <Widget>[
Image.file(sampleImage,height:200.0,width:100.0),
RaisedButton(
child:Text('Upload') ,
onPressed: (){
final StorageReference firebaseStorageRef=
FirebaseStorage.instance.ref().child('myimage.jpg');
final StorageUploadTask task=firebaseStorageRef.putFile(sampleImage);
},
)
],
),
);
}
}
这是 build.gradle 文件。
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
subprojects{
project.configurations.all{
resolutionStrategy.eachDependency{ details ->
if(details.requested.group=='com.android.support'
&& !details.requested.name.contains('multidex')
){
details.useVersion "28.0.0"
}
}
}
}
解决方案
final ref = FirebaseStorage.instance
.ref()
.child('user_image')
.child(_authResult.user.uid + '.jpg');
await ref.putFile(file).onComplete;
final url = await ref.getDownloadURL();
print("Image URL: " + url);
按照上面的代码检查您是否获得了 URL,如果您在项目中正确配置了 firebase,那么它应该可以工作;
推荐阅读
- python - 如何在 python (Recursion) 中进行二进制搜索,但不包括列表的最大值和最小值?
- python - flask_socketio 连接到客户端,但没有收到消息
- javascript - 在反应中 event.target.value 的类型应该更改为整数
- javascript - Vuetifys 在工具栏中添加单独的文本字段失败
- javascript - 在什么时候比较“整数”和“浮点数”等于“真”?
- unit-testing - 如何对具有协程`GlobalScope.launch`的函数进行单元测试
- algorithm - Kd树:具有易处理伪代码的最近邻搜索算法
- asp.net - 实体框架代码优先迁移类不起作用
- desktop-bridge - 卸载桌面应用程序时未清除注册表已转换的 win32 应用程序
- c++ - 致命错误 LNK1181:使用 NMake 和 Visual-Studio 2019 构建 Qt5 项目时无法打开输入文件“C:\Program.obj”