当前位置: 首页 > article >正文

第三百一十回

我们在上一章回中介绍了"再谈ListView中的分隔线",本章回中将介绍showMenu的用法.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在第一百六十三回中介绍了showMenu相关的内容,它主要用来显示移动PopupMenu在页面中的位置。如果大家忘记的话,可以点击这里查看详细的内容。本章回中
将在此基础上补充一些新的使用方法。

2. 基本用法

我们可以使用showMenu方法来移动PopupMenu,移动时主要使用了该方法提供的positon参数,这个内容我们在前面章回中介绍过,这里不再展开详细讨论。我们先看
一下showMenu方法的函数原型,详细如下:

Future<T?> showMenu<T>({
  required BuildContext context,
  required RelativeRect position,
  required List<PopupMenuEntry<T>> items,
  T? initialValue,
  double? elevation,
  Color? shadowColor,
  Color? surfaceTintColor,
  String? semanticLabel,
  ShapeBorder? shape,
  Color? color,
  bool useRootNavigator = false,
  BoxConstraints? constraints,
  Clip clipBehavior = Clip.none,
}) {}

从中可以看到它返回的是一个Future对象。因此我们可以像使用Future一样使用它。下面是该方法的基本用法,详细如下:

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'),
    ),
  ],)

3. 补充用法

我们在上一小节介绍了showMenu的基本用法,下面是该方法的补充用法:

showMenu(
  context:context,
  position: const RelativeRect.fromLTRB(170, 180, 110, 10),
  items: [
  ///省略,可以参考上面小节的代码 
  ],)
  .then((value) => null)
  .whenComplete(() => null);

该用法中主要以Future的方式运行,我们可以在PopMenu关闭后做一些逻辑任务。比如popMenu关闭后会调用then方法,此时可以在该方法中做一些逻辑业务。当
然了,具体的业务与项目有关,我习惯在popMenu关闭时恢复被popMenu遮挡的页面。

4. 内容总结

最后,我们对本章回中的内容做一个全面总结:

  • 可以单独显示PopMenu,也可以和结合showMenu方法一起使用;
  • 我们可以通过showMenu方法的参数来控制PopMenu的位置;
  • 我们可以像Futrue一样使用showMenu方法;
    看官们,与"再谈showMenu的用法"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

http://www.kler.cn/a/234931.html

相关文章:

  • WPF 使用LibVLCSharp.WPF实现视频播放、停止、暂停功能
  • Qt5HttpServer : Qt官方的HTTP服务器
  • List深拷贝后,数据还是被串改
  • 【C#】try-catch-finally语句的执行顺序,以及在发生异常时的执行顺序
  • 【libuv】Fargo信令1:client发connect消息给到server
  • Docker:Dockerfile(补充四)
  • 《21天精通IPv4 to IPv6》第10天:IPv6在物联网中的应用——如何在物联网中应用IPv4到IPv6?
  • redmi note 4x(mido) kali nethunter
  • 【2024年数据】67个“绿色金融”主题DID政策汇总(已去重)
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-中断管理
  • cad基础学习
  • 工业制造:分布式控制系统(DCS),一文掌握。
  • mac电脑安装cocoapods出错,以及安装最新版本ruby方法
  • 13 年后,我如何用 Go 编写 HTTP 服务(译)
  • 解决 postman测试接口报404 Not Found
  • 第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛(软件赛)软件测试组竞赛规则及说明
  • Excel——重复项处理
  • C语言实现一个简易的环形FIFO
  • 跟着GPT学设计模式之原型模式
  • Java图形化界面编程——弹球游戏 笔记
  • jvm体系结构
  • 电力负荷预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型(结合时间序列)
  • Vue源码系列讲解——虚拟DOM篇【一】(Vue中的虚拟DOM)
  • 登录报下面错误The remembered identity will be forgotten and not used for this request
  • 2024.02.11作业
  • FPGA_简单工程_VGA显示驱动器