2017-06-21 96 views
0

假设我宣布我的形象在我的pubspec.yaml这样的:如何确定颤动中图像的宽度和高度?

assets: 
    - assets/kitten.jpg 

而且我扑代码是这样的:

void main() { 
    runApp(
    new Center(
     child: new Image.asset('assets/kitten.jpg'), 
    ), 
); 
} 

现在,我有一个new Image.asset(),我该如何确定宽度和该图像的高度?例如,我只想打印出图像的宽度和高度。

(它看起来像dart:ui's Image class具有高度和宽度,但不知道如何从控件的形象去镖:用户界面的图片。)

谢谢!

回答

2

如果你已经有一个Image小部件,您可以通过它ImageProvider调用resolve阅读ImageStream出来。

screenshot

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

void main() { 
    runApp(new MaterialApp(
    home: new MyHomePage(), 
)); 
} 

class MyHomePage extends StatelessWidget { 

    Widget build(BuildContext context) { 
    Image image = new Image.network('https://i.stack.imgur.com/lkd0a.png'); 
    Completer<ui.Image> completer = new Completer<ui.Image>(); 
    image.image 
     .resolve(new ImageConfiguration()) 
     .addListener((ImageInfo info, bool _) => completer.complete(info.image)); 
    return new Scaffold(
     appBar: new AppBar(
     title: new Text("Image Dimensions Example"), 
    ), 
     body: new ListView(
     children: [ 
      new FutureBuilder<ui.Image>(
      future: completer.future, 
      builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) { 
       if (snapshot.hasData) { 
       return new Text(
        '${snapshot.data.width}x${snapshot.data.height}', 
        style: Theme.of(context).textTheme.display3, 
       ); 
       } else { 
       return new Text('Loading...'); 
       } 
      }, 
     ), 
      image, 
     ], 
    ), 
    ); 
    } 
} 
2

您可以resolveImageProvider得到​​,然后使用addListener在图像准备就绪时通知。

screenshot

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

void main() { 
    runApp(new MaterialApp(
    home: new MyHomePage(), 
)); 
} 

class MyHomePage extends StatelessWidget { 

    Future<ui.Image> _getImage() { 
    Completer<ui.Image> completer = new Completer<ui.Image>(); 
    new NetworkImage('https://i.stack.imgur.com/lkd0a.png') 
     .resolve(new ImageConfiguration()) 
     .addListener((ImageInfo info, bool _) => completer.complete(info.image)); 
    return completer.future; 
    } 

    Widget build(BuildContext context) { 
    return new Scaffold(
     appBar: new AppBar(
     title: new Text("Image Dimensions Example"), 
    ), 
     body: new Center(
     child: new FutureBuilder<ui.Image>(
      future: _getImage(), 
      builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) { 
      if (snapshot.hasData) { 
       ui.Image image = snapshot.data; 
       return new Text(
       '${image.width}x${image.height}', 
       style: Theme.of(context).textTheme.display4); 
      } else { 
       return new Text('Loading...'); 
      } 
      }, 
     ), 
    ), 
    ); 
    } 
} 
+0

谢谢!所以基本上我不能使用图像小部件,如果我想知道愿望和高度? –

+0

我没有这么说!我会添加另一个答案来显示另一种方式。 –