Flutter流式组件Wrap

news2024/11/26 9:56:04

Wrap组件类似Row组件都是横向依次排列,唯一的区别就是Wrap能自动换行。

主要代码:

Wrap(
  spacing: 10, //左右间距
  runSpacing: 10, //上下间距
  // direction: Axis.vertical,//主轴的方向,默认横向
  // alignment: WrapAlignment.spaceBetween, //主轴对齐方式
  children: [
    Button("女装", onPressed: () {}),
    Button("笔记本", onPressed: () {}),
    Button("玩具", onPressed: () {}),
    Button("时尚", onPressed: () {}),
    Button("男装", onPressed: () {}),
    Button("连衣裙", onPressed: () {}),
    Button("穿搭", onPressed: () {}),
  ],
),

Wrap中spacing属性调整组件间的左右间距;

runSpacing属性调整每行之间的上下间距;

direction属性为控件排列方向,默认横向排列,设置为Axis.vertical时,组件依次纵向排列,当容器内第一列排列满时自动换行排第二列,依次向下一列排列;

alignment属性为控件之间的对齐方式。

自定义按钮:

//自定义按钮组件
class Button extends StatelessWidget {
  final String text;
  final void Function()? onPressed;

  const Button(this.text, {super.key, required this.onPressed});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      style: ButtonStyle(
        shape: MaterialStateProperty.all(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20),
          ),
        ),
        backgroundColor: MaterialStateProperty.all(CupertinoColors.systemGrey5),
        foregroundColor: MaterialStateProperty.all(Colors.black),
      ),
      onPressed: onPressed,
      child: Text(text),
    );
  }
}

 完整代码:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.blue),
      home: Scaffold(
        appBar: AppBar(
          title: const Text("Flutter"),
        ),
        body: const MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const LayoutDemo();
  }
}

class LayoutDemo extends StatelessWidget {
  const LayoutDemo({super.key});

  @override
  Widget build(BuildContext context) {
    return ListView(
      padding: const EdgeInsets.all(10),
      children: [
        Row(
          children: [
            Text(
              "热搜",
              style: Theme.of(context).textTheme.titleLarge,
            ),
          ],
        ),
        const Divider(),
        Wrap(
          spacing: 10, //左右间距
          runSpacing: 10, //上下间距
          // direction: Axis.vertical,//主轴的方向,默认横向
          // alignment: WrapAlignment.spaceBetween, //主轴对齐方式
          children: [
            Button("女装", onPressed: () {}),
            Button("笔记本", onPressed: () {}),
            Button("玩具", onPressed: () {}),
            Button("时尚", onPressed: () {}),
            Button("男装", onPressed: () {}),
            Button("连衣裙", onPressed: () {}),
            Button("穿搭", onPressed: () {}),
          ],
        ),
        const SizedBox(height: 10),
        Row(
          children: [
            Text(
              "历史记录",
              style: Theme.of(context).textTheme.titleLarge,
            ),
          ],
        ),
        const Divider(),
        const Column(
          children: [
            ListTile(title: Text("女装")),
            Divider(),
            ListTile(title: Text("手机")),
            Divider(),
            ListTile(title: Text("电脑")),
            Divider(),
          ],
        ),
        const SizedBox(height: 40),
        Padding(
          padding: const EdgeInsets.all(40),
          child: OutlinedButton.icon(
            onPressed: () {},
            icon: const Icon(
              Icons.delete,
              color: Colors.grey,
            ),
            label: const Text(
              "清空历史",
              style: TextStyle(color: Colors.grey),
            ),
          ),
        ),
      ],
    );
  }
}

//自定义按钮组件
class Button extends StatelessWidget {
  final String text;
  final void Function()? onPressed;

  const Button(this.text, {super.key, required this.onPressed});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      style: ButtonStyle(
        shape: MaterialStateProperty.all(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20),
          ),
        ),
        backgroundColor: MaterialStateProperty.all(CupertinoColors.systemGrey5),
        foregroundColor: MaterialStateProperty.all(Colors.black),
      ),
      onPressed: onPressed,
      child: Text(text),
    );
  }
}

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

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

相关文章

【Element】Tree 树形控件

使用el-tree完成下拉框单选功能 <label class"handle-label">部门:</label> <el-select v-model"bm" ref"selectTree" class"wd150" placeholder"请选择" clearable clear"handleTreeClear">…

Aop基于xml和注解应用

基于 XML 的 AOP 开发 问题1&#xff1a;在通知方法中如何定义切入点表达式&#xff1f; 问题2&#xff1a;如何配置切面&#xff1f; 问题3&#xff1a;在配置类上如何开启AOP注解功能&#xff1f; 1.1 快速入门 ①导入 AOP 相关坐标 ②创建目标接口和目标类&#xff08…

linux环境安装docker+confluence

前言 本次安装的环境 centos 7.6 一、安装docker 1、yum安装docker 更新yum yum update yum安装docker yum install docker 2、开启镜像加速 mkdir /etc/docker vi /etc/docker/daemon.json 3、启动docker 查看docker版本 docker --version 启动docker service docker s…

ps 2023(24.7beta) mac

Photoshop 2023 beta,一款专业图像处理软件&#xff0c;它主要用于图像编辑、合成和设计等方面。Photoshop beta创新式填充是Adobe Photoshop的一项新功能&#xff0c;它可以自动识别和删除照片中的对象并用周围的图像填充空白部分。这个新功能使用了人工智能和机器学习技术&am…

直线模组在新能源汽车中的应用

