热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发分享你知道吗,Flutter内置了10多种show

注意:无特殊说明,Flutter版本及Dart版本如下:Flutter版本:1.12.13+hotfix.5Dart版本:2.7.0showDialogshowDialog用于弹出

你知道吗,Flutter内置了10多种show

注意:无特殊说明,flutter版本及dart版本如下:

  • flutter版本: 1.12.13+hotfix.5
  • dart版本: 2.7.0

showdialog

showdialog 用于弹出material风格对话框,基本用法如下:

showdialog(     context: context,     builder: (context) {       return alertdialog(         ...       );     } );

效果如下:

你知道吗,Flutter内置了10多种show

builder通常返回dialog组件,比如simpledialogalertdialog

userootnavigator参数用于确定是否将对话框推送到给定“context”最远或最接近的navigator。默认情况下,userootnavigator为“true”,被推送到根navigator。如果应用程序有多个navigator,关闭对话框需要使用

navigator.of(context, rootnavigator: true).pop(result)

而不是

navigator.pop(context, result)

barrierdismissible参数确认点击提示框外部区域时是否弹出提示框,默认true。

showcupertinodialog

showcupertinodialog 用于弹出ios风格对话框,基本用法如下:

showcupertinodialog(     context: context,     builder: (context) {       return cupertinoalertdialog(        ...       );     });

效果如下:

你知道吗,Flutter内置了10多种show

builder通常返回cupertinodialog或者cupertinoalertdialog

showgeneraldialog

如果上面2种提示框不满足你的需求,还可以使用showgeneraldialog自定义提示框,事实上,showdialog和showcupertinodialog也是通过showgeneraldialog实现的,基本用法如下:

showgeneraldialog(     context: context,     barrierdismissible:true,     barrierlabel: '',     transitionduration: duration(milliseconds: 200),     pagebuilder: (buildcontext context, animation animation,         animation secondaryanimation) {       return center(         child: container(           height: 300,           width: 250,           color: colors.lightgreenaccent,         ),       );     });

效果如下:

你知道吗,Flutter内置了10多种show

加上背景颜色:

showgeneraldialog(     context: context,     barriercolor: colors.black.withopacity(.5),     ...   )

效果如下:

你知道吗,Flutter内置了10多种show

barrierdismissible:是否可以点击背景关闭。

barriercolor:背景颜色

transitionduration:动画时长,

transitionbuilder是构建进出动画,默认动画是渐隐渐显,构建缩放动画代码如下:

showgeneraldialog(     transitionbuilder: (buildcontext context, animation animation,         animation secondaryanimation, widget child) {       return scaletransition(scale: animation, child: child);     },     ...   )

效果如下:

你知道吗,Flutter内置了10多种show

showaboutdialog

aboutdialog用于描述当前app信息,底部提供2个按钮:查看许可按钮和关闭按钮。aboutdialog需要和showaboutdialog配合使用,用法如下:

showaboutdialog(   context: context,   applicationicon: image.asset(     'images/bird.png',     height: 100,     width: 100,   ),   applicationname: '应用程序',   applicationversion: '1.0.0',   applicationlegalese: 'copyright 老孟,一枚有态度的程序员',   children: [     container(       height: 30,       color: colors.red,     ),     container(       height: 30,       color: colors.blue,     ),     container(       height: 30,       color: colors.green,     )   ], );

效果如下:

你知道吗,Flutter内置了10多种show

属性说明如下:

  • applicationicon:应用程序的图标。
  • applicationname:应用程序名称。
  • applicationversion:应用程序版本。
  • applicationlegalese:著作权(copyright)的提示。
  • children:位置如上图的红蓝绿色的位置。

所有的属性都需要手动设置,不是自动获取的。

下面的2个按钮根据应用程序支持的语言显示相应的语言,比如显示中文方法如下:

  1. pubspec.yaml中配置支持国际化:
