Flutter - 自定义Dialog弹窗
------------恢复内容开始------------
Flutter - 自定义Dialog弹窗
应用场景:app系统版本升级弹窗,系统退出登录弹窗,首页广告弹窗,消息中心弹窗,删除文件弹窗等等各种应用场景中,我们开发中都会遇到此情形。
废话不多话,先看效果图如下:(以上场景中代码逻辑都差不多,源代码自行修改即可!!!)------这里仅展示退出登录场景
逻辑其实很简单,重写Dialog类即可。
逻辑代码如下:
import 'package:flutter/material.dart'; class DialogWidget extends Dialog {
final String title; //标题
final String content; //内容
final String cancelText; //是否需要"取消"按钮
final String confirmText; //是否需要"确定"按钮
final Function cancelFun; //取消回调
final Function confirmFun; //确定回调 DialogWidget({
Key key,
@required this.title,
@required this.content,
this.cancelText,
this.confirmText,
@required this.cancelFun,
this.confirmFun
}) : super(key: key); @override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(15),
child: Material(
type: MaterialType.transparency,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
decoration: ShapeDecoration(
color: Color(0xfff2f2f2),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(10),
),
),
),
margin: EdgeInsets.all(15),
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(10),
child: Center(
child: Text(title, style: TextStyle(color: Color(0xff666666))),
),
),
Container(
color: Color(0xffffffff),
height: 1.0,
),
Container(
constraints: BoxConstraints(minHeight: 100),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: IntrinsicHeight(
child: Text(title, style: TextStyle(color: Color(0xff666666))),
),
),
),
Container(
color: Color(0xffeeeeee),
height: 1.0,
),
this._buildBottomButtonGroup()
],
),
)
],
),
),
);
} Widget _buildBottomButtonGroup() {
var widgets = <Widget>[];
if (cancelText != null && cancelText.isNotEmpty) widgets.add(_buildBottomCancelButton());
if (confirmText != null && confirmText.isNotEmpty && confirmText != null && confirmText.isNotEmpty) widgets.add(_buildBottomOnline());
if (confirmText != null && confirmText.isNotEmpty) widgets.add(_buildBottomPositiveButton()); return Flex(
direction: Axis.horizontal,
children: widgets,
);
} Widget _buildBottomOnline() {
return Container(
color: Color(0xffeeeeee),
height: 38,
width: 1,
);
} Widget _buildBottomCancelButton() {
return Flexible(
fit: FlexFit.tight,
child: FlatButton(
onPressed: this.cancelFun,
child: Text(title, style: TextStyle(color: Color(0xff666666))),
),
);
} Widget _buildBottomPositiveButton() {
return Flexible(
fit: FlexFit.tight,
child: FlatButton(
onPressed: this.confirmFun,
child: Text(title, style: TextStyle(color: Color(0xff666666))),
),
);
}
}
代码中实际的效果可能与上面附图可能不一样, 但是逻辑是一样的。(如背景颜色字体等等,自行配置)
下面该如何使用调用呢?
点击"退出登录"按钮:
FlatButton(
child: Text("退出登录"),
onPressed: logOut, //退出登录方法
)
方法:
// 退出登录
void logOut(){
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context){
return DialogWidget(
title: '提示',
content: '确定要退出吗?',
cancelText: '取消',
confirmText: '确定',
cancelFun: (){
Navigator.pop(context);
},
confirmFun: (){
Navigator.pop(context);
Navigator.pop(context);
Provider.of<UserModel>(context).clearUserInfo();
},
);
}
);
}
到这里基本结束了,希望大家学以致用,举一反三!!!
------------恢复内容结束------------
Flutter - 自定义Dialog弹窗的更多相关文章
- 30 Flutter自定义Dialog
MyDialog.dart import 'dart:async'; import 'package:flutter/material.dart'; class MyDialog extends Di ...
- Flutter学习笔记(41)--自定义Dialog实现版本更新弹窗
如需转载,请注明出处:Flutter学习笔记(41)--自定义Dialog实现版本更新弹窗 功能点: 1.更新弹窗UI 2.强更与非强更且别控制 3.屏蔽物理返回键(因为强更的时候点击返回键,弹窗会消 ...
- 自定义Dialog布局的弹窗功能的简单实现
package com.loaderman.dialogdemo; import android.os.Bundle; import android.support.v7.app.AlertDialo ...
- AlertDialog 、SimpleDialog、 showModalBottomSheet、showToast 自定义 Dialog
// AlertDialog .SimpleDialog.showModalBottomSheet.showToast // 使用showToast安装插件 https://pub.dev/packa ...
- Android自定义Dialog
Android开发过程中,常常会遇到一些需求场景——在界面上弹出一个弹框,对用户进行提醒并让用户进行某些选择性的操作, 如退出登录时的弹窗,让用户选择“退出”还是“取消”等操作. Android系统提 ...
- 非自定义和自定义Dialog的介绍!!!
一.非自定义Dialog的几种形式介绍 转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 前言 对话框对于应用也是必不可少的一个组件,在 ...
- Android—自定义Dialog
在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...
- Android自定义Dialog(美化界面)
前言:在做项目的时候,发现dialog界面太丑陋,从csdn上下载了一份自定义dialog的源码,在他的基础上对界面进行美化...有需要的朋友可以直接拿走 效果图如下: 主要代码: /** * 自定义 ...
- 通用的Dialog自定义dialog
图样:
随机推荐
- 程序员必须了解的知识点——你搞懂mysql索引机制了吗?
一.索引是什么 MySQL官方对索引的定义为:索引(Index)是帮助MySQL 高效 获取数据的数据结构,而MYSQL使用的数据结构是:B+树 在这里推荐大家看一本书,<深入理解计算机系统的书 ...
- 使用SpringBoot的方式配置过滤器
springboot 不存在web.xml 那么如何配置过滤器呢 springboot提供了一种方式 通过spring容器配置 @Bean public FilterRegistrationBean ...
- Android作业 0923
计算器小应用 package com.example.myhomework2; import androidx.appcompat.app.AppCompatActivity; import andr ...
- 在Linux系统下搭建和配置一个minio文件服务器(一)
1.minio文件服务器的介绍 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日 ...
- 编程体系结构(04):JavaIO流文件管理
本文源码:GitHub·点这里 || GitEE·点这里 一.IO流分类 1.分类角度 流的方向 输入流:从数据源中读取数据到应用中的流: 输出流:从应用中将数据写入到目的地的流: 流数据类型 字节流 ...
- 浅谈 Java线程状态转换及控制
线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...
- Centos-shell-简介
shell 壳 1. 用户在操作系统上完成的所有任务都是通过shell与linux内核的交互实现的, 是用户和操作系统内核之间的通信桥梁 用户操作任务 <__> shell <__& ...
- Docker系列——利用gogs搭建属于自己的git服务
gogs简介 Gogs的目标是打造一个最简单.最快速和最轻松的方式搭建自助Git服务.使用Go语言开发使得Gogs能够通过独立的二进制分发,并且支持Go语言支持的所有平台,包括 Linux.Mac O ...
- 061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结
061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结 本文知识点:一维数组总结 总结 注意点
- 【题解】[SDOI2015]星际战争
\(\color{red}{Link}\) \(\text{Solution:}\) 观察到,如果一个时间\(T\)可以完成任务,则\(T+1\)这个时间也可以完成任务. 于是我们可以二分. 为了避免 ...