±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚjianshu£¬ÎÄÕÂ
Ïêϸ½éÉÜÁËFlutter ÖÐµÄ Image ×é¼þµÄ¹¹Ôì·½·¨ÒÔ¼°ÊµÏÖÔ²½ÇµÄÏêϸ´úÂëµÈ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£ |
|
ÐòÑÔ
֮ǰ£¬ÎÒÃǽ²ÁË Flutter ÖÐ Text ×é¼þµÄһЩÓ÷¨ÒÔ¼°
API£¬±¾½ÚÎÒÃǼÌÐøÑ§Ï° Flutter ÖÐµÄ Image ×é¼þ£¬Í¬ÑùÏÈÉÏͼ£º

Image×é¼þµÄ¹¹Ôì·½·¨
ÔÚ Android ÖУ¬ÎÒÃǶ¼ÖªµÀ£¬Í¼Æ¬µÄÏÔʾ·½Ê½Óкܶ࣬×ÊԴͼƬ¡¢ÍøÂçͼƬ¡¢ÎļþͼƬµÈµÈ£¬ÔÚ Flutter
ÖÐÒ²ÓжàÖÖ·½Ê½£¬ÓÃÀ´¼ÓÔØ²»Í¬ÐÎʽµÄͼƬ£ºImage£ºÍ¨¹ýImageProviderÀ´¼ÓÔØÍ¼Æ¬
Image.asset£ºÓÃÀ´¼ÓÔØ±¾µØ×ÊԴͼƬ
Image.file£ºÓÃÀ´¼ÓÔØ±¾µØ£¨FileÎļþ£©Í¼Æ¬
Image.network£ºÓÃÀ´¼ÓÔØÍøÂçͼƬ
Image.memory£ºÓÃÀ´¼ÓÔØUint8List×ÊÔ´£¨byteÊý×飩ͼƬ
1¡¢Image
Image µÄÒ»¸ö²ÎÊýÊÇ ImageProvider£¬»ù±¾ÉÏËùÓÐÐÎʽµÄͼƬ¼ÓÔØ¶¼ÊÇÒÀÀµËü£¬Õâ¸öÀàÀïÃæ¾ÍÊÇʵÏÖͼƬ¼ÓÔØµÄÔÀí¡£Ó÷¨ÈçÏ£º
new Image(image:
new AssetImage('images/logo.png'));
new Image(image: new NetworkImage('http://n.sinaimg.cn/sports
/2_img/upload/cf0d0fdd/107/w1024h683/20181128/pKtl-hphsupx4744393.jpg')) |
2¡¢Image.asset
¼ÓÔØÒ»¸ö±¾µØ×ÊԴͼƬ£¬ºÍ Android Ò»Ñù£¬ÓжàÖÖ·Ö±æÂʵÄͼƬ¿É¹©Ñ¡Ôñ£¬µ«ÊÇÑØÏ®µÄÊÇ iOS µÄͼƬ·ç¸ñ£¬·ÖΪ
1x£¬2x£¬3x£¬¾ßÌå×ö·¨ÊÇÔÚÏîÄ¿µÄ¸ùĿ¼Ï´´½¨Á½¸öÎļþ¼Ð£¬ÈçÏÂͼËùʾ£º

È»ºóÐèÒªÔÚ pubspec.yaml ÎļþÖÐÉùÃ÷һϣº
flutter:
# The following line ensures that the Material
Icons font is
# included with your application, so that you
can use the icons in
# the material Icons class.
uses-material-design: true
assets:
- images/logo.png
- images/2.0x/logo.png
- images/3.0x/logo.png |
Ó÷¨ÈçÏ£º
new Image.asset('images/logo.png') |
3¡¢Image.file
¼ÓÔØÒ»¸ö±¾µØ File ͼƬ£¬±ÈÈçÏà²áÖеÄͼƬ£¬Ó÷¨ÈçÏÂ
new Image.file(new
File('/storage/xxx/xxx/test.jpg')) |
4¡¢Image.network
¼ÓÔØÒ»¸öÍøÂçͼƬ£¬Ó÷¨ÈçÏ£º
new Image.network('http://n.sinaimg.cn/sports
/2_img/upload/cf0d0fdd/107/w1024h683/20181128
/pKtl-hphsupx4744393.jpg') |
ÓеÄʱºòÎÒÃÇÐèÒªÏñAndroidÄÇÑùʹÓÃÒ»¸öռλͼ»òÕßͼƬ¼ÓÔØ³ö´íʱÏÔʾijÕÅÌØ¶¨µÄͼƬ£¬ÕâʱºòÐèÒªÓõ½
FadeInImage Õâ¸ö×é¼þ£º
new FadeInImage.assetNetwork(
placeholder: 'images/logo.png',
image: imageUrl,
width: 120,
fit: BoxFit.fitWidth,
)
new FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: imageUrl,
width: 120,
fit: BoxFit.fitWidth,
) |
µÚÒ»ÖÖ·½·¨ÊǼÓÔØÒ»¸ö±¾µØµÄռλͼ£¬µÚ¶þÖÖÊǼÓÔØÒ»¸ö͸Ã÷µÄռλͼ£¬µ«ÊÇÐèҪעÒâµÄÊÇ£¬Õâ¸ö×é¼þÊDz»¿ÉÒÔÉèÖüÓÔØ³ö´íÏÔʾµÄͼƬµÄ£»ÕâÀïÓÐÁíÒ»ÖÖ·½·¨¿ÉÒÔʹÓõÚÈý·½
package µÄ CachedNetworkImage ×é¼þ£º
new CachedNetworkImage(
width: 120,
fit: BoxFit.fitWidth,
placeholder: new CircularProgressIndicator(),
imageUrl: imageUrl,
errorWidget: new Icon(Icons.error),
) |
CachedNetworkImage ×é¼þÖеÄռλͼÊÇÒ»¸ö Widget£¬ÕâÑùµÄ»°¾Í¿ÉÒÔ×Ô¶¨ÒåÁË£¬ÄãÏëʹÓÃʲôÑùµÄ×é¼þ½øÐÐռλ¶¼ÐУ¬Í¬Ñù¼ÓÔØ³ö´íµÄռλͼҲÊÇÒ»¸ö×é¼þ£¬Ò²¿ÉÒÔ×Ô¼º¶¨Ò壻¸Ã×é¼þÒ²ÊÇͨ¹ý»º´æÀ´¼ÓÔØÍ¼Æ¬µÄ¡£
5¡¢Image.memory
ÓÃÀ´½«Ò»¸ö byte Êý×é¼ÓÔØ³ÉͼƬ£¬Ó÷¨ÈçÏ£º
Text×é¼þµÄAPI

fit ÊôÐÔÖÐÓкܶàÖµ¿ÉÒÔÉèÖãº

colorBlendMode ÊôÐÔÖÐÓкܶàÖµ¿ÉÒÔÉèÖã¬ÓÉÓÚ¿Éѡֵ̫¶à£¬ÕâÀï¾Í²»Ò»Ò»½éÉÜÁË£¬ÓÐÐËȤµÄ¿ÉÒÔÈ¥¹ÙÍøcolorBlendModeÊôÐÔ½éÉÜ¿´¿´
ʵÏÖÔ²½Ç/Ô²ÐÎͼƬ
1¡¢Ô²½Ç
ºÜ¶àʱºòÎÒÃÇÐèÒª¸øÍ¼Æ¬ÉèÖÃÔ²½Ç£¬ÄÇôÔÚflutterÖÐÊÇÔõôʵÏÖµÄÄØ£¿ÓкܶàÖÖ·½·¨¿ÉÒÔʵÏÖ£¬ÏÂÃæÎÒ¾ÙÁ½¸öÀý×Ó£º
ʹÓòüôÀ´ÊµÏÖͼƬԲ½Ç£º
new ClipRRect(
child: Image.network(
imageUrl,
scale: 8.5,
fit: BoxFit.cover,
),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
)
ʹÓñ߿òÀ´ÊµÏÖͼƬԲ½Ç£º
new Container(
width: 120,
height: 60,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(10.0),
image: DecorationImage(
image: NetworkImage(imageUrl),
fit: BoxFit.cover),
),
) |
ÐèҪעÒâµÄÊÇ£¬Ê¹Óñ߿òʵÏÖµÄʱºòҪעÒâÉèÖà fit ÊôÐÔ£¬²»È»Ð§¹ûÒ²ÊÇÓÐÎÊÌâµÄ£¬µ±È»ÁËÄ㻹¿ÉÒÔʹÓÃ
Material ×é¼þÀ´ÊµÏÖ£¬Õâ¸ö´ó¼Ò¿ÉÒÔ×Ô¼ºÈ¥³¢ÊÔ¡£
2¡¢Ô²ÐÎ
Ô²ÐÎͼƬÓõÃ×î¶àµÄÓ¦¸ÃÊÇÍ·ÏñÖ®ÀàµÄ£¬ÕâÖÖͬÑùÓжàÖÖ·½Ê½¿ÉÒÔʵÏÖ£¬ÏÂÃæÎÒÒ²¾ÙÁ½¸öÀý×Ó£º
ʹÓòüôʵÏÖÔ²ÐÎͼƬ£º
new ClipOval(
child: Image.network(
imageUrl,
scale: 8.5,
),
)
ʹÓÃCircleAvatarÀ´ÊµÏÖÔ²ÐÎͼƬ£º
new CircleAvatar(
backgroundImage: NetworkImage(imageUrl),
radius: 50.0,
) |
µ±È»ÁË£¬Ä㻹¿ÉÒÔʹÓñ߿ò BoxDecoration À´ÊµÏÖ£¬Ð§¹ûÒ²ÊÇÒ»ÑùµÄ¡£
ÏÂÃæÀ´¿´Ò»ÏÂÏêϸµÄ´úÂëʵÏÖ£º
class _ImageViewWidget
extends State<ImageViewWidget> {
var imageUrl =
"http://n.sinaimg.cn/sports/2_img/upload
/cf0d0fdd/107/w1024h683/20181128/pKtl-hphsupx4744393.jpg";
var imageUrl2 =
"http://n.sinaimg.cn/sports/2_img/upload
/4f160954/107/w1024h683/20181128/Yrxn-hpinrya6814381.jpg";
@override
Widget build(BuildContext context) {
return new Align(
child: ListView(
children: <Widget>[
new Text('×ÊԴͼƬ£º'),
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Padding(
padding: const EdgeInsets.all(10.0),
child: Image.asset(
'images/logo.png',
),
),
// new Image.file(
// File('/storage/emulated/0/Download/test.jpg'),
// width: 120,
// //fill(ȫͼÏÔʾÇÒÌî³äÂú£¬Í¼Æ¬¿ÉÄÜ»áÀÉì)£¬contain£¨È«Í¼ÏÔʾµ«²»³äÂú£¬ÏÔʾԱÈÀý£©£¬cover£¨ÏÔʾ¿ÉÄÜÀÉ죬Ҳ¿ÉÄܲüô£¬³äÂú£©
// //fitWidth£¨ÏÔʾ¿ÉÄÜÀÉ죬¿ÉÄܲüô£¬¿í¶È³äÂú£©£¬fitHeightÏÔʾ¿ÉÄÜÀÉ죬¿ÉÄܲüô£¬¸ß¶È³äÂú£©£¬scaleDown£¨Ð§¹ûºÍcontain²î²»¶à£¬µ«ÊÇ£©
// ),
],
),
new Text('ÍøÂçռλͼƬCachedNetworkImage£º'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Image.network(
imageUrl,
scale: 8.5,
),
new Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0.0,
10.0, 0.0),
child: CachedNetworkImage(
width: 120,
fit: BoxFit.fitWidth,
placeholder: Image(image: AssetImage('images/logo.png')),
imageUrl: imageUrl,
errorWidget: new Icon(Icons.error),
),
),
new CachedNetworkImage(
imageUrl: imageUrl,
width: 120,
fit: BoxFit.fitWidth,
placeholder: CircularProgressIndicator(),
errorWidget: new Icon(Icons.error),
)
],
),
),
new Text('ÍøÂçռλͼƬFadeInImage£º'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: new Row(
children: <Widget>[
new FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: imageUrl,
width: 120,
fit: BoxFit.fitWidth,
),
new Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0.0,
10.0, 0.0),
child: new FadeInImage.assetNetwork(
placeholder: 'images/logo.png',
image: imageUrl,
width: 120,
fit: BoxFit.fitWidth,
),
),
],
mainAxisAlignment: MainAxisAlignment.center,
),
),
new Text('Ô²ÐÎÔ²½ÇͼƬ£º'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new ClipOval(
child: Image.network(
imageUrl,
width: 100,
height: 100,
fit: BoxFit.fitHeight,
),
),
new Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0.0,
10.0, 0.0),
child: ClipOval(
child: Image.asset(
'images/logo.png',
width: 100,
height: 100,
fit: BoxFit.fitHeight,
),
),
),
new ClipRRect(
child: Image.network(
imageUrl,
scale: 8.5,
fit: BoxFit.cover,
),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
)
],
),
),
new Text('ÑÕÉ«»ìºÏͼƬ£º'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Image.asset(
'images/logo.png',
color: Colors.red,
colorBlendMode: BlendMode.darken,
),
new Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0.0,
10.0, 0.0),
child: Image.network(
imageUrl,
scale: 8.5,
colorBlendMode: BlendMode.colorDodge,
color: Colors.blue,
),
),
],
),
),
new Text('centerSliceͼƬÄÚ²¿ÀÉ죺'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: new Image.asset(
'images/logo.png',
width: 250,
height: 250,
fit: BoxFit.contain,
centerSlice:
new Rect.fromCircle(center: const Offset(20,
20), radius: 1),
),
),
new Text('matchTextDirectionͼƬÄÚ²¿·½Ïò'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Directionality(
textDirection: TextDirection.ltr,
child: Image.network(
imageUrl,
height: 100,
matchTextDirection: true,
fit: BoxFit.fitHeight,
),
),
new Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0.0,
10.0, 0.0),
child: Directionality(
textDirection: TextDirection.rtl,
child: Image.network(
imageUrl,
height: 100,
matchTextDirection: true,
fit: BoxFit.fitHeight,
),
),
),
],
),
),
new Text('µã»÷Ìæ»»Í¼Æ¬'),
new Padding(
padding: const EdgeInsets.fromLTRB(0.0, 10.0,
0.0, 10.0),
child: Row(
children: <Widget>[
new RaisedButton(
onPressed: () {
setState(() {
widget.networkImage =
new NetworkImage(imageUrl2, scale: 8.5);
});
},
child: Text('µã»÷¸ü»»Í¼Æ¬'),
),
new Image(
gaplessPlayback: false,
fit: BoxFit.contain,
image: widget.networkImage,
),
],
),
)
],
),
);
}
} |
´úÂëÒÑÉÏ´«ÖÁGithub
|