Flutter加载覆盖层插件loading_overlay_pro的使用

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

Flutter加载覆盖层插件loading_overlay_pro的使用

loading_overlay_pro 是一个为Flutter项目提供简单包装和一系列加载动画的小部件。它允许开发者轻松地在应用中添加加载指示器,以提高用户体验。

快速开始

首先,在您的 pubspec.yaml 文件中添加依赖:

dependencies:
  loading_overlay_pro: ^最新版本号

然后将文件导入到您的项目中:

import 'package:loading_overlay_pro/loading_overlay_pro.dart';

接下来,您可以在需要的地方使用 LoadingOverlayPro 小部件。下面是一个简单的例子,展示了如何使用这个插件:

LoadingOverlayPro({
  Key key,
  @required this.isLoading, // 是否显示加载层
  @required this.child,     // 加载层下的子组件
  this.colorBackground = Colors.black54, // 加载层背景颜色,默认为半透明黑色
  this.progressIndicator = const LoadingBouncingLine.circle(), // 加载时显示的动画,默认为圆形弹跳线动画
});

您可以进一步自定义加载动画,例如:

LoadingBouncingLine.circle(
  borderColor: Colors.cyan,
  borderSize: 3.0,
  size: 120.0,
  backgroundColor: Colors.cyanAccent,
  duration: Duration(milliseconds: 500),
);

还可以添加头部和底部文本:

headerLoading: Text("App Name"),
bottomLoading: Text("Loading..."),

更多定制化选项,请参考加载动画文件中的说明。

注意:所有动画都可以通过调用类似 LoadingBouncingLine.square() 的方法直接使用,并且许多基本动画默认包含 .circle().square() 变体。

示例代码

这里提供了一个完整的示例应用程序,演示了如何使用 loading_overlay_pro 插件创建带有加载覆盖层的页面。

main.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:loading_overlay_pro/loading_overlay_pro.dart';

void main() => runApp(LoadingApp());

class LoadingApp extends StatelessWidget {
  const LoadingApp({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: MyApp(),
      ),
    );
  }
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  void _openPage(Widget page) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (BuildContext context) => page,
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Overlay Pro'),
        backgroundColor: Colors.blue,
      ),
      body: _buildBody(),
    );
  }

  Widget _buildBody() {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          ElevatedButton(
            child: Text("Loading overlay"),
            onPressed: () => _openPage(LoadingOverlayPage()),
          ),
          SizedBox(height: 50),
          ElevatedButton(
            child: Text("Loading Percent"),
            onPressed: () => _openPage(PercentPage()),
          ),
        ],
      ),
    );
  }
}

class LoadingOverlayPage extends StatefulWidget {
  @override
  _LoadingOverlayPageState createState() => _LoadingOverlayPageState();
}

class _LoadingOverlayPageState extends State<LoadingOverlayPage> {
  bool _isLoading = false;
  bool _isIOS = false;
  final Duration duration = Duration(seconds: 3);

  void _submit() {
    setState(() {
      _isLoading = true;
    });

    Future.delayed(duration, () {
      setState(() {
        _isLoading = false;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Overlay'),
        backgroundColor: Colors.blue,
      ),
      body: LoadingOverlayPro(
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              ElevatedButton(
                onPressed: () {
                  _isIOS = false;
                  _submit();
                },
                child: Text('Show Loading BouncingLine'),
              ),
              ElevatedButton(
                onPressed: () {
                  _isIOS = true;
                  _submit();
                },
                child: Text('Show Loading Custom IOS'),
              ),
            ],
          ),
        ),
        backgroundColor: _isIOS ? Colors.white : Colors.black54,
        isLoading: _isLoading,
        progressIndicator: _isIOS
            ? CupertinoActivityIndicator(radius: 100)
            : LoadingBouncingLine.circle(
                backgroundColor: Colors.blue,
                size: 150.0,
                duration: Duration(seconds: 2),
                borderColor: Colors.blue,
              ),
        overLoading: _isIOS
            ? Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  FlutterLogo(),
                  SizedBox(width: 10),
                  Text(
                    "Loading Overlay Pro",
                    style: TextStyle(fontSize: 20.0),
                  ),
                ],
              )
            : null,
        bottomLoading: _isIOS
            ? Text("Loading...", style: TextStyle(fontSize: 20.0))
            : null,
      ),
    );
  }
}

