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 存储插件需要大量时间来上传文件

Flutter firebase 消息推送通知格式 3 行

带有一个适用于android、ios、web的插件的flutter firebase(实时)数据库? [复制]

Flutter IOS - 我是不是必须获得真正的 IOS 设备才能上传应用商店?

Flutter:如何使用 Firebase PhoneNumberAuth 修复丢失与设备的连接错误