Flutter加载指示器插件loady_overlay的使用

Flutter加载指示器插件loady_overlay的使用

Loady Overlay

Loady Overlay 是一个用于Flutter应用的简单且可定制化的加载指示器包。

特性

  • 易于使用的加载指示器管理
  • 可定制化的加载指示器
  • 支持状态回调
  • 轻量级且高效

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  loady_overlay: ^0.0.3

然后运行:

flutter pub get

基本用法

显示加载指示器

// 简单使用
await showLoadyOverlay(context);

// 或者直接使用
LoadyOverlay.show(context);

// 使用自定义配置
await showLoadyOverlay(
  context,
  config: LoadyOverlayConfig(
    backgroundColor: Colors.black54,
    builder: (context) => CustomLoadingIndicator(),
  ),
);

// 或者直接使用
LoadyOverlay.show(
  context,
  config: LoadyOverlayConfig(
    backgroundColor: Colors.black54,
    builder: (context) => CustomLoadingIndicator(),
  ),
);

隐藏加载指示器

hideLoadyOverlay(context);

// 或者直接使用
LoadyOverlay.hide(context);

监听状态变化

LoadyOverlay.onStatusChanged((status) {
  print('Loading status: $status');
});

API 参考

showLoadyOverlay

在当前屏幕上显示加载指示器。

参数

  • context: BuildContext (必需)
  • config: 加载指示器的可选配置

hideLoadyOverlay

隐藏当前显示的加载指示器。

参数

  • context: BuildContext (必需)

LoadyOverlayConfig

允许自定义加载指示器:

  • backgroundColor: 背景颜色
  • builder: 自定义加载指示器的构建器

自定义

你可以通过实现自己的小部件来创建自定义的加载指示器:

class CustomLoadingIndicator extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: MyCustomProgressIndicator(),
    );
  }
}

示例代码

以下是一个完整的示例,展示了如何在登录页面中使用 LoadyOverlay

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const LoginPageExample(),
    );
  }
}

class LoginPageExample extends StatefulWidget {
  const LoginPageExample({super.key});

  [@override](/user/override)
  State<StatefulWidget> createState() => _LoginPageExampleState();
}

class _LoginPageExampleState extends State<LoginPageExample> {
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();

  [@override](/user/override)
  void initState() {
    super.initState();

    // 可选:监听加载状态的变化
    LoadyOverlay.onStatusChanged((status) {
      debugPrint('Current loading status: $status');
    });
  }

  Future<void> _performLogin() async {
    try {
      // 立即显示加载指示器
      LoadyOverlay.show(
        context,
        config: LoadyOverlayConfig(
          backgroundColor: Colors.black54, // 可选:半透明背景
          builder: (context) => const Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              CircularProgressIndicator(),
              SizedBox(height: 16),
              Text(
                'Logging in...',
                style: TextStyle(color: Colors.white),
              ),
            ],
          ),
        ),
      );

      // 模拟网络请求
      await Future.delayed(const Duration(seconds: 2), () {
        if (mounted) {
          LoadyOverlay.hide(context); // 隐藏加载指示器
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('Login successful')),
          );
        }
      });
    } catch (e) {
      // 处理任何错误
      if (mounted) {
        LoadyOverlay.hide(context);
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Login failed: $e')),
        );
      }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Login')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: _emailController,
              decoration: const InputDecoration(labelText: 'Email'),
            ),
            TextField(
              controller: _passwordController,
              decoration: const InputDecoration(labelText: 'Password'),
              obscureText: true,
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _performLogin,
              child: const Text('Login'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter加载指示器插件loady_overlay的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是如何在Flutter项目中使用loady_overlay插件的一个示例。loady_overlay是一个用于显示加载指示器的插件,可以在应用程序中进行网络请求或其他耗时操作时提供用户反馈。

首先,确保你的Flutter项目已经添加了对loady_overlay的依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  loady_overlay: ^latest_version  # 替换为最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用LoadyOverlay

  1. 导入loady_overlay
import 'package:loady_overlay/loady_overlay.dart';
  1. 在你的应用程序中初始化LoadyOverlay

通常你会在应用的根Widget(如MaterialApp)中初始化LoadyOverlay

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LoadyOverlayProvider(
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
    );
  }
}
  1. 在需要显示加载指示器的地方使用LoadyOverlay

你可以通过LoadyOverlay.of(context)来访问LoadyOverlay实例,并控制加载指示器的显示和隐藏。

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

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

class _MyHomePageState extends State<MyHomePage> {

  void simulateLoading() async {
    // 显示加载指示器
    LoadyOverlay.of(context)?.show();

    // 模拟一个耗时操作,比如网络请求
    await Future.delayed(Duration(seconds: 2));

    // 隐藏加载指示器
    LoadyOverlay.of(context)?.hide();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loady Overlay Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: simulateLoading,
          child: Text('Show Loader'),
        ),
      ),
    );
  }
}

在这个示例中,当你点击按钮时,simulateLoading函数会被调用,显示加载指示器,模拟一个耗时操作(使用Future.delayed),然后隐藏加载指示器。

这样,你就成功地在Flutter项目中使用loady_overlay插件来显示和隐藏加载指示器了。根据项目的具体需求,你可以进一步自定义加载指示器的样式和行为。

回到顶部