dependencies:   flutter:     sdk: flutter   flutter_localizations:     sdk: flutter
  1. 在materialapp中配置当前区域:
materialapp(       title: 'flutter demo',       localizationsdelegates: [         globalmateriallocalizations.delegate,         globalwidgetslocalizations.delegate,       ],       supportedlocales: [         const locale('zh', 'ch'),         const locale('en', 'us'),       ],       locale: locale('zh'),       ...   )

此时效果:

你知道吗,Flutter内置了10多种show

此时点击查看许将会调用showlicensepage,相关效果可以查看showlicensepage

showlicensepage

此控件基本不会用到,浏览一下即可。

licensepage用于描述当前app许可信息,licensepage需要和showlicensepage配合使用,用法如下:

showlicensepage(   context: context,   applicationicon: image.asset(     'images/bird.png',     height: 100,     width: 100,   ),   applicationname: '应用程序',   applicationversion: '1.0.0',   applicationlegalese: 'copyright 老孟,一枚有态度的程序员', );

效果如下:

你知道吗,Flutter内置了10多种show

下面的英文我们是无法更改的。

showbottomsheet

在最近的scaffold父组件上展示一个material风格的bottom sheet,位置同scaffold组件的bottomsheet,如果scaffold设置了bottomsheet,调用showbottomsheet抛出异常。

基本用法如下:

showbottomsheet(     context: context,     builder: (context) {       return container(height: 200, color: colors.lightblue);     });

效果如下:

你知道吗,Flutter内置了10多种show

设置其背景颜色、阴影值、形状:

showbottomsheet(     context: context,     backgroundcolor: colors.lightgreenaccent,     elevation:20,     shape: circleborder(),     builder: (context) {       return container(height: 200);     });

效果如下:

你知道吗,Flutter内置了10多种show

通常情况下,我们希望直接从底部弹出,showmodalbottomsheet提供了直接从底部弹出的功能。

showmodalbottomsheet

从底部弹出,通常和bottomsheet配合使用,用法如下:

showmodalbottomsheet(         context: context,         builder: (buildcontext context) {           return bottomsheet(...);         });

效果如下:

你知道吗,Flutter内置了10多种show

设置背景、阴影、形状:

showmodalbottomsheet(     context: context,     backgroundcolor: colors.lightblue,     elevation: 10,     shape: roundedrectangleborder(borderradius: borderradius.circular(30)),     ...   )

效果如下:

你知道吗,Flutter内置了10多种show

isdismissible:是否可以点击背景关闭。

isscrollcontrolled参数指定是否使用可拖动的可滚动的组件,如果子组件是listview或者gridview,此参数应该设置为true,设置为true后,最大高度可以占满全屏。用法如下:

showmodalbottomsheet(     context: context,     isscrollcontrolled: true,     builder: (buildcontext context) {       return listview.builder(         itembuilder: (context, index) {           return listtile(             title: text('老孟$index'),           );         },         itemextent: 50,         itemcount: 50,       );     });

showcupertinomodalpopup

showcupertinomodalpopup 展示ios的风格弹出框,通常情况下和cupertinoactionsheet配合使用,用法如下:

showcupertinomodalpopup(     context: context,     builder: (buildcontext context) {       return cupertinoactionsheet(         title: text('提示'),         message: text('是否要删除当前项?'),         actions: [           cupertinoactionsheetaction(             child: text('删除'),             onpressed: () {},             isdefaultaction: true,           ),           cupertinoactionsheetaction(             child: text('暂时不删'),             onpressed: () {},             isdestructiveaction: true,           ),         ],       );     } );

效果如下:

你知道吗,Flutter内置了10多种show

filter参数可以对弹出框以外的区域做模糊或者矩阵操作,用法如下:

showcupertinomodalpopup(     context: context,     filter: imagefilter.blur(sigmax: 5.0, sigmay: 5.0),     ...   )

效果如下:

你知道吗,Flutter内置了10多种show

