#flutter
#flutter
Вопрос:
import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:campus/Service/Firebase_Firestore_END.dart';
class Profile extends StatefulWidget {
File _imagefile;
@override
_ProfileState createState() => _ProfileState();
}
class _ProfileState extends State<Profile> {
String url;
**Use This Method To get URL From Firestore**
void getAvatar() async {
final FirebaseAuth auth = FirebaseAuth.instance;
final FirebaseUser user = await auth.currentUser();
final uid = user.uid;
DocumentSnapshot data = await Firebase_Firestore_END.getAccData(uid) as DocumentSnapshot;
url= data.data['Avatar'];
print("URL:" url);
// return data.data['Avatar'];
}
@override
void initState(){
getAvatar(); //Call Methor Here
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Stack(
children: <Widget>[
Container(
decoration: BoxDecoration(
border:
Border.all(width: 1, color: Colors.blueGrey),
borderRadius:
BorderRadius.all(Radius.circular(50))),
child: CircleAvatar(
radius: 50,
backgroundColor: Colors.transparent,
backgroundImage: widget._imagefile != null
? FileImage(widget._imagefile)
**: CachedNetworkImageProvider(url),//Faliled Assertion Here**
),
),
],
),
),
);
}
}
В чем проблема с этим кодом? При горячей перезагрузке это работает, но если я перезапущу приложение. Произошла ошибка (url=null). Кто-нибудь может помочь мне найти ошибку? Я пробовал так много способов, но я сталкиваюсь с той же ошибкой. Я не знаю, почему это произошло. Я вызываю функцию установки url в
initState()
но каждый раз URL-адрес был нулевым во время запуска
Ответ №1:
Измените этот код:
String url;
Для
String url = '';
а также может изменить этот, потому async
что функция возвращает Future<void>
Future<void> getAvatar() async{
...
}
Ответ №2:
Прежде всего, вам нужно инициализировать url
с помощью
String url = ''
Но я думаю, что проблема в том, что getAvatar()
функция есть async
.
Это приводит к завершению кода без ожидания функции. К сожалению, вы не можете await
внутри initState
.
Оберните часть, в которой вы url
задаете setState();
, следующим образом:
setState((){url = ...});
Кроме того, вы можете использовать что-то вроде заполнителя, пока изображение или URL не будут загружены.
Комментарии:
1. почему вы редактируете свой ответ после моего ответа?
Ответ №3:
Возможно, вы использовали одинарную кавычку вместо «для определения и запроса URL-адреса, например:
setState(() {
var productJson= json.decode(utf8.decode(response.bodyBytes));
for(var i in productJson){
var productIteam=product(i['product_name'], i['id'],i['price'] , i["image_url"], i['off'], i['description']);
_items.add(productIteam);
}
});
этот код истинный, потому что используйте «» => i["image_url"]
но этот код неверен
я[‘image_url’]