как вызвать функцию в формате String
я получаю изображение с помощью класса
class ImageLoader extends StatefulWidget{
final String imageBytes;
final Brand brand;
const ImageLoader({Key key, this.imageBytes, this.brand}) : super(key: key);
@override
Widget build(BuildContext context, index){
_ImageLoaderState();
}
@override
_ImageLoaderState createState() => _ImageLoaderState();
}
class _ImageLoaderState extends State<ImageLoader> {
final FirebaseStorage storage = FirebaseStorage(
storageBucket: 'gs://any.appspot.com');
String errorMsg;
String imageBytes;
_ImageLoaderState() {
storage.ref().child('images/image.jpeg').getDownloadURL().then((url) =>
setState(() {
imageBytes = url;
})
).catchError((e) =>
setState(() {
errorMsg = e.error;
})
);
}
@override
void initState() {
super.initState();
imageBytes = widget.imageBytes;
}
@override
Widget build(BuildContext context) {
return Container(child: Image.network(imageBytes, fit: BoxFit.fill,));
}
}
Как я могу вызвать изображение использую файл данных?
вызов пути изображения у меня выглядит так '${brand.model[0].model_image.image}'
возвращает путь к изображению в формате images/folder/image.jpeg
когда я пытаюсь добавить ${brand.model[0].model_image.image} в child storage.ref().child('images/image.jpeg').getDownloadURL().then((url) получаю ошибку brand не инициализирована, но когда я пытаюсь инициализировать brand, то получаю (url = null)
в общем, я пытаюсь получить 'gs://any.appspot.com' + '${brand.model[0].model_image.image}' то есть ссылку на конкретное изображение, чтобы мой ListView.builder показывал изображения с учетом индекса
спасибо за любую помощь
Ответы (1 шт):
По идее должно быть так:
ListView.builder(
itemCount: brand.lenght,
itemBuilder: (c, i) => ImageLoader(brand.model[i]),
)
...
class ImageLoader extends StatefulWidget{
final BrandModel model;
const ImageLoader(this.model, {Key key}) : super(key: key);
@override
_ImageLoaderState createState() => _ImageLoaderState();
}
class _ImageLoaderState extends State<ImageLoader> {
final FirebaseStorage storage;
String errorMsg;
String image;
@override
void initState() {
super.initState();
storage = FirebaseStorage(storageBucket: 'gs://any.appspot.com');
storage.ref().child(widget.model.model_image.image).getDownloadURL().then((url) =>
setState(() {
image = url;
})
).catchError((e) =>
setState(() {
errorMsg = e.error;
})
);
}
@override
Widget build(BuildContext context) {
return Container(child: Image.network(image, fit: BoxFit.fill,));
}
}