class PercentPage extends StatefulWidget {
  @override
  _PercentPageState createState() => _PercentPageState();
}

class _PercentPageState extends State<PercentPage> {
  bool _isLoading = false;
  final Duration duration = Duration(seconds: 10);

  void _submit() {
    setState(() {
      _isLoading = true;
    });

    Future.delayed(duration, () {
      setState(() {
        _isLoading = false;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Percent'),
        backgroundColor: Colors.blue,
      ),
      body: LoadingPercentage(
        timer: duration,
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              ElevatedButton(
                onPressed: () {
                  _submit();
                },
                child: Text('Show Loading Download 10s'),
              ),
            ],
          ),
        ),
        backgroundColor: Colors.black54,
        isLoading: _isLoading,
      ),
    );
  }
}

此示例展示了两个不同类型的加载页面:“Loading overlay” 使用了标准的 LoadingOverlayPro 组件,而 “Loading Percent” 则展示了带有进度百分比的加载界面。通过点击按钮可以触发加载状态,并在指定时间后自动关闭加载层。


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

1 回复

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


当然,以下是如何在Flutter项目中使用loading_overlay_pro插件的一个基本示例。这个插件允许你在应用上显示一个加载覆盖层,以改善用户体验。

首先,你需要在你的pubspec.yaml文件中添加这个依赖:

dependencies:
  flutter:
    sdk: flutter
  loading_overlay_pro: ^x.y.z  # 请将x.y.z替换为最新的版本号

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

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

  1. 导入包

在你的Dart文件中,导入loading_overlay_pro包:

import 'package:loading_overlay_pro/loading_overlay_pro.dart';
  1. 初始化LoadingOverlayProvider

在你的应用入口文件(通常是main.dart)中,使用LoadingOverlayProvider来包装你的MaterialApp或CupertinoApp。

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

void main() {
  runApp(
    LoadingOverlayProvider(
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}
  1. 显示加载覆盖层

在你的页面或组件中,你可以通过LoadingOverlay.of(context)来获取LoadingOverlay实例,并调用其show()hide()方法来显示和隐藏加载覆盖层。

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {

  void _showLoadingOverlay() {
    LoadingOverlay.of(context).show();
    
    // 模拟一个耗时操作,比如网络请求
    Future.delayed(Duration(seconds: 2), () {
      LoadingOverlay.of(context).hide();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Overlay Pro Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showLoadingOverlay,
          child: Text('Show Loading Overlay'),
        ),
      ),
    );
  }
}

在这个例子中,当用户点击按钮时,会调用_showLoadingOverlay方法,该方法会显示加载覆盖层,并在2秒后隐藏它。

  1. 自定义加载覆盖层(可选):

你还可以自定义加载覆盖层的样式,比如颜色、文本、图标等。你可以通过LoadingOverlayConfig类来配置这些选项。

void _showCustomLoadingOverlay() {
  LoadingOverlay.of(context).showWithConfig(
    LoadingOverlayConfig(
      color: Colors.blue.withOpacity(0.5),
      indicator: CircularProgressIndicator(
        valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
      ),
      child: Center(
        child: Text(
          'Loading...',
          style: TextStyle(color: Colors.white),
        ),
      ),
    ),
  );

  Future.delayed(Duration(seconds: 2), () {
    LoadingOverlay.of(context).hide();
  });
}

在你的按钮点击事件中使用_showCustomLoadingOverlay方法来显示自定义的加载覆盖层。

这样,你就可以在你的Flutter应用中使用loading_overlay_pro插件来显示加载覆盖层了。希望这个示例对你有帮助!

回到顶部