我似乎不能简单地将图像从硬盘加载到屏幕上。Image.network看起来很简单。但我不知道如何使用图像或Image.file。图像似乎需要一个流,所以我不认为这是我正在寻找的。
import 'package:flutter/material.dart';
import 'dart:io';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
File file = new File("Someimage.jpeg");
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Image.file(file), //doesn't work, but no errors
);
}
}我将Someimage添加到pubspec.yaml文件中,但这也不起作用:
assets:
- Someimage.jpeg有人能给我举个例子来说明这是怎么做到的吗?谢谢。
发布于 2018-04-15 17:13:24
下面是另一个使用jpg作为背景图像的示例。它还将不透明度应用于图像。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new Scaffold(
resizeToAvoidBottomPadding: false,
appBar: new AppBar(
title: new Text("test"),
),
body: new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
colorFilter: new ColorFilter.mode(Colors.black.withOpacity(0.6), BlendMode.dstATop),
image: new AssetImage("assets/images/keyboard.jpg"),
fit: BoxFit.cover,
),
),
),
),
);
}
}发布于 2019-06-03 16:57:02
Image与ImageProvider的区别与联系
创建一个显示图像的小部件。 要显示来自网络的映像或资产包,请考虑分别使用新的Image.network和新的Image.asset。
所以Image是一个小部件。就像html中的<img>标记。
标识图像,而不提交到精确的最终资产。这允许识别一组图像,然后根据环境(例如,设备像素比)对精确图像进行解析。
因此,ImageProvider就像Image的src属性。
现在,Image采用了一个参数image,这是一个ImageProvider。有四种获取ImageProvider的方法
AssetImage:
用于加载与apk一起打包的预定义图像集。
例如,为了显示横幅图像,一些自定义图标。NetworkImage:
用于从互联网上加载动态图像。FileImage:
用于从目标设备中的文件系统加载图像。
显示新下载的图像。MemoryImage:
用于从内存中加载原始图像。
例如,获取用户的壁纸并将其加载到小部件中。现在他们都是ImageProviders了。它们中的任何一个都可以用作image小部件的Image属性。flutter社区将扩展类添加到Image小部件本身,从而简化了语法。
所以
Image.asset(name)本质上是Image(image: AssetImage(name)),Image.file(path)本质上是Image(image: FileImage(File(path))),Image.network(url)本质上是Image(image: NetworkImage(url)),Image.memory(list)本质上是Image(image: MemoryImage(list))现在应该清楚的是
NetworkImage > FileImage > AssetImage > MemoryImage发布于 2018-04-16 18:13:41
下面是使用Image.file的一个示例。这不是推荐的方法,但是如果您通过http下载了应用程序中的映像,然后想要显示映像(例如,在安装过程中图像没有存储在资产中),则用例可能是这样的。
在您的pubspec.yaml中添加:
path_provider: ^0.2.2代码:
import 'dart:io';
import 'dart:async';
import 'package:path_provider/path_provider.dart';
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
Future<File> _getLocalFile(String filename) async {
String dir = (await getApplicationDocumentsDirectory()).path;
File f = new File('$dir/$filename');
return f;
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new FutureBuilder(
future: _getLocalFile("flutter_assets/image.png"),
builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
return snapshot.data != null ? new Image.file(snapshot.data) : new Container();
})
);
}
}要模拟下载映像,可以使用亚行推送映像:
adb push image.png /data/data/com.example.imagetest/app_flutter/flutter_assets/https://stackoverflow.com/questions/49835623
复制相似问题