首页 > 其他分享 >第四百二十二回

第四百二十二回

时间:2024-03-24 21:58:06浏览次数:24  
标签:二十二 菜单 const 自定义 AppBar 组件 Action 第四

文章目录

我们在上一章回中介绍了"自定义标题栏"相关的内容,本章回中将介绍自定义Action菜单.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在这里提到的Action菜单是指AppBar中actions属性对应的组件。它和上一章回中介绍的标题栏类似,都位于页面上方,它们都受AppBar组件的控制。一个完整
的AppBar包含导航(返回箭头),标题和Actcons.他们从左到右依次排列。这三个内容中导航是自动生成的,比如从A页面导航到B页面时会 在页面B上显示一个导航图标,
也就是我们常见的返回箭头。标题是页面必备的内容,主要用来显示当前页面的主题。Actions是可选择的内容,它通常用来在AppBar中添加一些附加功能,比如分享
或者下载。本章回中将介绍如何自定义Action菜单,进而打造出功能丰富的AppBar。

2. 思路与方法

2.1 实现思路

我们自定义Action菜单并不是重写相关的组件,而是使用把多个组件组合在一起的形成新的Actions。组合的内容依据自己的需求来制定,这点和上一章回中自定义标题
栏的思路相同。比如,我们对Actions的需求是:显示文本,点击文本后需要弹出功能菜单。有了这个需求后,我们就可以自定义Actions,文本通过TextButton组件
实现,它既可以显示文本内容,又可以响应点击事件。弹出功能菜单通过showMenu和PopupMenu一起实现。

2.2 实现方法

  • 创建TextButton组件,并且把它赋值给AppBar的Actions属性;
  • 创建popMenu,并且通过showMenu来显示,menu的内容可以自定义;
  • 把showMenu赋值给TextButton的onPress属性,用来响应按钮的点击事件;
  • 把TextButton组件赋值给Actions属性,它会显示在AppBar的最右侧;
    我们在上面步骤中使用了pupMenu功能,这里只是概要描述,具体的细节可以参考五十一回介绍相关内容.上面步骤中只是文本描述,内容比较抽象,不容易理解,我们将
    在接下来的小节中通过具体的示例代码来演示。

3. 示例代码

appBar: AppBar(
  title: Widget(), ///标题栏的内容省略,或者使用上一章回中的示例代码
  ///Action的优先级大于Title,它会占用Title的空间,如果它的空间过大时会把Title覆盖掉
  ///比如把action3-5打开后就会覆盖Title的内容.
  actions: [
    SizedBox(
      width: 80,
        child: TextButton(
          onPressed: (){
            showMenu(
              context:context,
              ///这个坐标值不好调整,下面我的经验值,位置在手指点击点的左下方,想往左移动给110+数字 往下移动180加数字
              position: const RelativeRect.fromLTRB(170, 180, 110, 10),
              items: [
                ///建议指定value属性
                PopupMenuItem<String>(
                  value: 'one',
                  onTap: ()=> debugPrint('tap one'),
                  child: const Text('1'),
                ),
                PopupMenuItem<String>(
                  value:'two',
                  onTap: ()=> debugPrint('tap two'),
                  child: const Text('2'),
                ),
                PopupMenuItem<String>(
                  value:'three',
                  onTap: ()=> debugPrint('tap three'),
                  child: const Text('3'),
                ),
              ],);
          },
          child: const Text("action1")),
    ),
    const SizedBox(
      width: 80,
      child: Text("action2"),
    ),
    // const SizedBox(
    //   width: 80,
    //   child: Text("action3"),
    // ),
    // const SizedBox(
    //   width: 80,
    //   child: Text("action4"),
    // ),
    // const SizedBox(
    //   width: 60,
    //   child: Text("action5"),
    // ),
  ],
),

上面的示例代码完全按照实现方法中的步骤来实现,代码中popMenu包含了三个选项,没有具体的功能,只是简单地打印一行日志。菜单的内容大家可以依据自身需求来决
定。代码中还省略了Scaffold以及其它的代码,只保留了AppBar相关的代码。编译并且运行上面的程序可以看到一个标题栏,标题左边是返回箭头,然后就是标题和我
们自定义的Actions菜单。我在这里就不演示程序的运行结果了,建议大家自己动手去实践。
此外,我们再补充一些Action的内容,Action可以包含多个组件,类似Row组件,也就是说可以在AppBar中的显示多个Action,我们在代码中尝试显示五个Action,
结果发现Action会占用Title的空间,如果它的空间过大时会把Title覆盖掉。因此我们推断:Action的优先级比标题(Title)高,当它的宽度过大时会覆盖标题。

