flutter笔记-主要控件及布局

news2024/11/20 10:31:39

文章目录

  • 1. 富文本实例
  • 2. Image
    • 2.1 本地图片
    • 2.2 网络图片
  • 笔记
  • 3. 布局
  • 4. 滑动相关view
    • 4.1 GridView类似九宫格view
    • 4.2 ListView

关于widget的生命周期的相关知识这里就不做介绍,和很多语言类似;

1. 富文本实例

Dart中使用richtext,示例如下:

const Text.rich(
    textAlign:TextAlign.center,
    TextSpan(
      text: '生于忧患,死于安乐\n',
      style: TextStyle(color: Colors.red, fontSize: 18),
      children: [
        TextSpan(
          text: '孟子及其弟子〔先秦〕',
          style: TextStyle(color: Colors.blueGrey,fontSize: 10),
        ),
        WidgetSpan(child:Icon(Icons.face,color: Colors.red)),
        TextSpan(
            text: """
            \n    舜发于畎亩之中,傅说举于版筑之间,胶鬲举于鱼盐之中,管夷吾举于士,孙叔敖举于海,百里奚举于市。故天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。\n(是人 一作:斯人)
            \n    人恒过,然后能改;困于心,衡于虑,而后作;征于色,发于声,而后喻。入则无法家拂士,出则无敌国外患者,国恒亡。然后知生于忧患而死于安乐也。
            """,
          style: TextStyle(color: Colors.black,fontSize: 13)
        )
      ],
    ),
  )

效果如下:
在这里插入图片描述

2. Image

图片类主要用的有两种一种是加载本地的图片,一种是网络的。其他的图片类如下:
在这里插入图片描述
上图是在类中点击后:command + B或option + command + B,就会出现所有的子类实现;

2.1 本地图片

