# #ios #firebase #flutter #file-upload #firebase-storage
Вопрос:
Я хочу загрузить изображение из галереи в flutter. Устройства Android работают отлично, однако, когда я нажимаю кнопку «Изменить» на устройствах Ios, я получаю сообщение об ошибке » Было выдано другое исключение: Ошибка LateInitializationError: Поле «indirmeBaglantisi» не было инициализировано».
Что может быть причиной этой ошибки? Вот мой код:
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>
Вы можете заменить текст второй строки тем, что хотите, чтобы пользователь видел.