弹出框以外的区域有毛玻璃的效果。

showmenu

showmenu弹出一个menu菜单,用法如下:

showmenu(     context: context,     position: relativerect.fill,     items: [       popupmenuitem(child: text('语文')),       popupmenudivider(),       checkedpopupmenuitem(         child: text('数学'),         checked: true,       ),       popupmenudivider(),       popupmenuitem(child: text('英语')),     ]);

position参数表示弹出的位置,效果如下:

你知道吗,Flutter内置了10多种show

弹出的位置在屏幕的左上角,我们希望弹出的位置在点击按钮的位置,因此需要计算按钮的位置,计算如下:

final renderbox button = context.findrenderobject(); final renderbox overlay = overlay.of(context).context.findrenderobject(); final relativerect position = relativerect.fromrect(   rect.frompoints(     button.localtoglobal(offset(0, 0), ancestor: overlay),     button.localtoglobal(button.size.bottomright(offset.zero),         ancestor: overlay),   ),   offset.zero & overlay.size, );

你需要将按钮单独封装为statefulwidget组件,否则context代表的就不是按钮组件。

showsearch

showsearch 是直接跳转到搜索页面,用法如下:

showsearch(context: context, delegate: customsearchdelegate());  class customsearchdelegate extends searchdelegate{   @override   list buildactions(buildcontext context) {     return null;   }    @override   widget buildleading(buildcontext context) {     return null;   }    @override   widget buildresults(buildcontext context) {     return null;   }    @override   widget buildsuggestions(buildcontext context) {     return null;   }  }

使用showsearch,首先需要重写一个searchdelegate,实现其中的4个方法。

buildleading表示构建搜索框前面的控件,一般是一个返回按钮,点击退出,代码如下:

@override widget buildleading(buildcontext context) {   return iconbutton(     icon: icon(icons.arrow_back,color: colors.blue,),     onpressed: (){       close(context, '');     },   ); }

效果如下:

你知道吗,Flutter内置了10多种show

buildsuggestions是用户正在输入时显示的控件,输入框放生变化时回调此方法,通常返回一个listview,点击其中一项时,将当前项的内容填充到输入框,用法如下:

@override widget buildsuggestions(buildcontext context) {   return listview.separated(     itembuilder: (context, index) {       return listtile(         title: text('老孟 $index'),         ontap: () {           query = '老孟 $index';         },       );     },     separatorbuilder: (context, index) {       return divider();     },     itemcount: random().nextint(5),   ); }

效果如下:

你知道吗,Flutter内置了10多种show

buildactions输入框后面的控件,一般情况下,输入框不为空,显示一个清空按钮,点击清空输入框:

@override list buildactions(buildcontext context) {   return [     iconbutton(       icon: icon(         icons.clear,       ),       onpressed: () {         query = '';       },     )   ]; }

buildresults是构建搜索结果控件,当用户点击软键盘上的“search”时回调此方法,一般返回listview,用法如下:

@override widget buildresults(buildcontext context) {   return listview.separated(     itembuilder: (context, index) {       return container(         height: 60,         alignment: alignment.center,         child: text(           '$index',           style: textstyle(fontsize: 20),         ),       );     },     separatorbuilder: (context, index) {       return divider();     },     itemcount: 10,   ); }

效果如下:

你知道吗,Flutter内置了10多种show

欢迎加入flutter的微信交流群(laomengit),一起学习,一起进步,生活不止眼前的苟且,还有诗和《远方》。

当然我也非常希望您关注我个人的公众号,里面有各种福利等着大家哦。

你知道吗,Flutter内置了10多种show


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文讨论了如何在dotnet桌面(Windows)应用程序中添加图标。作者提到可以使用dotnet命令行工具与resource.rc文件一起使用来为标准.NET核心应用程序添加图标。作者还介绍了在创建控制台应用程序时如何编辑projeto1.csproj文件来添加图标。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
NarratorWang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有