本地的图片加载比较复杂:

  • 需要新建文件夹assets/images目录,
  • 然后修改pubspec.yaml文件:找到flutter:配置项目新增:
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:
    - assets/images/*
  • 最后执行flutter pub get
  • 图片加载如下:
  const Image(
          image: AssetImage("assets/images/desktop.jpg"),
        width: 200,
        fit: BoxFit.cover,
      )

2.2 网络图片

网络图片的使用比较简单:Image(image: NetworkImage("https://uri"));

笔记

记录一个快捷键,比如下面的代码:

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text("计数器"),
      ),
      body: _MyHomeContent(),
    );
  }
}

我们想在AppBar外面加一个Center的wedge;mac上选中AppBar后按option(alt)+enter就会出现如下图的选项:
在这里插入图片描述
选中任意一个就会自动添加;

3. 布局

Dart中使用最多就是Container,Align,edge设置内边距;

  1. container使用如下:
class _MyHomeContentState extends State<_MyHomeContent> {
  int _counter = 0;

  
  Widget build(BuildContext context) {
    return  Container(
      width: 200,
      height: 200,
      alignment: Alignment(0.5,0.5),
      padding: EdgeInsets.all(50),
      margin: EdgeInsets.all(10),
      decoration: BoxDecoration(
        color: Colors.blue,
        borderRadius: BorderRadius.circular(10),
      ),
      child: const Column(
        children: [
          Icon(
            Icons.people,
            color: Colors.orange,
          ),
        ],
      ),
    );
  }
}
  1. align如下:
class _MyHomeContentState extends State<_MyHomeContent> {
 int _counter = 0;

 
 Widget build(BuildContext context) {
   return const Align(
   alignment: Alignment(0.5, 0.5),
  child: Icon(
  Icons.people,
    color: Colors.orange,
    ),
   );
 }
}

Row 和 Column 布局这里不做分析;
补充Positioned和Stack使用:示例如下:

 class _MyHomeContentState extends State<_MyHomeContent> {
  int _counter = 0;

  
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        Image.asset("assets/images/desktop.jpg", width: 300),
        Positioned(
            left: 0,
            right: 0,
            bottom: 0,
            child: Container(
              padding: const EdgeInsets.all(10),
              color: const Color.fromARGB(160, 0, 0, 0),
              child: Row(
                // 控件平分剩余空间
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  const Text(
                    "这个图片很合适",
                    style: TextStyle(fontSize: 20, color: Colors.white),
                  ),
                  IconButton(
                      onPressed: () {
                        print("俺就点击了。。。。。。");
                      },
                      icon: const Icon(
                        Icons.favorite_border,
                        color: Colors.white,
                      ))
                ],
              ),
            ))
      ],
    );
  }
}

效果如下图:

在这里插入图片描述

4. 滑动相关view

4.1 GridView类似九宫格view

使用如下:

class _MyHomeContentState extends State<_MyHomeContent> {
  bool _isFavorite = false;
  
  Widget build(BuildContext context) {
    return GridView(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
          crossAxisSpacing: 10,
          mainAxisSpacing: 10,
        ),
        children:List.generate(9, (index) {
          return Container(
            width: 40,
            height: 40,
            child: Image.asset(index%2==0?"assets/images/img1.png":"assets/images/img2.png"),

          );
        }
    )
          );

  }
}

效果:
在这里插入图片描述

4.2 ListView

这里主要介绍有分隔线的使用:

class _MyHomeContentState_list2 extends State<_MyHomeContent> {
  bool _isFavorite = false;
  
  Widget build(BuildContext context) {
    return ListView.separated(
        itemCount: 100,
        itemBuilder: (context, index) {
          return ListTile(
            leading: Container(
              width: 50,
              height: 50,
              // decoration: BoxDecoration(
              //   shape: BoxShape.circle,
              //   color: Colors.blue,
              // ),
              child: Image.asset(index%2==0?"assets/images/img1.png":"assets/images/img2.png"),
            ),
            title: Text("姓名${index}"),
            subtitle: Text("生日"),
            trailing: Icon(Icons.favorite),
            onTap: (){
              setState(() {
                _isFavorite = !_isFavorite;
              });
            },
          );
        },
        separatorBuilder: (context, index) {
          return const Divider(
            thickness:0.5,
            indent:10,
            endIndent: 10,
            height: 1,
            color: Colors.grey,
          );
        }
    );
  }
}

效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出MySQL-02-【MySQL支持的数据类型】

文章目录 前言1.数值类型2.日期时间类型3.字符串类型3.1.CHAR和VARCHAR类型3.2.ENUM类型3.3.SET类型 4.JSON类型 前言 环境&#xff1a; Windows11MySQL-8.0.35 1.数值类型 MySQL中的数值类型&#xff0c;如下&#xff1a; 整数类型字节最小值最大值TINYINT1有符号 -128无…

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应&#xff0c;即使设置参数默认值&#xff0c;也不可省略。 2.只知道类名&#xff0c;需要将该类作为参数调用泛型接口。 3.只知道类名&#xff0c;需要将该类的数组作为参数调用泛型接口…

基于51单片机的电梯仿真系统

基于51单片机的电梯设计 &#xff08;仿真&#xff0b;程序PPT&#xff09; 功能介绍 具体功能&#xff1a; 1.一共4层&#xff0c;数码管显示当前楼层&#xff1b; 2.六个按键模拟电梯外按键&#xff08;1上、2上、2下、3上、3下、4下&#xff09;&#xff0c;每当按下时有…

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签&#xff0c;H5的兼容性处理&#xff09; 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签&#xff08;HTML元素&#xff09;和属性&#xff0c;标签定义了内容的类型或结构&#xff0c;而…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现&#xff0c;通常是ETCD、NACOS、ZOOKEEPER等等&#xff0c;但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式&#xff0c;接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图&#xff1a; Red…

多端文件互传软件-LocalSend

一、前言 日常学习或者是工作需求&#xff0c;需要手机和电脑互传文件。用到频率低的话&#xff0c;使用即时通讯软件也就够了。 像我日常使用的多端互传文件软件是LocalSend。 二、 LocalSend LocalSend是一款基于局域网的文件传输工具。 LocalSend是一种用于在本地网络中…

系统盘空间不足调优方式1-APPData/大文件清理

作者&#xff1a;私语茶馆 1.前言 Windows系统盘&#xff08;C盘&#xff09;很容易剩余空间不足&#xff0c;这种情况下会非常影响Windows系统的运行&#xff0c;系统盘约束非常多&#xff0c;不方便在线扩容&#xff0c;因此规划和利用好系统盘是保障整体运行效率的关键。包…

经典机器学习算法——Pagerank算法

目录 Pagerank介绍 背景介绍 中心思想 一、量化重要性 三大指标 1、数量指标 2、质量指标 3、稀释指标 二、实际应用简化为理论模型 PageRank公式 手动预测网站的重要度 马尔可夫矩阵预测网站的重要度 两个方法的联系 PageRank算法存在的问题 一、Dead Ends问题…

XTuner微调LLM:1.8B、多模态和Agent-笔记四

本次课程由XTuner 贡献者李剑锋、汪周谦、王群老师讲解【XTuner 微调 LLM&#xff1a;1.8B、多模态和 Agent】课程 课程视频&#xff1a;http:// https://b23.tv/QUhT6ni 课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 两种Finetun…

web题目实操 5(备份文件和关于MD5($pass,true)注入的学习)

1.[ACTF2020 新生赛]BackupFile &#xff08;1&#xff09;打开页面后根据提示是备份文件 &#xff08;2&#xff09;查看源码发现啥都没有 &#xff08;3&#xff09;这里啊直接用工具扫描&#xff0c;可以扫描到一个文件名为&#xff1a;/index.php.bak的文件 &#xff08;…

使用Docker部署Jupyter Notebook并结合花生壳的内网穿透实现远程访问(详文)

一、前言 本文主要介绍如何利用宝塔面板中的Docker 3.9.3管理器,使用Docker本地部署Jupyter Notebook,并结合花生壳内网穿透工具实现任意浏览器公网远程访问Jupyter登录界面。 安装完成后在宝塔面板中图例 Jupyter Notebook是一个交互式笔记本,支持运行40多种编程语言。…

D - Grid and Magnet

思路&#xff1a;标记一下磁铁周围的空地即可&#xff0c;每个连通块一定可以互相到达&#xff0c;我们dfs算出联通块的大小再加上该连通块周围的可达磁场区域即可。 代码&#xff1a; #include <bits/stdc.h> using namespace std; using ll long long; using ld lon…

【Godot4.2】自定义Todo清单类 - myTodoList

概述 在写myList类的时候&#xff0c;就想到可以写一个类似的Todo清单类。 基础思路 本质还是在内部维护一个数组&#xff0c;在其基础上进行增删改查操作的封装为了方便存储数据&#xff0c;编写一个自定义内置类TodoItem&#xff0c;内部数组就变成了Array[TodoItem]类型的…

66、二分-搜索旋转排序数组

思路&#xff1a; 不断二分&#xff0c;首先判断左侧有序还是右侧有序&#xff0c;如果左侧有序那么就在左侧寻找&#xff0c;如果右侧有序那就在右侧寻找。假设左侧有序&#xff0c;那就判断目标值在不在左侧&#xff0c;如果在左侧继续左侧二分。如果不在左侧&#xff0c;那么…

Redis可视化工具RedisInsight

下载地址&#xff1a;RedisInsight - The Best Redis GUIRedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your databases and manage your data.https://redis.com/redis-enterprise/redis-insight/#insight…

STM32通过ESP8266连接阿里云 详细步骤

一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是&#xff1a;AT固件。连接阿里云需要&#xff1a;MQTT固件。 因此&#xff0c;我们需要给8266重新烧录 MQTT固件。 针对“魔女开发板&#xff0c;ESP8266模块烧录MQTT固件&#xff0c;图解教程如下&#xff1a; ESP8266 烧录 …

Spring Task学习记录

介绍 cron表达式 cron表达式在线生成器 链接: link 入门案例 Component Slf4j public class MyTask {/*** 定时任务 每隔5秒触发1次*/Scheduled(cron "0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行&#xff1a;{}", new Date…

什么是外汇爆仓?怎样避免?

外汇爆仓是指当交易者的保证金低于特定比例时&#xff0c;经纪商会自动平仓一个或所有的开仓头寸。避免外汇爆仓的关键在于合理配置资金、设置止损、适度交易、顺势而为以及调整心态。 外汇爆仓是外汇交易中的一种风险控制机制。当交易者的账户净值低于已用保证金的特定比例时&…

C语言 基本数据类型及大小

一、基本数据类型 1.整型int 整型的关键字是int&#xff0c;定义一个整型变量时&#xff0c;只需要用int来修饰即可。也分为短整型和长整型。 2.浮点型 浮点型又分单精度浮点型float和双精度浮点型double。 3.字符型char 前面的整型和浮点型都是用于存放数字。字符型&…

考研数学|跟完武忠祥基础,刷题还是看张宇基础❓

听完武忠祥老师的课程&#xff0c;当然是趁热打铁&#xff0c;多练题&#xff0c;巩固做题技巧 首先&#xff0c;武忠祥老师和张宇老师在基础阶段的课程质量基本是差不多的&#xff0c;如果你听完武忠祥老师的课程&#xff0c;并且基本都听懂了&#xff0c;真的没有必要再去浪…