4. 内容总结

我们在本章回中演示了如何自定义Acton菜单,并且通过一个需求:显示文本,点击文本后需要弹出功能菜单,介绍了自定义Action的思路和方法。大家可以结合自己在
项目中的需求来自定义Action,自定义的思路就是依据需求组合现有的组件形成新的组件。总之,只要是组件就可以,因为AppBar的actions属性是Widget类型,我
们只需要把自定义的Action值给该属性就可以实现自定义Acttion菜单的功能。
看官们,与"自定义Action菜单"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

标签:二十二,菜单,const,自定义,AppBar,组件,Action,第四
From: https://blog.csdn.net/talk_8/article/details/136996082

相关文章

  • 软件工程与实践(第四版 新形态)第3章习题答案详解
    第三章一、填空题二、选择题三、简答题四、实践题一、填空题(1)方法或服务(2)类对象(3)类对象继承消息通信二、选择题(1)B(2)C(3)C(4)B(5)D三、简答题(1)什么叫面向对象?面向对象方法OOM的特点是什么?为什么用OOM开发软件?面向对象是一种软件开发方法,它将数据和操作数据的......
  • 爬虫工作量由小到大的思维转变---<第四十九章 Scrapy 降维挖掘---中间件系列(1)>
    前言:        Scrapy是一个功能强大的网络爬虫框架,但在实际应用过程中,中间件问题可能会成为一个令人头痛的难题。为了彻底解决Scrapy中的各种疑难杂症,我决定进行第四次全面的学习和实践,并将中间件的问题一一拆解,以确保我对中间件的理解和掌握更加全面和深入。正文:爬......
  • proteus+keil5仿真学习笔记(第四章 继电器)
    第四章继电器目录前言一、继电器原理二、程序设计与仿真proteus电路程序总结前言这一章节介绍单片机控制继电器的电路应用。继电器在工业控制中应用非常广泛,可以通过继电器对其他大电流的电器进行控制。一、继电器原理继电器具体原理可以参考这篇博文:https://b......
  • 第四百一十五回
    文章目录1.概念介绍2.思路与方法2.1实现思路2.2实现方法3.示例代码4.内容总结我们在上一章回中介绍了"自定义标题栏"相关的内容,本章回中将介绍自定义Action菜单.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在这里提到的Action菜单是指AppBar中act......
  • Java学习笔记——第二十二天
    Java高级技术单元测试概述单元测试就是针对最小的功能单元(方法),编写测试代码对该功能进行正确性测试。目前的测试方法是怎样的,存在什么问题只能编写main方法,并在main方法中再去调用其他方法进行测试。使用起来很不灵活,无法实现自动化测试。无法得到测试的报告,需要程序员......
  • Java并发编程:第四章 线程池(Executor框架)
    文章目录一、为什么需要线程池1、线程的创建2、线程销毁二、优点1、降低资源消耗2、提高响速度3、线程管理三、架构说明四、Executors工具类1、介绍2、Executors工具类常用的方法(1)newFixedThreadPool(intnThreads):(2)newCachedThreadPool()(3)newSingleThreadExecutor()......
  • 第四章总结(页面组件)
    4.1组件的定义及属性   组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布、开放能力等8类(30多个)基础组件。   每一个组件都由一对标签组成,有开......
  • 蓝桥杯 2013 国 AC 网络寻路 第四届国赛 洛谷P8605
    [蓝桥杯2013国AC]网络寻路题目描述XXX国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。源地址和目标地......
  • buu第四页笔记
    1、护网杯_2018_gettingstart 64位,RELRO半开,Canary,NX,PIE全开 就是普通栈溢出   Exp:fromstructimportpackfromLibcSearcherimport*frompwnimport*#context(os='linux',arch='amd64',log_level='debug')context(os='linux......
  • 第二十二天
    第二十二天实战测试每隔3天夜里2点执行数据备份脚本mysql.sh写出定时命令:crontab-e把下面这个复制进去#!/bin/bash02*/3**/usr/bin/mysql.sh>/dev/null2>&1保存就可以了命令注解:02*/3**/usr/bin/mysql.sh>/dev/null2>&1是一个定时......