Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Flutter×é¼þѧϰ¡ªImage
 
  1917  次浏览      27
2019-8-6
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ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 Êý×é¼ÓÔØ³ÉͼƬ£¬Ó÷¨ÈçÏ£º

new Image.memory(bytes)

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

 
   
1917 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì