Flutter屏幕加载处理插件screen_loading_handler的使用

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

Flutter屏幕加载处理插件screen_loading_handler的使用

ScreenLoadingHandler 是一个Flutter插件,用于在屏幕内容上方显示加载指示器(spinner)。它通过监听 ScreenLoadingController 来自动决定何时显示或隐藏加载指示器,而不需要调用 setState。这是一种高效管理应用程序中加载状态的方式,无需让UI代码变得混乱。

Features 特性

  • 自动加载管理:根据 ScreenLoadingController 中的 isLoading 状态显示和隐藏加载指示器。
  • 可自定义的加载框:可以自定义加载指示器的颜色、大小和样式。
  • 点击关闭(可选):可选择通过点击覆盖层来关闭加载指示器。
  • 响应式状态更新:加载状态由 ValueNotifier 管理,确保UI在状态变化时自动反应。

Installation 安装

步骤1:添加依赖

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

dependencies:
  screen_loading_handler: ^<latest_version>

<latest_version> 替换为包的实际最新版本。你可以在 pub.dev 上查看最新版本。

步骤2:安装包

运行以下命令来安装包:

flutter pub get

Usage 使用方法

1. 创建加载控制器

首先初始化 ScreenLoadingController

ScreenLoadingController controller = ScreenLoadingController();

2. 使用 ScreenLoadingHandler 包裹你的屏幕内容

使用 ScreenLoadingHandler 包裹你的屏幕内容,并传入控制器:

ScreenLoadingHandler(
  controller: controller,
  child: YourScreenWidget(),
)

3. 开始和停止加载

通过调用 startLoadingstopLoading 来控制加载状态:

controller.startLoading(); // 显示加载指示器
controller.stopLoading();  // 隐藏加载指示器

Customization 自定义

你可以通过向 ScreenLoadingHandler 小部件传递参数来自定义加载指示器和覆盖层的外观:

  • backgroundColor: 覆盖层的背景颜色(默认值是 Colors.white10)。
  • loadingBoxColor: 加载框的颜色(默认值是 Colors.black)。
  • loadingIndicatorColor: 加载旋转器的颜色(默认值是 Colors.white)。
  • loadingBoxHeight: 加载框的高度(默认值是 90)。
  • loadingBoxWidth: 加载框的宽度(默认值是 90)。
  • loadingBoxBorderRadius: 加载框的圆角半径(默认值是 18)。
  • loadingIndicatorStrokeWidth: 加载旋转器的厚度(默认值是 3)。
  • closeOnTap: 是否可以通过点击覆盖层来关闭加载指示器(默认值是 false)。

示例:

ScreenLoadingHandler(
  controller: controller,
  child: YourScreenWidget(),
  closeOnTap: true, // 点击关闭加载指示器
  backgroundColor: Colors.black45,
  loadingBoxColor: Colors.blue,
  loadingIndicatorColor: Colors.white,
)

示例 Demo

下面是一个完整的示例,展示了如何在实际应用中使用 ScreenLoadingHandler

import 'package:flutter/material.dart';
import 'package:screen_loading_handler/screen_loading_controller.dart';
import 'package:screen_loading_handler/screen_loading_handler.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Screen Loading Handler Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final ScreenLoadingController _loadingController = ScreenLoadingController();

  Future<void> _simulateLoading() async {
    _loadingController.startLoading(); // 开始加载
    await Future.delayed(const Duration(seconds: 3)); // 模拟延迟
    _loadingController.stopLoading(); // 停止加载
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ScreenLoadingHandler(
      controller: _loadingController,
      backgroundColor: Colors.black54, // 覆盖层颜色
      loadingBoxColor: Colors.white, // 加载框颜色
      loadingIndicatorColor: Colors.blue, // 旋转器颜色
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Screen Loading Handler'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _simulateLoading,
            child: const Text('Simulate Loading'),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter屏幕加载处理插件screen_loading_handler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕加载处理插件screen_loading_handler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 screen_loading_handler 插件在 Flutter 应用中实现屏幕加载处理的示例代码。这个插件可以帮助你轻松地在屏幕之间显示加载指示器。

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

dependencies:
  flutter:
    sdk: flutter
  screen_loading_handler: ^x.y.z  # 替换为最新版本号

然后运行 flutter pub get 来获取依赖。

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

1. 导入插件

在你的 Dart 文件中导入插件:

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

2. 创建 Loading Widget

创建一个自定义的加载指示器 Widget。你可以使用 CircularProgressIndicator 或任何其他你喜欢的 Widget。

Widget buildLoading() {
  return Center(
    child: CircularProgressIndicator(),
  );
}

3. 初始化 ScreenLoadingHandler

在你的应用的根 Widget 中初始化 ScreenLoadingHandler

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

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

4. 显示加载指示器

在需要显示加载指示器的地方使用 ScreenLoadingHandler.showLoading()ScreenLoadingHandler.hideLoading() 方法。

例如,在一个按钮点击事件中模拟异步操作并显示加载指示器:

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 显示加载指示器
            ScreenLoadingHandler.showLoading(context);

            // 模拟异步操作,例如网络请求
            await Future.delayed(Duration(seconds: 2));

            // 隐藏加载指示器
            ScreenLoadingHandler.hideLoading(context);

            // 显示结果或其他操作
            ScaffoldMessenger.of(context).showSnackBar(SnackBar(
              content: Text('操作完成!'),
            ));
          },
          child: Text('开始加载'),
        ),
      ),
    );
  }
}

完整代码示例

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

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

Widget buildLoading() {
  return Center(
    child: CircularProgressIndicator(),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ScreenLoadingHandler(
      loadingBuilder: buildLoading,
      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('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            ScreenLoadingHandler.showLoading(context);
            await Future.delayed(Duration(seconds: 2));
            ScreenLoadingHandler.hideLoading(context);
            ScaffoldMessenger.of(context).showSnackBar(SnackBar(
              content: Text('操作完成!'),
            ));
          },
          child: Text('开始加载'),
        ),
      ),
    );
  }
}

这样,你就成功地在 Flutter 应用中集成了 screen_loading_handler 插件,并实现了屏幕加载处理。

回到顶部