Flutter封装弹框、提示工具类【基于fluttertoast】

提示

已将代码上传至gitee,后续会继续更新学习封装的一些组件:
flutter练习

实现效果请添加图片描述

实现

  • 1.先在pubspec.yaml文件汇总引入fluttertoast的包:
fluttertoast: ^8.0.8 # 弹窗
  • 2.封装弹框工具类DialogUtils:
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';

/// @author longzipeng
/// @创建时间:2022/2/24
/// 封装自定义弹框
class DialogUtils {
  /// 基础弹框
  static alert(
    BuildContext context, {
    String title = "提示",
    String content = "",
    GestureTapCallback? confirm,
    GestureTapCallback? cancle,
    List<Widget>? actions, // 自定义按钮
  }) {
    showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            title: Text(
              '提示',
              style: TextStyle(color: Theme.of(context).primaryColor),
            ),
            content: Text(content),
            actions: actions ??
                <Widget>[
                  InkWell(
                    onTap: () {
                      if (cancle != null) {
                        cancle();
                      }
                      Navigator.of(context).pop();
                    },
                    child: const Padding(
                      padding: EdgeInsets.only(right: 20),
                      child: Text(
                        "取消",
                        style: TextStyle(color: Colors.grey),
                      ),
                    ),
                  ),
                  InkWell(
                    onTap: () {
                      if (confirm != null) {
                        confirm();
                      }
                      Navigator.of(context).pop();
                    },
                    child: Padding(
                      padding: const EdgeInsets.only(right: 10),
                      child: Text(
                        "确定",
                        style: TextStyle(color: Theme.of(context).primaryColor),
                      ),
                    ),
                  )
                ],
          );
        });
  }

  /// 弹出关于界面
  static alertAboutDialog(BuildContext context) {
    showAboutDialog(
      context: context,
      applicationIcon: FlutterLogo(),
      applicationName: 'flutterdemo',
      applicationVersion: '1.0.0',
      applicationLegalese: 'copyright 编程小龙',
      children: <Widget>[
        Container(
          height: 70,
          child: const Text(
            "总而言之,言而总之,时而不知,终究自知",
            maxLines: 2,
            style: TextStyle(),
          ),
        ),
      ],
    );
  }

  /// 显示普通消息
  static showMessage(String msg,
      {toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.CENTER,
      timeInSecForIosWeb: 1,
      backgroundColor: Colors.grey,
      fontSize: 16.0}) {
    // 先关闭弹框再显示对应弹框
    Fluttertoast.cancel();
    Fluttertoast.showToast(
        msg: msg,
        toastLength: toastLength,
        gravity: gravity,
        timeInSecForIosWeb: timeInSecForIosWeb,
        backgroundColor: backgroundColor,
        fontSize: fontSize);
  }

  /// 显示错误消息
  static showErrorMessage(String msg,
      {toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.CENTER,
      timeInSecForIosWeb: 1,
      backgroundColor: Colors.red,
      fontSize: 16.0}) {
    showMessage(msg,
        toastLength: toastLength,
        gravity: gravity,
        timeInSecForIosWeb: timeInSecForIosWeb,
        backgroundColor: backgroundColor,
        fontSize: fontSize);
  }

  /// 显示警告信息
  static showWaringMessage(String msg,
      {toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.CENTER,
      timeInSecForIosWeb: 1,
      backgroundColor: Colors.orangeAccent,
      fontSize: 16.0}) {
    showMessage(msg,
        toastLength: toastLength,
        gravity: gravity,
        timeInSecForIosWeb: timeInSecForIosWeb,
        backgroundColor: backgroundColor,
        fontSize: fontSize);
  }
  /// 显示成功消息
  static showSuccessMessage(String msg,
      {toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.CENTER,
        timeInSecForIosWeb: 1,
        backgroundColor: Colors.greenAccent,
        fontSize: 16.0}) {
    showMessage(msg,
        toastLength: toastLength,
        gravity: gravity,
        timeInSecForIosWeb: timeInSecForIosWeb,
        backgroundColor: backgroundColor,
        fontSize: fontSize);
  }
}

测试

注意:这里ListTitleWidget是自己封装的组件,直接改为ListTitle就不会报错了

import 'package:csdn_flutter_demo/pages/common/common_appbar.dart';
import 'package:csdn_flutter_demo/utils/dialog_utils.dart';
import 'package:csdn_flutter_demo/widgets/list_title_widgets.dart';
import 'package:flutter/material.dart';

/// @author longzipeng
/// @创建时间:2022/3/31
/// 弹框演示页面

class DialogUtilsDemoPage extends StatefulWidget {
  const DialogUtilsDemoPage({Key? key}) : super(key: key);

  @override
  State<DialogUtilsDemoPage> createState() => _DialogUtilsDemoPageState();
}

class _DialogUtilsDemoPageState extends State<DialogUtilsDemoPage> {
  /// 查询数据
  search(value) {
    print("搜索的值为:$value");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: const CommonAppbar(
        title: "弹窗、提示演示",
      ),
      body: ListView(
        children: [
          ListTitleWidget(
            title: const Text("弹框,带确认和取消"),
            onTap: () {
              DialogUtils.alert(context, content: "靓仔、靓女们,一起学习flutter!",
                  confirm: () {
                print("点击了确认");
              }, cancle: () {
                print("点击了取消");
              });
            },
          ),
          ListTitleWidget(
            title: const Text("默认提示"),
            onTap: () {
              DialogUtils.showMessage("默认提示");
            },
          ),
          ListTitleWidget(
            title: const Text("成功提示"),
            onTap: () {
              DialogUtils.showSuccessMessage("成功提示");
            },
          ),
          ListTitleWidget(
            title: const Text("警告提示"),
            onTap: () {
              DialogUtils.showWaringMessage("警告提示");
            },
          ),
          ListTitleWidget(
            title: const Text("错误提示"),
            onTap: () {
              DialogUtils.showErrorMessage("错误提示");
            },
          ),
        ],
      ),
    );
  }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter中有多种方式来创建弹框。其中一种常见的方式是使用AlertDialog组件来构建一个简单的弹框。可以通过showDialog函数触发弹框的显示。在showDialog函数中,可以设置barrierDismissible来决定是否点击弹框外部区域可以关闭弹框,设置barrierColor来定义屏障的颜色,设置barrierLabel来给屏障定义一个字符串名称,还可以设置anchorPoint来偏移整个弹出框的位置。 另外,还可以使用showCupertinoDialog和CupertinoAlertDialog来创建弹框,或者使用SimpleDialog来创建一个简单的弹框。对于自定义的弹框,可以根据需要加入gif图片等效果。 例如,最简单的方案是利用AlertDialog组件构建一个弹框。示例代码如下: ```dart void alertDialog(BuildContext context) async { var result = await showDialog( barrierDismissible: false, context: context, builder: (context) { return AlertDialog( title: const Text("提示信息!"), content: const Text("您确定要删除吗"), actions: [ TextButton( onPressed: () { print("ok"); Navigator.of(context).pop("ok"); }, child: const Text("确定"), ), TextButton( onPressed: () { print("cancel"); Navigator.of(context).pop("取消"); }, child: const Text("取消"), ), ], ); }, ); print("-----------"); print(result); } ``` 除了AlertDialog,还可以使用SimpleDialog来创建弹框,具体用法可以参考相关文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【Flutter】【弹窗】弹窗的快速上手使用和自定义Dialog](https://blog.csdn.net/weixin_43444734/article/details/127481395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【Flutter入门到进阶】Flutter基础篇---弹窗Dialog](https://blog.csdn.net/u010687761/article/details/129358724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值