首页 > 其他分享 >Flutter不常用组件(二)

Flutter不常用组件(二)

时间:2022-12-02 13:00:10浏览次数:65  
标签:常用 const color Text Widget child 组件 Flutter

ColoredBox

一般我们想要一个带有背景颜色的组件我们会使用哪个组件?当然第一个想到的就是Container。其实在 Flutter 中还要一个专门用来设置颜色的组件ColoredBox

该组件有以下几个属性:

  • Key? key:标识键
  • Color color:颜色
  • Widget? child:子组件
const ColoredBox(
  color: Colors.blue,
  child: SizedBox.expand(),
),

![Slide 16_9 - 11](F:\学习\flutter\images\Slide 16_9 - 11.png)

ColorFiltered

颜色滤镜。

该组件有以下几个属性:

  • Key? key:标识键
  • ColorFilter colorFilter:颜色滤镜
  • Widget? child:子元素
ColorFiltered(
  colorFilter: const ColorFilter.mode(Colors.grey, BlendMode.color),
  child: Image.asset("assets/images/hmbb.png", fit: BoxFit.cover),
),

image

CompositedTransformFollower 和 CompositedTransformTarget

可以让CompositedTransformFollower组件跟随 CompositedTransformTarget组件移动

关于这两个组件的用法可以查看

文章:Flutter 组件 | 手牵手,一起走 CompositedTransformFollower 与 CompositedTransformTarget

视频:Flutter:如何使用Layer Link(CompositedTransformFollower、CompositedTransformTarget)

GridPaper

绘制1px宽的直线网格

  • Key? key:标识键
  • Color color:网格线条的颜色。默认值为Color(0x7FC3E8F3)
  • double interval:网格中主线之间的距离,以逻辑像素为单位
  • int divisions = 2:每个主网格单元内的主要分区数。默认值为2
  • int subdivisions = 5:默认值为5
  • Widget? child:子组件
const SizedBox.expand(
  child: GridPaper(
    color: Colors.blue,
    interval: 100.0,
    divisions: 2,
    subdivisions: 5,
    child: Text("Hello World 你好世界"),
  ),
),

image

GridTile

一个带有 header 和 footer 的组件,一般放在GridView中使用,当然也可以单独使用。

  • Key? key:标识键
  • Widget? header:头部的组件
  • Widget? footer:尾部的组件
  • Widget child:子组件(中间的组件)
GridView.builder(
  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
    mainAxisSpacing: 8,
    crossAxisSpacing: 8,
  ),
  itemBuilder: (context, index) {
    return GridTile(
      header: Align(
        alignment: Alignment.topLeft,
        child: Container(
          padding: const EdgeInsets.symmetric(horizontal: 4),
          margin: const EdgeInsets.all(4),
          decoration: const BoxDecoration(
            color: Colors.red,
            borderRadius: BorderRadius.all(Radius.circular(2)),
          ),
          child: const Text(
            "Hot",
            style: TextStyle(color: Colors.white, fontSize: 12),
          ),
        ),
      ),
      footer: Container(
        color: Colors.white.withOpacity(.8),
        alignment: Alignment.center,
        child: Text("第$index个"),
      ),
      child: Image.asset("assets/images/sxt.jpg", fit: BoxFit.cover),
    );
  },
)

image

GridTileBar

用在GridTile中实现AppBar样式的组件

  • Key? key:标识键
  • Color? backgroundColor:背景色
  • Widget? leading:最左边的最近
  • Widget? title:标题
  • Widget? subtitle:副标题
  • Widget? trailing:最右边的组件
Scaffold(
  body: SafeArea(
    child: GridTile(
      header: GridTileBar(
        backgroundColor: null,
        leading: const BackButton(),
        title: const Text("Favorite"),
        subtitle: const Text("最近更新:今天"),
        trailing: IconButton( icon: const Icon(Icons.share), onPressed: () {}),
      ),
      footer: ButtonBar(
        alignment: MainAxisAlignment.center,
        children: List.generate(
          5,
          (index) => Container(
            height: 12,
            width: 12,
            decoration: BoxDecoration(
              color: Colors.white.withOpacity(index == _index ? 1 : .5),
              borderRadius: const BorderRadius.all(Radius.circular(100)),
            ),
          ),
        ),
      ),
      child: PageView.builder(
        itemCount: 5,
        onPageChanged: (index) {
          _index = index;
          setState(() {});
        },
        itemBuilder: (context, index) =>
            Image.asset("assets/images/sxt.jpg", fit: BoxFit.cover),
      ),
    ),
  ),
);

image

IgnorePointer

IgnorePointerAbsorbPointer功能一样,都能让子元素不再触发命中测试/事件。