发展新能源汽车是我国从汽车大国迈向汽车强国的必由之路&#xff0c;是应对气候变化、推动绿色发展的战略举措&#xff0c;新能源汽车免征车辆购置税政策的延续&#xff0c;能够稳定促进新能源汽车发展&#xff0c;加速新能源车对于燃油车的全面替代。 直线模组技术的飞速发展&…

Doris实战篇-准实时数仓架构设计与实现

前言 这是一篇Doris数据仓库架构随笔&#xff0c;会应用到一些优秀的用户案例和自己的见解&#xff0c;欢迎大家留言评论。 前景回顾 下图是之前文章有提到过的数仓架构&#xff0c;这种架构的好处是实时强&#xff0c;数据产生以后&#xff0c;直接可以消费到&#xff0c;而…

【网络安全】带你了解【黑客】

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 引言 1. 定义 2. 分类 a. 白帽黑客&#xff08;White Hat Hacker&#xff09; b. 黑帽黑客&#xff08;Black Hat Hacker&#xff09; c. 灰帽黑客&#xff08;Gray Hat Hacker…

【Docker】Docker中 AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

企业如何搭建一个出色的帮助中心?做好这6点很重要!

伴随着互联网的不断普及和快速发展&#xff0c;我们的生活已经发生了翻天覆地的改变&#xff0c;企业的商业模式也不断地适应着时代。为了提供给用户更加便捷的服务&#xff0c;逐渐地有更多企业将业务转移到线上。比如&#xff0c;餐馆为了解决点餐难题&#xff0c;就会上线点…

LINUX IOWAIT 是怎么回事,和数据库性能有关吗? (翻译)

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Redis线程模式

目录 redis6.0之前&#xff1a;单Reactor单线程 问&#xff1a;为什么Redis要选择单线程&#xff1f;&#xff1f;&#xff1f; redis6.0后引入多线程IO redis6.0之前&#xff1a;单Reactor单线程 大致工作流程&#xff1a; 首先&#xff0c;调用 epoll_create() 创建一个 …

剑指 Offer 17: 打印从1到最大的n位数

首先&#xff0c;List类型的要么存Integer&#xff0c;要么存int[]&#xff0c;并且后面实现是用ArrayList&#xff01; 这边的i和j应该从1开始&#xff0c;因为0不能做高位也不能做位数。 这里注意&#xff0c;1是List的实现是用ArrayList&#xff0c;2是从1开始&#xff08;1…

C++的引用 拷贝赋值和引用赋值

&#x1f4af; 博客内容&#xff1a;C的引用 拷贝赋值和引用赋值 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#…

排名前十的开放式蓝牙耳机,哪个蓝牙耳机好一点?

当前耳机最大的受众群体就是年轻人&#xff0c;最怕自己吵到别人&#xff0c;而且更注重自己的舒适度&#xff0c;所以开放式耳机自从出现以来就深受年轻人喜爱&#xff0c;这种耳机用起来很方便&#xff0c;而且振动感不强&#xff0c;不用进入耳道&#xff0c;拥挤耳朵。开放…

C++图形开发(8):空格键控制小球起跳

文章目录 1.绘制小球2.按下空格让小球跳起来 我们今天来实现下按下空格键控制小球的起跳&#xff08;还没阅读之前文章的同学可以先去阅读一下&#xff1a;C图形开发专栏&#xff09; 1.绘制小球 首先&#xff0c;我们要绘制小球&#xff0c;这里就不细讲啦&#xff0c;之前的…

4.1 探索LyScript漏洞挖掘插件

在第一章中我们介绍了x64dbg这款强大的调试软件&#xff0c;通过该软件逆向工程师们可以手动完成对特定进程的漏洞挖掘及脱壳等操作&#xff0c;虽然x64dbg支持内置Script脚本执行模块&#xff0c;但脚本引擎通常来说是不够强大的&#xff0c;LyScript 插件的出现填补了这方面的…

2020~2030年 中国智能驾驶市场和技术趋势分析及主流芯片方案概述

分析及主流芯片方案概述智能驾驶已经成为中国用户买车时首选的配置之一&#xff0c;从L0到L2的整个产品布局&#xff0c;已经是车厂卖车时候的重点宣传点&#xff0c;智能驾驶不同于自动驾驶&#xff0c;无论是法律法规和产品定义都有着明确且清晰的定义。用户本身智能驾驶产品…

十个创业九个死,如何看待大学生创业?

虽然大家都在说“十个创业九个死”&#xff0c;尤其是前几年疫情的影响&#xff0c;很多创业和开店铺的都以失败告终&#xff0c;可是对于大学生来说&#xff0c;创业是很值得去做的一件事情。 熟悉我的朋友都知道&#xff0c;我是从事软件开发行业的&#xff0c;虽然前几年的…

实训笔记7.5

实训笔记7.5 7.5一、座右铭二、软件--软件工程2.1 需求分析2.2 系统设计2.2.1 概要设计2.2.2 数据库设计2.2.3 详细设计 2.3 编码开发/实现2.4 系统测试2.5 系统部署运行和维护 三、Java界面编程---仅作了解四、maven--自动化构建工具4.1 作用&#xff1a;4.2 maven如何帮助我们…

C#常见技能_结构

大家好&#xff0c;我是华山自控编程朱老师 前几天一个学员在学习C#与结构交互时,也不知道结构法可以用来做什么 。下面我们就详细讲讲C# 和结构交互的相关知识。 在C#编程中&#xff0c;结构是一种数据类型&#xff0c;它可以用于存储和组织相关数据&#xff0c;并提供对数据…