基础组件Icon、ImageIcon、Image参数详解

2020-11-09  本文已影响0人  不一样的色彩

1.继承关系

Icon:       Object > Diagnosticable > DiagnosticableTree > Widget > StatelessWidget > Icon

ImageIcon:  Object > Diagnosticable > DiagnosticableTree > Widget > StatelessWidget > ImageIcon

2.Icon

2.1 介绍

图形图标,来自于所述的字体的字形绘制。图标不可交互式。
创建Icon对象要有IconData成员,而IconData可以从Icons类中直接获取!
在Flutter开发中,iconfont和图片相比有如下优势:

  1. 体积小:可以减小安装包大小。
  2. 矢量的:iconfont都是矢量图标,放大不会影响其清晰度。
  3. 可以应用文本样式:可以像文本一样改变字体图标的颜色、大小对齐等。
  4. 可以通过TextSpan和文本混用。

使用Material Design字体图标

Flutter默认包含了一套Material Design的字体图标,在pubspec.yaml文件中的配置如下

flutter:
  uses-material-design: true

Material Design所有图标可以在其官网查看:https://material.io/tools/icons/

如:new Icon(Icons.menu);

2.2 参数详解

const Icon(this.icon, {
    Key key,
    this.size,
    this.color,
    this.semanticLabel,
    this.textDirection,
  }) : super(key: key);
Icon(Icons.accessible,color: Colors.green,),
Icon(Icons.error,color: Colors.green,),
Icon(Icons.fingerprint,color: Colors.green,),
Text('\uE914',
            style: TextStyle(
            fontFamily: "MaterialIcons",
            fontSize: 48.0,
            color: Colors.green
            ),
          ),

通过这个示例可以看到,使用图标就像使用文本一样,但是这种方式需要我们提供每个图标的码点,这并对开发者不友好,所以,Flutter封装了IconData和Icon来专门显示字体图标,上面的例子也可以用如下方式实现:

Icons类中包含了所有Material Design图标的IconData静态变量定义。

3 Image

Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。

3.1 ImageProvider

ImageProvider 是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvider ,如AssetImage是实现了从Asset中加载图片的ImageProvider,而NetworkImage实现了从网络加载图片的ImageProvider。

Image widget有一个必选的image参数,它对应一个ImageProvider。下面我们分别演示一下如何从asset和网络加载图片。

  1. 在工程根目录下创建一个images目录,并将图片avatar.png拷贝到该目录。
  2. 在pubspec.yaml中的flutter(uses-material-design: true)部分添加如下内容:
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/ic_shouye_normal.png
    - images/ic_shouye_select.png

注意: 由于 yaml 文件对缩进严格,所以必须严格按照每一层两个空格的方式进行缩进,此处assets前面应有两个空格。

  1. 加载该图片
Image.asset('images/login_smallLogo.png',
       width: 100.0,
        ),
Image(
      image: AssetImage('images/login_smallLogo.png'),
       width: 80.0,
       ),
  1. 加载网络图片
Image(
                image: NetworkImage(
                    "https://avatars2.githubusercontent.com/u/20411648?s=460&v=4"),
                width: 80.0,
                ),

3.2 参数

Image在显示图片时定义了一系列参数,通过这些参数我们可以控制图片的显示外观、大小、混合效果等。我们看一下Image的主要参数:

const Image({
  ...
  this.width, //图片的宽
  this.height, //图片高度
  this.color, //图片的混合色值
  this.colorBlendMode, //混合模式
  this.fit,//缩放模式
  this.alignment = Alignment.center, //对齐方式
  this.repeat = ImageRepeat.noRepeat, //重复方式
  ...
})
上一篇下一篇

猜你喜欢

热点阅读