首页 > 其他分享 >Flutter - 加载网络图片的几种方式

Flutter - 加载网络图片的几种方式

时间:2023-06-19 15:06:56浏览次数:62  
标签:network Image 几种 raw image new flutter Flutter 加载


对很多移动应用来说,加载网络图片是很常见的基本功能。Android中常用Glide等图片库。Flutter提供了Image组件来展示不同类型的图片。

加载网络图片有几种方式:

  • Image.network
  • FadeInImage.memoryNetwork
  • 使用cached_network_image中的CachedNetworkImage

使用Image.network加载图片

根据URL加载图片,使用Image.network构造器

Image.network(
  'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg',
)

Image组件也支持GIF格式的图片

使用方法如下,和上面的用法一样

Image.network(
  'https://github.com/flutter/plugins/raw/master/packages/video_player/doc/demo_ipod.gif?raw=true',
);

Image.network的例子

import 'package:flutter/material.dart';

void main() => runApp(new ImageDemoApp());

class ImageDemoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Image Demo',
      home: new HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new _HomePageState();

}

class _HomePageState extends State<HomePage> {

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('Web Image Demo Page'),),
      body: new ListView(children: <Widget>[
        Container(
          margin: EdgeInsets.only(bottom: 12.0),
          decoration: BoxDecoration(color: Colors.grey),
          child: Column(children: <Widget>[
            Image.network(
              'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg',
            ),
            Text('Image.network')
          ],),
        ),
        Container(
          margin: EdgeInsets.only(bottom: 12.0),
          decoration: BoxDecoration(color: Colors.grey),
          child: Column(children: <Widget>[
            Image.network(
              'https://github.com/flutter/plugins/raw/master/packages/video_player/doc/demo_ipod.gif?raw=true',
            ),
            Text('Image.network  Animated Gifs')
          ],),
        ),
      ],),
    );
  }

}

Flutter - 加载网络图片的几种方式_Image

有默认占位图和淡入效果

在图片加载过程中,给用户展示一张默认的图片,能提高用户体验。
使用FadeInImage组件来达到这个功能。FadeInImage能处理内存中,App资源或者网络上的图片。

加载网络图片

import 'package:transparent_image/transparent_image.dart';

FadeInImage.memoryNetwork(
  placeholder: kTransparentImage,
  image: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
);

示例效果

使用FadeInImage.memoryNetwork

import 'package:flutter/material.dart';
import 'package:transparent_image/transparent_image.dart';

void main() => runApp(new FadeInImageDemoApp());

class FadeInImageDemoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Image Demo',
      home: new HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new _HomePageState();
}

class _HomePageState extends State<HomePage> {

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('Fade In Image Demo Page'),),
      body: Stack(
        children: <Widget>[
          Center(child: CircularProgressIndicator()),
          Center(child: FadeInImage.memoryNetwork(
            image: 'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg',
            placeholder: kTransparentImage/* 透明图片 */,)),
        ],
      ),
    );
  }

}

Flutter - 加载网络图片的几种方式_android_02

使用应用内的图片来做占位图

使用FadeInImage.assetNetwork

代码

class _HomePageState extends State<HomePage> {

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('Fade In Image Demo Page'),),
      body: Center(child: FadeInImage.assetNetwork(
        image: 'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg',
        placeholder: 'images/birds.gif' /* 指定gif */,)),
    );
  }

}

Flutter - 加载网络图片的几种方式_android_03

使用缓存图片

使用cached_network_image包。参照

CachedNetworkImage(
  imageUrl: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
);

添加placeholder
cached_network_image的placeholder支持任意组件,比如CircularProgressIndicator

CachedNetworkImage(
  placeholder: CircularProgressIndicator(),
  imageUrl: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
);

代码示例

import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cached image load',
      home: Scaffold(appBar: AppBar(title: new Text('Cache Image Load'),),
        body: Center(child: CachedNetworkImage(
            placeholder: CircularProgressIndicator(),
            imageUrl: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true'),),),
    );
  }

}

标签:network,Image,几种,raw,image,new,flutter,Flutter,加载
From: https://blog.51cto.com/u_16163453/6513736