该组件有以下几个属性:

  • Key? key:标识键
  • bool ignoring:是否会在命中测试中吸收指针。默认为true
  • Widget? child:子组件
  • bool? ignoringSemantics:编译语义树时是否忽略此渲染对象的语义

我们来看看这两个组件的区别:

Column(
  children: [
    Expanded(
      child: Stack(
        children: [
          GestureDetector(
            onTap: () {
              ScaffoldMessenger.of(context).clearSnackBars();
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(content: Text("穿过了AbsorbPointer")),
              );
            },
            child: Container(color: Colors.blue),
          ),
          Align(
            alignment: Alignment.center,
            child: AbsorbPointer(
              child: ElevatedButton(
                onPressed: () {
                  ScaffoldMessenger.of(context).clearSnackBars();
                  ScaffoldMessenger.of(context).showSnackBar(
                    const SnackBar(content: Text("点击了AbsorbPointer")),
                  );
                },
                child: const Text("AbsorbPointer"),
              ),
            ),
          )
        ],
      ),
    ),
    Expanded(
      child: Stack(
        children: [
          GestureDetector(
            onTap: () {
              ScaffoldMessenger.of(context).clearSnackBars();
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(content: Text("穿过了IgnorePointer")),
              );
            },
            child: Container(color: Colors.orange),
          ),
          Align(
            alignment: Alignment.center,
            child: IgnorePointer(
              child: ElevatedButton(
                onPressed: () {
                  ScaffoldMessenger.of(context).clearSnackBars();
                  ScaffoldMessenger.of(context).showSnackBar(
                    const SnackBar(content: Text("点击了IgnorePointer")),
                  );
                },
                child: const Text("IgnorePointer"),
              ),
            ),
          ),
        ],
      ),
    ),
  ],
)

image

我们可以看到,IgnorePointer会透过自身,将点击事件传递到下一层的组件,而AbsorbPointer并不会。

ImageFiltered

给图片增加滤镜。和BackdropFilter使用相比更简单。

该组件有以下几个属性:

  • Key? key:标识键
  • ImageFilter imageFilter:图片滤镜效果
  • Widget? child:子组件
ImageFiltered(
  imageFilter: ImageFilter.blur(sigmaX: 50.0, sigmaY: 50.0),
  child: Image.asset("assets/images/sxt.jpg"),
),

image

标签:常用,const,color,Text,Widget,child,组件,Flutter
From: https://www.cnblogs.com/ilgnefz/p/16944130.html

相关文章

  • PostgreSQL的常用DDL操作语句
    1.建表、删除表的DDL语句CREATETABLEIFNOTEXISTS"my_table"(idSERIALNOTNULL,namevarchar(255)NOTNULL,agevarchar(255)NOTNULL,drint2DEF......
  • vue3组件通信,网上一大堆,这里直说常用的两个,props,emit
    props(父传子,多用于子组件的数据渲染)【父】<div><comp-son:name="name":age="age"/>//向子组件传值</div>setup(){conststate=reactive({......
  • 日志常用命令
    一、日志分类   1)操作系统常用日志及目录   2)应用服务器日志 二、日志查看   1)静态日志:文件内容少cat,文件内容多:more/less       ......
  • 常用排序算法
    常见排序算法选择排序voidselectSort(vector<int>&array){size_tlength=array.size();inti,j;intmin;intt;for(i=0;i<length;......
  • Java学习-笔记本电脑常用快捷键
    #笔记本电脑常用快捷键笔记本快捷键大全图解-百度经验          ......
  • Oracle常用脚本
    经常忘记一些oracle语法,在此做一下记录吧,每逢遇到新的脚本,就记录在此。1.通过存储过程的方式,将图片插入blob字段,创建目录并授权createdirectory  D_FILEas'/home/......
  • Docker常用命令
    安装:docker-ce:curl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudoapt-keyadd-sudoapt-getinstalldocker-cenvidiadocker:wgethttps://github......
  • Flutter-Dart(二)
    一.运算符这里,我只列出来相对其他语言比较特殊的运算符,因为某些运算符太简单了,不浪费时间,比如+、-、+=、==。你可能会疑惑,Dart为什么要搞出这么多特殊的运算符呢?你要......
  • MySQL 常用操作
    环境MySQL 8.01、创建用户及授权创建一个只能查看数据的用户,4条命令搞定。直接上图   关键命令如下mysql-uroot-p//mysql-u{mysql超级用户名}-p//回车......
  • markdown小小白常用语法
    第一次用vscode写笔记去同步Cnblog,不知道写啥就记点常用的md语法吧标题怎么写?利用“#”+“”即可实现第几节标题(其中'/',表转义)>#title1>##title2tit......