------------恢复内容开始------------

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弹窗的更多相关文章

  1. 30 Flutter自定义Dialog

    MyDialog.dart import 'dart:async'; import 'package:flutter/material.dart'; class MyDialog extends Di ...

  2. Flutter学习笔记(41)--自定义Dialog实现版本更新弹窗

    如需转载,请注明出处:Flutter学习笔记(41)--自定义Dialog实现版本更新弹窗 功能点: 1.更新弹窗UI 2.强更与非强更且别控制 3.屏蔽物理返回键(因为强更的时候点击返回键,弹窗会消 ...

  3. 自定义Dialog布局的弹窗功能的简单实现

    package com.loaderman.dialogdemo; import android.os.Bundle; import android.support.v7.app.AlertDialo ...

  4. AlertDialog 、SimpleDialog、 showModalBottomSheet、showToast 自定义 Dialog

    // AlertDialog .SimpleDialog.showModalBottomSheet.showToast // 使用showToast安装插件 https://pub.dev/packa ...

  5. Android自定义Dialog

    Android开发过程中,常常会遇到一些需求场景——在界面上弹出一个弹框,对用户进行提醒并让用户进行某些选择性的操作, 如退出登录时的弹窗,让用户选择“退出”还是“取消”等操作. Android系统提 ...

  6. 非自定义和自定义Dialog的介绍!!!

    一.非自定义Dialog的几种形式介绍 转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 前言 对话框对于应用也是必不可少的一个组件,在 ...

  7. Android—自定义Dialog

    在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...

  8. Android自定义Dialog(美化界面)

    前言:在做项目的时候,发现dialog界面太丑陋,从csdn上下载了一份自定义dialog的源码,在他的基础上对界面进行美化...有需要的朋友可以直接拿走 效果图如下: 主要代码: /** * 自定义 ...

  9. 通用的Dialog自定义dialog

    图样:

随机推荐

  1. Nginx 配置 HTTPS 完整过程(阿里云申请免费版一年ssl证书)

    1. nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块. $ /usr/local/nginx/sbin/nginx -V 如果出现 configur ...

  2. Oracle学习(三)SQL高级--表结构相关(建表、约束)

    一.建表语句 CREATE DATABASE(创建数据库) --创建数据库 create database 数据库名字; CREATE TABLE(创建表) --创建表 CREATE TABLE 表名 ...

  3. svn提交代码出错

    今天提交代码的时候一直报错,下面是错误信息 Error: Commit failed (details follow):  Error: Commit blocked by pre-commit ho ...

  4. 需要完成PAT作业和微博作业的具体方法

    http://www.cnblogs.com/c-programing-language/p/6703508.html

  5. Python新手入门基础

    认识 Python 人生苦短,我用 Python -- Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...

  6. Spark中的聚类算法

    Spark - Clustering 官方文档:https://spark.apache.org/docs/2.2.0/ml-clustering.html 这部分介绍MLlib中的聚类算法: 目录: ...

  7. 我没学过计算机,是怎么接了四个私活还挣了两个 iPad 的?

    你好,我是悟空哥,「7年项目开发经验,全栈工程师,开发组长,超喜欢图解编程底层原理」.我还手写了2个小程序,Java刷题小程序,PMP刷题小程序.我的 GitHub. 前言 大家看到这篇文章的时候,我 ...

  8. Java知识系统回顾整理01基础04操作符05赋值操作符

    一.赋值操作 赋值操作的操作顺序是从右到左 int i = 5+5; 首先进行5+5的运算,得到结果10,然后把10这个值,赋给i public class HelloWorld { public s ...

  9. 电机AB相编码器测速

    控制任务 检测编码器的脉冲并测速 电路设计 图1 直流电机带减速器和编码器 图2  编码器接线定义 编码器接线定义如下 M1:电机电源接口,绿色的 GND:编码器电源负极输入口,橙色的 C1:编码器A ...

  10. P4568 [JLOI2011]飞行路线 / P2939 [USACO09FEB]Revamping Trails G

    题目描述 Link Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 \(n\) 个城市设有业务,设这些城市分别标记为 \(0\) 到 \(n-1\),一共 ...