Flutter应用加载覆盖层插件overlay_loader_with_app_icon的使用

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

Flutter应用加载覆盖层插件 overlay_loader_with_app_icon 的使用

overlay_loader_with_app_icon 是一个轻量级的Flutter包,它在发起异步调用时显示带有应用程序图标(app icon)的漂亮加载覆盖层。这个插件非常适合用于展示加载状态或处理用户交互期间的操作。

Demo App

Demo GIF

Getting Started

添加依赖到 pubspec.yaml

首先,在你的 pubspec.yaml 文件中添加对 overlay_loader_with_app_icon 包的依赖:

dependencies:
  ...
  overlay_loader_with_app_icon:

然后运行 flutter pub get 来安装该包。

导入库

在需要使用的Widget文件中导入该库:

import 'package:overlay_loader_with_app_icon/overlay_loader_with_app_icon.dart';

Usage 使用方法

要在一个异步调用过程中显示带有应用图标的进度指示器,只需将 OverlayLoaderWithAppIcon 包装在任何小部件周围,并通过 _loading 布尔变量来启用或禁用进度加载器。

下面是一个完整的示例代码,展示了如何集成和使用这个插件:

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

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

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

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

  @override
  State<LoginPage> createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  TextEditingController emailController = TextEditingController();
  TextEditingController password/XMLSchemaController = TextEditingController();

  bool _isLoading = false;

  void loadStateForSeconds() {
    setState(() {
      _isLoading = true; // 启动模态进度HUD
    });

    Future.delayed(Duration(seconds: 2), () {
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
        content: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('Login successfully', style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
            Text('${emailController.text}', style: TextStyle(color: Colors.white)),
          ],
        ),
        backgroundColor: Colors.blue,
      ));
      setState(() {
        _isLoading = false; // 关闭模态进度HUD
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return OverlayLoaderWithAppIcon(
      isLoading: _isLoading,
      overlayBackgroundColor: Colors.black,
      circularProgressColor: Color(0xff670099),
      appIcon: Image.asset('images/appIcon.png'),
      child: Scaffold(
        appBar: AppBar(title: Text("Overlay loader with app icon")),
        body: Form(
          key: _formKey,
          autovalidateMode: AutovalidateMode.always,
          child: Padding(
            padding: EdgeInsets.all(8.0),
            child: _buildColumn(),
          ),
        ),
      ),
    );
  }

  Column _buildColumn() {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: <Widget>[
        TextFormField(
          controller: emailController,
          textInputAction: TextInputAction.next,
          decoration: InputDecoration(border: UnderlineInputBorder(), hintText: "Enter Email"),
        ),
        SizedBox(height: 20),
        TextFormField(
          controller: passwordController,
          obscureText: true,
          decoration: InputDecoration(border: UnderlineInputBorder(), hintText: "Enter Password"),
        ),
        SizedBox(height: 20),
        ElevatedButton(
            onPressed: () {
              if (_formKey.currentState!.validate()) {
                loadStateForSeconds();
              }
            },
            child: Text("Login"))
      ],
    );
  }
}

More Options 更多选项

你可以根据需要自定义构造函数中的参数:

OverlayLoaderWithAppIcon({
  required this.isLoading,
  required this.child,
  required this.appIcon,
  this.appIconSize = 50,
  this.borderRadius = 15,
  this.overlayOpacity = 0.5,
  this.circularProgressColor,
  this.overlayBackgroundColor,
});

以上就是关于 overlay_loader_with_app_icon 插件的基本介绍和使用示例。希望这对你有所帮助!如果有更多功能需求,请考虑提交issue进行讨论。😊🙏🏻


更多关于Flutter应用加载覆盖层插件overlay_loader_with_app_icon的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用加载覆盖层插件overlay_loader_with_app_icon的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用overlay_loader_with_app_icon插件的示例代码。这个插件通常用于在应用加载时显示一个带有应用图标的覆盖层(Overlay Loader)。

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

dependencies:
  flutter:
    sdk: flutter
  overlay_loader_with_app_icon: ^最新版本号  # 请替换为最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用OverlayLoaderWithAppIcon

  1. 导入插件

    在需要使用覆盖层的Dart文件中导入插件:

    import 'package:overlay_loader_with_app_icon/overlay_loader_with_app_icon.dart';
    
  2. 初始化OverlayLoaderWithAppIcon

    通常在应用的根组件(如MyApp)中初始化OverlayLoaderWithAppIcon

    import 'package:flutter/material.dart';
    import 'package:overlay_loader_with_app_icon/overlay_loader_with_app_icon.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return OverlayLoaderWithAppIcon(
          loaderColor: Colors.white.withOpacity(0.8), // 覆盖层背景颜色及透明度
          loaderBackgroundColor: Colors.blue,        // 加载指示器的背景颜色
          loaderIcon: Image.asset('assets/app_icon.png'), // 应用图标
          child: MaterialApp(
            title: 'Flutter Demo',
            theme: ThemeData(
              primarySwatch: Colors.blue,
            ),
            home: MyHomePage(),
          ),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Overlay Loader Demo'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You can show and hide the loader using OverlayLoaderWithAppIcon methods.',
                ),
                ElevatedButton(
                  onPressed: () {
                    OverlayLoaderWithAppIcon.showLoader(context);
                    // Simulate a loading process with a delay
                    Future.delayed(Duration(seconds: 2), () {
                      OverlayLoaderWithAppIcon.hideLoader(context);
                    });
                  },
                  child: Text('Show Loader'),
                ),
              ],
            ),
          ),
        );
      }
    }
    
  3. 使用OverlayLoaderWithAppIcon的方法

    你可以通过OverlayLoaderWithAppIcon.showLoader(context)OverlayLoaderWithAppIcon.hideLoader(context)方法来显示和隐藏加载覆盖层。

    注意:确保contextOverlayLoaderWithAppIcon组件的子树的上下文,否则可能会引发错误。

  4. 资产文件

    确保在pubspec.yaml中声明了应用图标资源,并将其放在assets文件夹中:

    flutter:
      assets:
        - assets/app_icon.png
    

通过以上步骤,你应该能够在Flutter应用中成功使用overlay_loader_with_app_icon插件来显示带有应用图标的加载覆盖层。

回到顶部