相关文章

  • 如何加载100M的图片却不撑爆内存,一张 100M 的大图,如何预防 OOM?
    还记得当年面试一个面试官问我怎么加载巨图才能不撑爆内存,我没回答上来,他说分片显示,我寻思特么分片能减少内存使用??现在可以打他脸了!内容扩展1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?2.内存中如果加载一张500*500的png高清图片.应该是占用多少......
  • 云服务器无法正常关机/重启的几种原因
    大家在使用个人电脑或服务器的时候经常会遇到无法正常关机/重启的情况,其中Windows系统比较常见。关于服务器无法正常关机/重启的情况,我们大致总结了几个常见的原因:1、系统文件中自动关机程序的缺陷。假如我们在“开始/运行”中输入命令“rundll32user.exe,exitwindows”看看能否正......
  • 2023年Flutter开发前景如何,能找到工作吗?
    引言Flutter自诞生之日起,从来都稳坐风口浪尖,关注与争议一直伴随其身。学习一门技术的时候大家最关心的就是发展前景怎么样,学习Flutter的朋友也不例外,那就让我们一起来看看2023年Flutter开发前景到底怎么样吧。Flutter开发前景从上图的数据可以看出,虽然Flutter开发岗位的招聘在减......
  • Flutter 绘制探索 | 操作坐标系范围
    前言在视频【Flutter绘制指南|第二集·坐标系】中,实现了画板区域内的单位坐标系。今天来拓展一下,让坐标系支持变换,比如坐标系的平移和缩放,从而让坐标系的功能更加完备。本文要实现的效果如下,可以通过下方的七个按钮操作坐标系的范围,这样可以查看在当前定义域内的函数曲线,也......
  • 关于flutter框架安卓应用抓包问题,以及解决方法
    参考文档https://bbs.kanxue.com/thread-261941.htm一.从安装的app所在文件夹目录中提出libflutter.socd/data/app/包名/lib/xxx/..../...libflutter.so二.将其拖入ida中进行分析字符串窗口搜索ssl_server按x进入F5看了一下和上面博客说的相似不理解上面说的也......
  • 在 JavaScript 中,判断一个对象是否为空有几种方法。
    使用Object.keys()方法检查对象的键值对数量:functionisObjectEmpty(obj){returnObject.keys(obj).length===0;}//示例用法constobj1={};console.log(isObjectEmpty(obj1));//输出:trueconstobj2={name:'John',age:25};console.log(isObjectEm......
  • 一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法
    这篇外传之前有这么几篇文章:《一个执行计划异常变更的案例-前传》《一个执行计划异常变更的案例-外传之绑定变量窥探》上一篇文章介绍了绑定变量以及11g之前绑定变量窥探的影响,这篇文章会介绍几种查看绑定变量值的方法。上篇文章我们说了,绑定变量实际是一些占位符,可以让仅......
  • Flutter 3.7 正式发布
    新的Flutter稳定版加入了Material3更新、iOS平台优化及其他内容新年伊始,由Flutter3.7正式版来「打头阵」!我们与整个Flutter社区成员们继续在Flutter3.7中优化了框架,包括创建自定义菜单栏和层叠式菜单、更好的国际化工具支持、新的调试工具以及其他功能和特性等。新的......
  • FlutterUnit 工具集录 | IconFont 类代码自动生成
    1.IconFont类代码生成器的作用首先介绍一下FlutterUnit中,代码生成菜单下的IconFont工具的作用。它主要解决Flutter项目中自定义字体图标使用的问题:字体图标调用类代码的自动生成。pubspec.yaml中字体图标节点的自动配置。多个自定义字体图标节点的支持。一键自动生成相......
  • 2023 年第一弹, Flutter 3.7 发布啦,快来看看有什么新特性
    2023年新春之际,Flutter喜提了3.7的大版本更新,在Flutter3.7中主要有改进框架的性能,增加一些很棒的新功能,例如:创建自定义菜单栏、级联菜单、更好地支持国际化的工具、新的调试工具等等。另外Flutter3.7还改进了Globalselection、使用Impeller提升渲染能力、DevTools等......