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

Flutter---弹窗

常见的有六种

1.普通弹窗

效果图

实现代码

  //普通弹窗void showAlertDialog(BuildContext context) {showDialog(context: context,builder: (BuildContext context) {return AlertDialog(title: const Text('提示'),content: const Text('确定要删除吗?'),actions: [TextButton(onPressed: () => Navigator.pop(context),child: const Text('取消'),),ElevatedButton(onPressed: () {Navigator.pop(context);print('点击了确定');},child: const Text('确定'),),],);},);}

2.简单列表弹窗

效果图

实现代码

//简单列表弹窗void showSimpleDialog(BuildContext context) {showDialog(context: context,builder: (BuildContext context) {return SimpleDialog(title: const Text('选择语言'),children: [SimpleDialogOption(onPressed: () => Navigator.pop(context, '中文'),child: const Text('中文'),),SimpleDialogOption(onPressed: () => Navigator.pop(context, 'English'),child: const Text('English'),),],);},);}

3.底部弹窗

效果图

实现代码

//底部弹窗void showBottomSheetDialog(BuildContext context) {showModalBottomSheet(context: context,backgroundColor: Colors.transparent, // 背景透明shape: const RoundedRectangleBorder(borderRadius: BorderRadius.vertical(top: Radius.circular(16)),),builder: (BuildContext context) {return Container(height: 250,decoration: const BoxDecoration(color: Colors.white,borderRadius: BorderRadius.vertical(top: Radius.circular(16)),),child: Column(children: [const SizedBox(height: 16),const Text('选择操作', style: TextStyle(fontSize: 18)),const Divider(),ListTile(leading: const Icon(Icons.edit),title: const Text('编辑'),onTap: () => Navigator.pop(context, 'edit'),),ListTile(leading: const Icon(Icons.delete),title: const Text('删除'),onTap: () => Navigator.pop(context, 'delete'),),],),);},);}

4.IOS弹窗

效果图

实现代码

//IOS弹窗void showIOSDialog(BuildContext context) {showCupertinoDialog(context: context,builder: (BuildContext context) {return CupertinoAlertDialog(title: const Text('iOS风格弹窗'),content: const Text('确定要退出吗?'),actions: [CupertinoDialogAction(child: const Text('取消'),onPressed: () => Navigator.pop(context),),CupertinoDialogAction(isDestructiveAction: true,child: const Text('确定'),onPressed: () => Navigator.pop(context),),],);},);}

5.底部提示条

效果图

实现代码

//底部提示条void showSnackBar(BuildContext context) {ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('保存成功'),duration: Duration(seconds: 2),),);}

5.自定义动画弹窗

效果图

实现代码

//自定义动画弹窗void showCustomDialog(BuildContext context) {showGeneralDialog(context: context,barrierDismissible: true,barrierLabel: '',barrierColor: Colors.black54,transitionDuration: const Duration(milliseconds: 300),pageBuilder: (context, animation1, animation2) {return Center(child: Container(height: 200,width: 300,padding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.circular(16),),child: const Column(mainAxisSize: MainAxisSize.min,children: [Text('自定义弹窗', style: TextStyle(fontSize: 18)),SizedBox(height: 16),Text('你可以自定义动画、位置、模糊背景等。'),],),),);},transitionBuilder: (context, anim1, anim2, child) {return FadeTransition(opacity: anim1,child: ScaleTransition(scale: anim1, child: child),);},);}

