功能点:

1.更新弹窗UI

2.强更与非强更且别控制

3.屏蔽物理返回键(因为强更的时候点击返回键,弹窗会消失)

4.点击弹窗外透明区域时,弹窗不消失

先看下效果图:

Dialog实现代码:

import 'package:flutter/material.dart';
import 'package:xiaopijiang/utils/assets_util.dart';
import 'package:xiaopijiang/utils/toast_util.dart';

///created by WGH
///on 2020/7/23
///description:版本更新提示弹窗
class UpdateDialog extends Dialog {
 final String upDateContent;
 final bool isForce;

 UpdateDialog({this.upDateContent, this.isForce});

 @override
 Widget build(BuildContext context) {
 return Center(
  child: Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[
   Container(
   width: 319,
   height: 370,
   child: Stack(
    children: <Widget>[
    Image.asset(
     AssetsUtil.getImagePath(
      imageName: 'bg_update', suffix: 'png'),
     fit: BoxFit.cover,
    ),
    Container(
     width: double.infinity,
     child: Column(
     mainAxisAlignment: MainAxisAlignment.spaceBetween,
     children: <Widget>[
      Container(
      margin: EdgeInsets.only(top: 110),
      child: Text('发现新版本',
       style: TextStyle(
        fontSize: 20,
        color: Colors.white,
        decoration: TextDecoration.none)),
      ),
      Text(upDateContent,
       style: TextStyle(
        fontSize: 16,
        color: Colors.black54,
        decoration: TextDecoration.none)),
      Container(
      width: 250,
      height: 42,
      margin: EdgeInsets.only(bottom: 15),
      child: RaisedButton(
       color: Colors.red,
       shape: StadiumBorder(),
       child: Text(
        '立即更新',
        style:
         TextStyle(fontSize: 20, color: Colors.white),
       ),
       onPressed: () {
        ToastUtil.showTips('下载apk');
       }),
      )
     ],
     ),
    ),
    ],
   ),
   ),
   GestureDetector(
   onTap: () {
    Navigator.pop(context);
   },
   child: Offstage(
    offstage: isForce,
    child: Container(
     margin: EdgeInsets.only(top: 30),
     child: Image.asset(
     AssetsUtil.getImagePath(
      imageName: 'ic_update_close', suffix: 'png'),
     width: 35,
     height: 35,
     )),
   ),
   )
  ],
  ),
 );
 }

 static showUpdateDialog(
  BuildContext context, String mUpdateContent, bool mIsForce) {
 return showDialog(
  barrierDismissible: false,
  context: context,
  builder: (BuildContext context) {
   return WillPopScope(
    child: UpdateDialog(
     upDateContent: mUpdateContent, isForce: mIsForce),onWillPop: _onWillPop);
  });
 }

 static Future<bool> _onWillPop() async{
 return false;
 }
}

调用Dialog:

_checkUpdate() async{
 int serviceVersionCode = 101;
 PackageInfo packageInfo = await PackageInfo.fromPlatform();
 //获取当前的版本号
 int currentVersionCode = int.parse(packageInfo.version.replaceAll('.', ''));
 //如果获取服务器的版本号比当前应用程序的版本号还高,那么提示升级
 if (serviceVersionCode > currentVersionCode) {
  if(Platform.isAndroid){
  //Android平台在应用内进行更新
  //弹出"版本更新"的对话框
  UpdateDialog.showUpdateDialog(context, '1.修复已知bug\n2.优化用户体验', false);
  }else if(Platform.isIOS){
  //iOS平台跳转道AppStore进行更新
  }
 }
 }

重点说明:

屏蔽物理返回键(因为强更的时候点击返回键,弹窗会消失)

barrierDismissible: false,

4.点击弹窗外透明区域时,弹窗不消失

return WillPopScope(
    child: UpdateDialog(
     upDateContent: mUpdateContent, isForce: mIsForce),
    onWillPop: _onWillPop);

 static Future<bool> _onWillPop() async {
 return false;
 }

到此这篇关于Flutter之自定义Dialog实现版本更新弹窗功能的实现的文章就介绍到这了,更多相关Flutter自定义Dialog弹窗内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Flutter之自定义Dialog实现版本更新弹窗功能的实现的更多相关文章

  1. HTML5 weui使用笔记

    这篇文章主要介绍了HTML5 weui使用笔记,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Swift 3 popup model dialog传递数据

    弹出的controller:

  3. Flutter中文教程-Cookbook

    Flutter中文网的Cookbook中包含了在编写Flutter应用程序时常见问题及示例。设计基础使用主题共享颜色和字体样式Images显示来自网上的图片用占位符淡入图片使用缓存图Lists创建一个基本list创建一个水平list使用长列表创建不同类型子项的List创建一个gridList处理手势处理点击添加Material触摸水波效果实现滑动关闭导航导航到新页面并返回给新页面传值从新页面返回数据给上一个页面网络从网上获取数据进行认证请求使用WebSockets

  4. android – 当应用程序转到后台时阻止Dialog(或DialogFragment)关闭

    我的应用程序向用户显示进度或AlertDialog是很常见的.如果用户将应用程序放入后台然后稍后返回,我希望仍然显示对话框.有没有办法让Android处理这个?

  5. android – Toast与Dialog框:何时使用?

    谢谢.解决方法Toast主要用于告知用户一些不重要且不需要交互的东西,所以我会使用Toastforthethat.此外,Toast不会阻止用户使用设备/应用程序,您仍然可以激活,例如显示Toast时的基础图标.对话框通常要求用户做出选择,或者显示不需要交互的进度但是将使用户在此期间不做其他事情,这可能是重要的,例如,一旦用户在完成参数之前更改参数,您进行的计算将失败.

  6. android – 当从View的LongPress触发DOWN事件时,从Dialog注册UP / CANCEL

    我有一个UX要求,即用户通过长按GridView中的单元格来触发Dialog.>显示对话框时,用户必须能够在屏幕周围移动手指/拇指,而不会在离开GridView单元格边界时触发UP/CANCEL事件.>当用户最终断开与屏幕的联系时,我正在寻找捕获.GridView似乎记录了UP/CANCEL的一些误报,我们没有看到使用任何其他视图.>问题是原始视图捕获所有触摸事件,因为DOWN被它捕获.>在原始视

  7. android – 在片段中实现对话框时添加内容之前必须请求窗口功能

    我有一个片段,我需要在其中显示自定义对话框.请查看下面的代码.删除行时:没有错误,但如果我使用相同的以下错误抛出:解决方法我已经为你的情况实施并尝试了很多替代方案,它的工作非常好,所以我没有机会审查你的错误.但我可以建议你用AlertDialog.Builder替换AppCompatDialog,这是一个android.support.v7.app类.替换此代码同注意:如果您有任何处理对话事件的类

  8. android – 当一个Activity作为Dialog打开时,如何设置一个可取消的false?

    我的主题代码如下:解决方法您可以非常轻松地在Java编码中实现这一点.如果你有一个Activity,那么你应该这样做如果您使用过Dialog类,则应该调用如果要在单击后台活动时阻止关闭它.

  9. android-studio – 未配置Dart SDK

    Initializinggradle…

  10. 在Android日期选择器中停用未来日期

    大家好:如何在Android中禁用DatePickerDialog中的未来日期.我正在使用以下实现.http://www.androidpeople.com/android-datepicker-dialog-example谢谢Ashwani解决方法您应该可以在DatePickerDialog上调用getDatePicker().setMaxDate(long),将今天设置为最大日期.您可以使用您

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部