JAVA、PHP、前端、APP、网站开发 - 开发技术学习

开发技术学习 » APP开发 » flutter 加载框LoadingDialog

flutter 加载框LoadingDialog

此文被围观634日期: 2022-05-05 分类 : APP开发  标签:  ····

flutter 加载框核心文件:

import 'package:flutter/material.dart';

class LoadingDialog extends Dialog {
  LoadingDialog(
      {Key? key,
      this.text,
      this.width,
      this.height,
      this.color,
      this.contentPadding = 20})
      : super(key: key);

  final Widget? text;
  final double? width;
  final double? height;
  final Color? color;
  final double contentPadding;

  @override
  Widget build(BuildContext context) {
    Widget? textWidget;
    if (text != null) {
      final ThemeData theme = Theme.of(context);
      final DialogTheme dialogTheme = DialogTheme.of(context);
      textWidget = Padding(
        padding: EdgeInsets.only(top: contentPadding),
        child: DefaultTextStyle(
          style: dialogTheme.titleTextStyle ?? theme.textTheme.headline6!,
          child: text!,
        ),
      );
    }
    return Center(
      child: Container(
        width: width ?? 120.0,
        height: height ?? 120.0,
        decoration: ShapeDecoration(
          color: color ?? Color(0xffffffff),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(
              Radius.circular(10.0),
            ),
          ),
        ),
        padding: EdgeInsets.all(contentPadding),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            CircularProgressIndicator(),
            if (textWidget != null) textWidget,
          ],
        ),
      ),
    );
  }
}

Future<T?> showLoadingDialog<T>({
  required BuildContext context,
  bool barrierDismissible = false,
  String? title,
  bool canCancel = false,
  WillPopCallback? onWillPop,
  double? width,
  double? height,
}) {
  Widget? textWidget;
  if (title != null) {
    textWidget = Text(
      title,
      maxLines: 1,
      overflow: TextOverflow.ellipsis,
      textAlign: TextAlign.center,
      style: TextStyle(fontSize: 12),
    );
  }
  return showDialog(
      context: context,
      barrierDismissible: barrierDismissible,
      builder: (context) {
        Widget dialog = LoadingDialog(
          text: textWidget,
          width: width,
          height: height,
        );
        if (!canCancel) {
          dialog = WillPopScope(
            child: dialog,
            onWillPop: onWillPop ?? () => Future.value(false),
          );
        }
        return dialog;
      });
}

使用方法:

showLoadingDialog(
        context: context,
        title: "加载中,请稍候",
        onWillPop: () {
          Future.delayed(Duration(seconds: 3), () {
            Navigator.of(context).pop();
          });
          return Future.value(false);
        });


来源:https://www.csdn.net/tags/MtjaIgxsNTQ0NzQtYmxvZwO0O0OO0O0O.html

站点声明:部分内容源自互联网,为传播信息之用,如有侵权,请联系我们删除。

© Copyright 2011-2024 www.kfju.com. All Rights Reserved.
超级字帖 版权所有。蜀ICP备12031064号