Как получить размер от NetworkImage во флаттере - PullRequest
0 голосов
/ 24 апреля 2020

Я создал класс, который должен возвращать размер сетевого изображения, но он не работает, я не знаю почему. Поэтому я хочу работать так, чтобы URL-адрес изображения передавался в класс, а затем вызывается функция _ImageSize конструктора класса, которая устанавливает свойство высоты и ширины класса

import 'dart:async';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';

class ImageSize {
  double height;
  double width;
  final String imgName;

  ImageSize(this.imgName) {
    _imageSize();
  }

  void _imageSize() {
    Future<ui.Image> _getImageInfo() {
      Completer<ui.Image> completer = Completer<ui.Image>();
      NetworkImage(this.imgName).resolve(ImageConfiguration()).addListener(
        ImageStreamListener(
          (ImageInfo info, bool _) => completer.complete(info.image),
        ),
      );
      return completer.future;
    }

    _getImageInfo().then((size) {
      print(size);
      height = size.height.toDouble();
      width = size.width.toDouble();
    }).catchError((e) {
      print(e);
    });
  }
}

main() async {
  double height = ImageSize(
      'https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&dpr=1&w=500'
  ).height;
  print(height);
}

1 Ответ

0 голосов
/ 24 апреля 2020

Используйте следующий код

class ImageSize {
  double height;
  double width;
  final String imgName;

  ImageSize(this.imgName) {
    _imageSize();
  }

  void _imageSize() {
    Future<Size> _getImageInfo() {
      Completer<Size> completer = Completer();
      Image image = Image.network(this.imgName);
      image.image.resolve(ImageConfiguration()).addListener(
        ImageStreamListener(
          (ImageInfo image, bool synchronousCall) {
            var myImage = image.image;
            Size size = Size(myImage.width.toDouble(), myImage.height.toDouble());
            completer.complete(size);
          },
        ),
      );
      return completer.future;
    }

    _getImageInfo().then((size) {
      print(size);
      height = size.height.toDouble();
      width = size.width.toDouble();
    }).catchError((e) {
      print(e);
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...