Hir*_*iya 5 dart flutter flutter-web
NetworkImage我想在显示图像时或Image.network在显示图像之前获取属性值,例如宽度和高度。
我发现了以下好帖子,但它不起作用。它获得了大小值,但图像未加载到FutureBuilder.
我的代码如下;
\n\nimport \'dart:async\';\n\nimport \'package:flutter/material.dart\';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n // This widget is the root of your application.\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n home: MyHomePage(title: \'Flutter Demo Home Page\'),\n );\n }\n}\n\nclass MyHomePage extends StatefulWidget {\n MyHomePage({Key key, this.title}) : super(key: key);\n\n final String title;\n\n @override\n _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text(widget.title),\n ),\n body: Center(\n child: FutureBuilder(\n future: _getImage(),\n builder: (BuildContext context, AsyncSnapshot<Image> snapshot) {\n print(snapshot.hasData);\n if (snapshot.hasData) {\n return snapshot.data;\n } else {\n return Text(\'Loading...\');\n }\n },\n ),\n ),\n );\n }\n\n Future<Image> _getImage() async {\n final Completer completer = Completer();\n final String url = \'http://images-jp.amazon.com/images/P/4101098018.09.MZZZZZZZ\';\n final image = NetworkImage(url);\n\n image.resolve(ImageConfiguration())\n .addListener(ImageStreamListener((ImageInfo info, bool isSync) {\n print(info.image.width);\n completer.complete(info.image);\n }));\n\n return completer.future;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n结果是;\n - 屏幕仅显示“正在加载...”,并且图像未加载。\n -print输出如下。这应该意味着,FutureBuilder在加载图像之前调用两次,我们可以获得宽度,但FutureBuilder之后就不再调用。
false\nfalse\n112\nRun Code Online (Sandbox Code Playgroud)\n\n环境:
\n\n根据Abion47的建议,我成功获取了带有http包的图像。但即使在获取图像后我仍然无法获取宽度和/或高度值。或者,我用来response.body.length检查下载的图像是否有效。
Future<Image> _getImage() async {
Image _image;
final String url = 'http://images-jp.amazon.com/images/P/4101098018.09.MZZZZZZZ';
var response = await http.get(url);
print("Response status: ${response.statusCode}"); // 200
_image = Image.memory(response.bodyBytes);
print(_image.width); // still null
print(response.body.length); // this shows numbers. I'll use this.
return _image;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4970 次 |
| 最近记录: |