IOS设备上Flutter firebase上传照片问题
Posted
技术标签:
【中文标题】IOS设备上Flutter firebase上传照片问题【英文标题】:Flutter firebase upload photo problem on IOS devices 【发布时间】:2021-10-18 01:14:53 【问题描述】:我想从画廊上传一张图片。 android 设备运行完美但是当我点击 ios 设备上的更改按钮时,我收到错误“引发了另一个异常:LateInitializationError: Field 'indirmeBaglantisi' has not been initialized.”
什么可能导致此错误?这是我的代码:
class _AyarlarState extends State<Ayarlar>
final AuthService _auth = AuthService();
FirebaseAuth auth = FirebaseAuth.instance;
late String indirmeBaglantisi;
late File yuklenecekDosya;
@override
void initState()
super.initState();
WidgetsBinding.instance!.addPostFrameCallback((_) => baglantiAl());
baglantiAl() async
String baglanti = await FirebaseStorage.instance
.ref()
.child("profilresimleri")
.child(auth.currentUser!.uid)
.child("profilResmi.png").getDownloadURL();
setState(()
indirmeBaglantisi = baglanti;
);
kameradanYukle() async
// ignore: deprecated_member_use
var alinanDosya = await ImagePicker().getImage(source: ImageSource.gallery);
setState(()
yuklenecekDosya = File(alinanDosya!.path);
);
Reference referansYol = FirebaseStorage.instance
.ref()
.child("profilresimleri")
.child(auth.currentUser!.uid)
.child("profilResmi.png");
UploadTask yuklemeGorevi = referansYol.putFile(yuklenecekDosya);
String url = await (await yuklemeGorevi).ref.getDownloadURL();
setState(()
indirmeBaglantisi = url;
);
@override
Widget build(BuildContext context)
return Scaffold(
body: Container(
color: Colors.black,
child: Stack(
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Color(0XFF1E1E37),
),
),
Padding(
padding: EdgeInsets.only(top:130),
child: Column(
children: <Widget> [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget> [
Container(
child: Row(
children: [
ClipOval(
child: indirmeBaglantisi == null ? Image.asset("assets/images/Oval2.png") : Image.network(indirmeBaglantisi,height: 100,width:100 ,fit:BoxFit.fitWidth),
)
],
),
),
],
),
SizedBox(height: 20),
// ignore: deprecated_member_use
RaisedButton.icon(
padding: EdgeInsets.symmetric(vertical: 8.0,horizontal: 10.0),
onPressed: ()
kameradanYukle();
,
shape:RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(30)),
) ,
icon: Icon(Icons.insert_photo_outlined, color: Colors.blue,), label: Text('Profil Fotoğrafını Değiştir'),
color: Colors.white,
),
【问题讨论】:
【参考方案1】:您可能忘记请求使用用户照片库的权限,因为这是您必须在 IOS 上执行的操作。
转到您的 IOS 文件夹,然后在其中转到 Runner 文件夹。找到 info.plist 文件并添加以下内容:
<key>NSPhotoLibraryUsageDescription</key>
<string>Allow access to photo library?</string>
您可以将第二行的文本替换为您希望用户看到的任何内容。
【讨论】:
以上是关于IOS设备上Flutter firebase上传照片问题的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 电话身份验证 (Flutter) 在某些 iOS 设备中不起作用
Flutter firebase 存储插件需要大量时间来上传文件
带有一个适用于android、ios、web的插件的flutter firebase(实时)数据库? [复制]