Как получить оригинальный размер изображения в Dart Image.network? - PullRequest
0 голосов
/ 16 марта 2020

Следующий код дает Division by null error,

  @override
  Widget build(BuildContext context) {
    Image image = Image.network(data['image-url']);
    double widthToHeight = image.width / image.height;

    if(widthToHeight <= 0.2) {
      return NewsTileSmall(data: data);
    } else {
      return NewsTileLarge(data: data);
    }
  }

Лучше всего, если бы я мог использовать функцию для установки значения double widthToHeight.

1 Ответ

1 голос
/ 16 марта 2020

В вашем методе сборки вам нужно предварительно загрузить изображение.

Image image = new Image.network('image-url');
    Completer<ui.Image> completer = new Completer<ui.Image>();
    image.image
      .resolve(new ImageConfiguration())
      .addListener(ImageStreamListener(ImageInfo info, bool _) { 
        completer.complete(info.image));
      })

Затем вам нужно использовать FutureBuilder

FutureBuilder<ui.Image>(
            future: completer.future,
            builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) {
              if (snapshot.hasData){
                return your image Widget}
              else{
                return placeholder widget
    }

завершенный метод сборки

import 'dart:ui' as ui;

Image image = Image.network('image url');
        final completer = Completer<ui.Image>();
        image.image
          .resolve(const ImageConfiguration()).
          addListener(ImageStreamListener((ImageInfo info, bool syncCall) => completer.complete(info.image)));
        return Scaffold(
          appBar:  AppBar(
            title: const Text("Image Dimensions Example"),
          ),
          body: FutureBuilder<ui.Image>(
                future: completer.future,
                builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) {
                  if (snapshot.hasData) {
                    return Text(
                      '${snapshot.data.width}x${snapshot.data.height}',
                    );
                  } else {

                    return const Text('Loading...');
                  }
                },
              )
          );
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...