как вызвать функцию в формате 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 шт):

Автор решения: MiT

По идее должно быть так:

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,));
  }
}
→ Ссылка