代码实例

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';class HomePage extends StatefulWidget{const HomePage({super.key});@overrideState<StatefulWidget> createState() => _HomePageState();}class _HomePageState extends State<HomePage> {@overridevoid initState() {super.initState();}//UI构建@overrideWidget build(BuildContext context) {return Scaffold(body: Container(padding: EdgeInsets.only(left: 100),child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [GestureDetector(onTap: (){showAlertDialog(context);},child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children:[Text("普通弹窗"),]),),SizedBox(height: 20,),GestureDetector(onTap: (){showSimpleDialog(context);},child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children:[Text("简单列表弹窗"),]),),SizedBox(height: 20,),GestureDetector(onTap: (){showBottomSheetDialog(context);},child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children:[Text("底部弹窗"),]),),SizedBox(height: 20,),GestureDetector(onTap: (){showIOSDialog(context);},child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children:[Text("IOS弹窗"),]),),SizedBox(height: 20,),GestureDetector(onTap: (){showSnackBar(context);},child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children:[Text("底部提示条"),]),),SizedBox(height: 20,),GestureDetector(onTap: (){showCustomDialog(context);},child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children:[Text("自定义动画弹窗"),]),),],),));}//普通弹窗void showAlertDialog(BuildContext context) {showDialog(context: context,builder: (BuildContext context) {return AlertDialog(title: const Text('提示'),content: const Text('确定要删除吗?'),actions: [TextButton(onPressed: () => Navigator.pop(context),child: const Text('取消'),),ElevatedButton(onPressed: () {Navigator.pop(context);print('点击了确定');},child: const Text('确定'),),],);},);}//简单列表弹窗void showSimpleDialog(BuildContext context) {showDialog(context: context,builder: (BuildContext context) {return SimpleDialog(title: const Text('选择语言'),children: [SimpleDialogOption(onPressed: () => Navigator.pop(context, '中文'),child: const Text('中文'),),SimpleDialogOption(onPressed: () => Navigator.pop(context, 'English'),child: const Text('English'),),],);},);}//底部弹窗void showBottomSheetDialog(BuildContext context) {showModalBottomSheet(context: context,backgroundColor: Colors.transparent, // 背景透明shape: const RoundedRectangleBorder(borderRadius: BorderRadius.vertical(top: Radius.circular(16)),),builder: (BuildContext context) {return Container(height: 250,decoration: const BoxDecoration(color: Colors.white,borderRadius: BorderRadius.vertical(top: Radius.circular(16)),),child: Column(children: [const SizedBox(height: 16),const Text('选择操作', style: TextStyle(fontSize: 18)),const Divider(),ListTile(leading: const Icon(Icons.edit),title: const Text('编辑'),onTap: () => Navigator.pop(context, 'edit'),),ListTile(leading: const Icon(Icons.delete),title: const Text('删除'),onTap: () => Navigator.pop(context, 'delete'),),],),);},);}//IOS弹窗void showIOSDialog(BuildContext context) {showCupertinoDialog(context: context,builder: (BuildContext context) {return CupertinoAlertDialog(title: const Text('iOS风格弹窗'),content: const Text('确定要退出吗?'),actions: [CupertinoDialogAction(child: const Text('取消'),onPressed: () => Navigator.pop(context),),CupertinoDialogAction(isDestructiveAction: true,child: const Text('确定'),onPressed: () => Navigator.pop(context),),],);},);}//底部提示条void showSnackBar(BuildContext context) {ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('保存成功'),duration: Duration(seconds: 2),),);}//自定义动画弹窗void showCustomDialog(BuildContext context) {showGeneralDialog(context: context,barrierDismissible: true,barrierLabel: '',barrierColor: Colors.black54,transitionDuration: const Duration(milliseconds: 300),pageBuilder: (context, animation1, animation2) {return Center(child: Container(height: 200,width: 300,padding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.circular(16),),child: const Column(mainAxisSize: MainAxisSize.min,children: [Text('自定义弹窗', style: TextStyle(fontSize: 18)),SizedBox(height: 16),Text('你可以自定义动画、位置、模糊背景等。'),],),),);},transitionBuilder: (context, anim1, anim2, child) {return FadeTransition(opacity: anim1,child: ScaleTransition(scale: anim1, child: child),);},);}}

http://www.dtcms.com/a/516510.html

相关文章:

  • 从零开始学习RabbitMQ
  • 台州市住房和城乡建设局网站做美容美发学校网站公司
  • [答疑]考虑复用,尺度应该怎样把握
  • 注册网站借钱平台犯不犯法个人网站logo需要备案吗
  • 最新电大网站开发维护竞价托管推广代运营
  • 字符串统计
  • Docker与Tomcat:一键部署Java Web应用的完美组合
  • 【同步/异步 日志系统】 --- 前置技术
  • 图论基础和表示
  • 网站建设为了什么怎么看网站谁做的
  • [小白]spring boot接入emqx
  • Spring Boot 实现GZIP压缩优化
  • Spring Boot使用Redis实现消息队列
  • 互联网大厂Java面试实战:以Spring Boot与微服务为核心的技术场景剖析
  • 做网站页面的软件毕业设计网站成品
  • 《一个浏览器多人用?Docker+Neko+cpolar实现跨网共享》
  • design设计网站网站优化方法页面
  • C++基础:(十七)模版进阶:深入探索非类型参数、特化、分离编译与实战技巧
  • 《Git:从入门到精通(五)—— Git:Gitee远程仓库创建与克隆指南》
  • UML学习文档(一)
  • 淘宝放单网站开发网站wordpress错误
  • Latex中的错误汇总
  • huggingface transformers调试问题--加载本地路径模型时pdb断点消失
  • KMP算法详解 -- 串的模式匹配
  • 用php做网站的方法学网站建设前途
  • 网站不用下载免费软件曰本孕妇做爰网站
  • 【微信小程序 + 消息订阅 + 授权】 微信小程序实现消息订阅流程介绍,代码示例(仅前端)
  • 网站开发找哪家什么查网站是否降权
  • 【经典书籍】C++ Primer 第13类继承精华讲解
  • “VMware与vmx86驱动程序版本不匹配:预期为:417,实际为416。”解决步骤,亲测有效!!!