Flutter模糊背景加载提示插件blurry_modal_progress_hud的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter模糊背景加载提示插件blurry_modal_progress_hud的使用

简介

blurry_modal_progress_hudmodal_progress_hud 的克隆和升级版本。它提供了一个简单的 widget 包装,用于在执行异步调用时显示模态进度指示器(即 HUD,heads up display)。与原始版本不同的是,它添加了模糊效果,使用户界面更加美观。

Image1 Image2

安装

首先,在你的 pubspec.yml 文件中添加 blurry_modal_progress_hud 依赖:

dependencies:
  blurry_modal_progress_hud: ^1.1.1

然后,在 Dart 文件中导入该包:

import 'package:blurry_modal_progress_hud/blurry_modal_progress_hud.dart';

使用方法

BlurryModalProgressHUD 可以包裹任何需要执行异步调用的 widget,以便在调用过程中显示一个模态进度指示器。你可以通过设置 inAsyncCall 参数来控制进度指示器的显示或隐藏。此外,你还可以自定义模糊效果的强度、进度指示器样式、模态屏障的颜色和透明度等。

示例代码

以下是一个完整的示例应用程序,展示了如何使用 blurry_modal_progress_hud 插件:

import 'package:flutter/material.dart';
import 'package:blurry_modal_progress_hud/blurry_modal_progress_hud.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LandingPage(),
    );
  }
}

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

  @override
  _LandingPageState createState() => _LandingPageState();
}

class _LandingPageState extends State<LandingPage> {
  TextEditingController emailController = TextEditingController();
  TextEditingController passwordController = TextEditingController();
  bool isLoading = false;

  @override
  Widget build(BuildContext context) {
    return BlurryModalProgressHUD(
      inAsyncCall: isLoading,
      blurEffectIntensity: 4, // 模糊效果强度
      progressIndicator: SpinKitFadingCircle(
        color: Colors.purple,
        size: 90.0,
      ), // 自定义进度指示器
      dismissible: false, // 是否可点击外部关闭
      opacity: 0.4, // 模态屏障透明度
      color: Colors.black.withOpacity(0.97), // 模态屏障颜色
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          backgroundColor: Colors.transparent,
          automaticallyImplyLeading: false,
          elevation: 0,
          centerTitle: true,
          title: Text(
            'SIGN IN',
            style: TextStyle(
              fontSize: 24,
              color: Colors.black,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              SizedBox(height: 40),
              LabelText(labelValue: 'Email'),
              CustomTextField(
                controller: emailController,
                hintText: 'email',
                keyboardType: TextInputType.emailAddress,
              ),
              LabelText(labelValue: 'Password'),
              CustomTextField(
                controller: passwordController,
                hintText: 'password',
                keyboardType: TextInputType.name,
              ),
              Container(
                height: 50,
                width: 300,
                margin: EdgeInsets.symmetric(vertical: 20),
                child: TextButton(
                  style: TextButton.styleFrom(
                    backgroundColor: Colors.purple,
                    elevation: 4,
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(12),
                    ),
                  ),
                  onPressed: () async {
                    setState(() {
                      isLoading = true;
                    });

                    await Future.delayed(Duration(seconds: 3), () {
                      setState(() {
                        isLoading = false;
                      });
                    });
                  },
                  child: Text(
                    'Login',
                    style: TextStyle(
                      color: Colors.white,
                      fontFamily: 'LibreBaskerville',
                      fontSize: 20,
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

// 辅助类,模拟自定义文本输入框和标签文本
class CustomTextField extends StatelessWidget {
  final TextEditingController controller;
  final String hintText;
  final TextInputType keyboardType;

  CustomTextField({
    required this.controller,
    required this.hintText,
    required this.keyboardType,
  });

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: controller,
      decoration: InputDecoration(hintText: hintText),
      keyboardType: keyboardType,
    );
  }
}

class LabelText extends StatelessWidget {
  final String labelValue;

  LabelText({required this.labelValue});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Text(
        labelValue,
        style: TextStyle(fontSize: 18),
      ),
    );
  }
}

选项

以下是 BlurryModalProgressHUD 构造函数中可以自定义的参数:

  • inAsyncCall: 控制是否显示进度指示器。
  • opacity: 设置模态屏障的透明度,默认为 0.3。
  • color: 设置模态屏障的颜色,默认为灰色。
  • blurEffectIntensity: 设置模糊效果的强度,默认为 1.0。
  • progressIndicator: 进度指示器,默认为 CircularProgressIndicator,可以替换为其他类型的 widget。
  • offset: 进度指示器的位置偏移,默认居中。
  • dismissible: 是否可以通过点击模态屏障外部关闭,默认为 false
  • child: 需要包裹的子 widget。

更多详细信息可以参考 GitHub 项目 中的完整示例。

联系方式

如果你有任何问题或建议,可以通过电子邮件联系作者:edinjoey@gmail.com

希望这个插件能帮助你在 Flutter 应用中实现更美观的加载提示效果!


更多关于Flutter模糊背景加载提示插件blurry_modal_progress_hud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter模糊背景加载提示插件blurry_modal_progress_hud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用blurry_modal_progress_hud插件来实现模糊背景加载提示的一个代码示例。这个插件允许你在应用上显示一个带有模糊背景的加载指示器。

首先,确保你的pubspec.yaml文件中已经添加了blurry_modal_progress_hud依赖:

dependencies:
  flutter:
    sdk: flutter
  blurry_modal_progress_hud: ^3.0.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下方式使用这个插件:

import 'package:flutter/material.dart';
import 'package:blurry_modal_progress_hud/blurry_modal_progress_hud.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Blurry Modal Progress HUD Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  final BlurryModalProgressHUDController _blurryHUDController = BlurryModalProgressHUDController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Blurry Modal Progress HUD Example'),
      ),
      body: BlurryModalProgressHUD(
        controller: _blurryHUDController,
        inAsyncCall: false,  // 这里控制HUD是否显示
        color: Colors.black.withOpacity(0.5),  // 背景遮罩颜色
        backgroundColor: Colors.white,  // HUD背景颜色
        borderRadius: 10.0,  // HUD圆角
        blur: 10.0,  // 模糊级别
        text: 'Loading...',  // 显示的文本
        textStyle: TextStyle(color: Colors.white, fontSize: 18),  // 文本样式
        indicatorColor: Colors.white,  // 指示器颜色
        show: false,  // 初始是否显示,这里通过controller控制,因此这里设置为false
        opacity: 200,  // 遮罩层透明度
        dismissible: true,  // 是否可以通过点击遮罩层关闭
        onWillDismiss: () async {
          // 在HUD消失前执行的回调
          return true;  // 返回true允许HUD消失
        },
        child: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 显示HUD
              _blurryHUDController.show();

              // 模拟异步操作
              await Future.delayed(Duration(seconds: 3));

              // 隐藏HUD
              _blurryHUDController.hide();
            },
            child: Text('Show Loading'),
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个BlurryModalProgressHUDController实例来控制HUD的显示和隐藏。
  2. BlurryModalProgressHUD中,我们设置了各种属性,如背景颜色、模糊级别、文本和指示器样式等。
  3. 通过点击按钮,我们调用_blurryHUDController.show()来显示HUD,并在模拟的异步操作完成后调用_blurryHUDController.hide()来隐藏HUD。

这样,你就可以在你的Flutter应用中实现一个带有模糊背景的加载提示了。

回到顶部