【Flutter Widget】AppBar 和 PopupMenu

news/2024/11/23 3:42:28/

App Bar 可以视为页面的标题栏,在 Flutter 中用AppBar组件实现;Popup Menu 是弹出菜单,用PopupMenuButton实现。下面结合这两个组件说明其用法。

1. 代码实现

一个简单的AppBar实现代码如下:

import 'package:flutter/material.dart';void main() {runApp(const AppBarTest());
}class AppBarTest extends StatelessWidget {const AppBarTest({Key? key}) : super(key: key);Widget build(BuildContext context) {return MaterialApp(debugShowCheckedModeBanner: false,home: Scaffold(appBar: AppBar(title: const Text('这是 AppBar'),actions: [IconButton(icon: const Icon(Icons.search),tooltip: '搜索',onPressed: () {print('点击了搜索按钮');},),PopupMenuButton<String>(itemBuilder: (context) => <PopupMenuItem<String>>[const PopupMenuItem(value: '1',child: Text('T恤')),const PopupMenuItem(value: '2',child: Text('外套')),const PopupMenuItem(value: '3',child: Text('夹克')),const PopupMenuItem(value: '4',child: Text('卫衣')),],onSelected: (String item) {print('选择了$item');},elevation: 5,),],),body: const Center(child: Text('页面内容'),),),);}
}

Chrome Web 展示效果如下:
在这里插入图片描述
为展示AppBar的功能,我们在通过actions属性添加了两个组件,一个是搜索按钮(IconButton),另一个是弹出菜单(PopupMenuButton)。点击弹出菜单会弹出一个选择项列表:
在这里插入图片描述
PopupMenuButtononSelected方法可以获取选中的菜单值,即PopupMenuItemvalue属性值:

在这里插入图片描述

2. onSelected 方法

PopupMenuButton.onSelected方法在选择了菜单项后调用,其参数为PopupMenuItem.value属性的类型,也即PopupMenuButton的泛型类型。
在这里插入图片描述
因其定义为泛型,故我们可以将任意类型的数据填充为value值。假设我们需要在点击菜单项时获取服装类型的编码(code)和名称(name),我们可以将其定义为对应的类:

class ClothesItem {ClothesItem(this.code, this.name);String code;String name;
}

将服装类型数据定义为ClothesItem的数组:

final clothesItems = [ClothesItem('1', 'T恤'),ClothesItem('2', '外套'),ClothesItem('3', '夹克'),ClothesItem('4', '卫衣'),
];

则在可以将 clothesItems 转为 List<PopupMenuItem<ClothesItem>>

List<PopupMenuItem<ClothesItem>> popupMenuItems = clothesItems.map((e) => PopupMenuItem<ClothesItem>(value: e,child: Text(e.name),)).toList();

这样我们就可以将onSelected的参数类型声明为ClothesItem,从而在方法中获取其 code 和 name 值:

onSelected: (ClothesItem item) {print('选择了${item.code}:${item.name}');
}

完整代码如下:

import 'package:flutter/material.dart';void main() {runApp(AppBarTest());
}class ClothesItem {ClothesItem(this.code, this.name);String code;String name;
}class AppBarTest extends StatelessWidget {AppBarTest({Key? key}) : super(key: key);final clothesItems = [ClothesItem('1', 'T恤'),ClothesItem('2', '外套'),ClothesItem('3', '夹克'),ClothesItem('4', '卫衣'),];Widget build(BuildContext context) {return MaterialApp(debugShowCheckedModeBanner: false,home: Scaffold(appBar: AppBar(title: const Text('这是 AppBar'),actions: [IconButton(icon: const Icon(Icons.search),tooltip: '搜索',onPressed: () {print('点击了搜索按钮');},),PopupMenuButton<ClothesItem>(itemBuilder: (_) => clothesItems.map((e) => PopupMenuItem<ClothesItem>(value: e,child: Text(e.name),)).toList(),onSelected: (ClothesItem item) {print('选择了${item.code}:${item.name}');},elevation: 5,),],),body: const Center(child: Text('页面内容'),),),);}
}

参考

Flutter 官方示例 gallery


http://www.ppmy.cn/news/1154533.html

相关文章

Ubuntu输入正确密码重新跳到登录界面

Ubuntu输入正确密码重新跳到登录界面 问题描述 输入正确的密码登录后闪一下又回到锁屏界面 输入正确的密码后还是回到这个界面 产生的原因 /etc/profile或者/etc/enviroment出现了问题,导致无法正常登录 该错误产生的原因不止一个 这里是因为/etc/profile或者/etc/enviromen出…

【Scheme】Scheme 编程学习 (五) —— 引述

【Scheme】Scheme 编程学习 (五) —— 引述 原视频地址&#xff1a;https://www.bilibili.com/video/BV1Kt411R7Wf?p5 文章目录 【Scheme】Scheme 编程学习 (五) —— 引述1. Data made from codeempty list 空表 2. Treating data as code3. Example: generic type safety Q…

pycharm中快速对比两个.py文件

在学习一个算法的时候&#xff0c;就想着自己再敲一遍代码&#xff0c;结果最后出现了一个莫名其妙的错误&#xff0c;想跟源文件对比一下到底是在哪除了错&#xff0c;之前我都是大致定位一个一个对比&#xff0c;想起来matlab可以快速查找出两个脚本文件(.m文件)的区别&#…

【重拾C语言】八、表单数据组织——结构体(类型、类型别名、直接/间接访问;典例:复数、成绩单)

目录 前言 八、结构体 8.1 结构体类型 8.2 结构体类型名 8.2.1 typedef关键字 8.2.1 结构体类型别名 8.3 结构体变量 8.3.1 使用结构体类型引用 8.3.2 使用结构体类型定义 8.3.3 使用typedef定义的结构体类型别名 8.4 访问结构体变量 8.4.1 直接成员选择表达式 8.…

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】计算机毕业设计

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

微信小程序备案内容常见问题汇总

一、备案时间点 自2023年09月01日起,新的微信小程序,必须备案后才能上架; 在2024年03月31日前,所有小程序都必须完成备案; 于2024年04月01日起,对未备案小程序进行清退处理。 微信小程序备案系统已于9月4日上线。 二、备案流程 [找备案入口]–[填主体信息]–[填小程…

淘宝店铺所有商品数据接口,淘宝整店所有商品数据接口,淘宝店铺商品接口,淘宝API接口

淘宝店铺所有商品数据接口可以通过淘宝开放平台获取。以下是具体步骤&#xff1a; 在开放平台注册成为开发者并创建一个应用&#xff0c;获取到所需的 App Key 和 App Secret 等信息。使用获取到的 App Key 和 App Secret 进行签名和认证&#xff0c;获取 Access Token。调用开…

业务安全五重价值:防攻击、保稳定、助增收、促合规、提升满意度

目录 防范各类威胁攻击 保障业务的连续性和稳定性 保障业务的合规性 提升企业营收和发展 提升企业满意度和品牌知名度 2023年暑假被“票贩子”和“黄牛”攻陷。他们利用各种手段抢先预约名额&#xff0c;然后加价出售给游客&#xff0c;导致了门票供不应求的局面&#xff…