【Flutter Widget】AppBar 和 PopupMenu

2023-10-13 10:28

本文主要是介绍【Flutter Widget】AppBar 和 PopupMenu,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于【Flutter Widget】AppBar 和 PopupMenu的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/202572

相关文章

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

Flutter Button使用

Material 组件库中有多种按钮组件如ElevatedButton、TextButton、OutlineButton等,它们的父类是于ButtonStyleButton。         基本的按钮特点:         1.按下时都会有“水波文动画”。         2.onPressed属性设置点击回调,如果不提供该回调则按钮会处于禁用状态,禁用状态不响应用户点击。

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务,‌它允许用户通过简单的配置,‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发布到GitHub Pages。 最近通过flutter build web,通过发布到GitHu

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开

flutter开发多端平台应用的探索 下 (跨模块、跨语言通信之平台通道)

前文 Flutter 是一个跨平台的开发框架,它允许开发者使用相同的代码库来构建 iOS、Android、Web 和桌面应用程序。 上文flutter开发多端平台应用的探索 上(基本操作)-CSDN博客列举了一些特定平台的case(桌面端菜单,鼠标快捷键)的使用方法,有些是flutter提供了对应能力,只需要学习如何调API,有些事三方库支持,本文要探讨的平台通道是更为强大的工具,很多三方插件

Flutter-使用dio插件请求网络(get ,post,下载文件)

引入库:dio: ^2.1.13可直接运行的代码:包含了post,get 下载文件import 'package:flutter/material.dart';import 'package:dio/dio.dart';void main() {runApp(new MaterialApp(title: 'Container demo',home: new visitNetPage(),)

Flutter-选择附件,图片,视频。file_picker

仅供参考: 引入插件: file_picker: ^1.3.8 按照返回值,分了三组: // Single file path String filePath;第一组:返回文件地址 //选择任何文件 filePath = await FilePicker.getFilePath(type: FileType.ANY); // will let you pick one file path, fr

Flutter-图表显示charts_flutter

引入插件: charts_flutter: ^0.4.0 ChartFlutterBean import 'package:charts_flutter/flutter.dart';import 'package:myself_project/OrdinalSales%20.dart';class ChartFlutterBean {static List<Series<TimeSer

Flutter-常用插件汇总

audio_recorder: any #录音、播放flutter_sound: ^1.1.5#录音dropdown_menu: ^1.1.0#下拉菜单simple_permissions:#权限获取easy_alert:#弹框amap_location: any #高德地图location: any #gogle位置获取barcode_scan 0.0.8#二维码识别qr_mobile_vi