Flutter加载按钮功能插件loading_btn的使用

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

Flutter加载按钮功能插件loading_btn的使用

Loading Btn 是一个用于在Flutter应用中创建带动画加载效果按钮的插件。通过该插件,你可以轻松实现各种样式的加载按钮,并且可以根据需求进行自定义。

获取开始

loading_btn 包可以帮助你为按钮添加漂亮的加载动画,并允许自定义加载器。它基于 ElevatedButton 小部件构建,因此可以使用常规参数并添加一些额外的功能。

示例演示

使用方法

带圆形进度条的加载按钮

以下是一个带有 CircularProgressIndicator 的加载按钮示例:

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

class LoadingButtonExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Loading Button Example')),
      body: Center(
        child: LoadingBtn(
          height: 50,
          borderRadius: 8,
          animate: true,
          color: Colors.green,
          width: MediaQuery.of(context).size.width * 0.45,
          loader: Container(
            padding: const EdgeInsets.all(10),
            width: 40,
            height: 40,
            child: const CircularProgressIndicator(
              valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
            ),
          ),
          child: const Text("Login"),
          onTap: (startLoading, stopLoading, btnState) async {
            if (btnState == ButtonState.idle) {
              startLoading();
              // 调用网络API
              await Future.delayed(const Duration(seconds: 5));
              stopLoading();
            }
          },
        ),
      ),
    );
  }
}

带自定义文本的加载按钮

以下是一个带有自定义文本的加载按钮示例:

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

class CustomTextLoadingButtonExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Custom Text Loading Button Example')),
      body: Center(
        child: LoadingBtn(
          height: 50,
          borderRadius: 8,
          roundLoadingShape: false,
          color: Colors.blueAccent,
          width: MediaQuery.of(context).size.width * 0.45,
          minWidth: MediaQuery.of(context).size.width * 0.30,
          loader: const Text("Loading..."),
          child: const Text("Login"),
          onTap: (startLoading, stopLoading, btnState) async {
            if (btnState == ButtonState.idle) {
              startLoading();
              // 调用网络API
              await Future.delayed(const Duration(seconds: 5));
              stopLoading();
            }
          },
        ),
      ),
    );
  }
}

带自定义加载动画的加载按钮

以下是一个带有自定义加载动画(如 SpinKitDoubleBounce)的加载按钮示例:

import 'package:flutter/material.dart';
import 'package:loading_btn/loading_btn.dart';
import 'package:spin_kit/spin_kit.dart'; // 需要导入 SpinKit 库

class CustomLoadingAnimationButtonExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Custom Loading Animation Button Example')),
      body: Center(
        child: LoadingBtn(
          height: 50,
          borderRadius: 8,
          animate: true,
          color: Colors.deepOrange,
          width: MediaQuery.of(context).size.width * 0.45,
          loader: Container(
            padding: const EdgeInsets.all(10),
            child: const Center(
              child: SpinKitDoubleBounce(
                color: Colors.white,
              ),
            ),
          ),
          child: const Text("Login"),
          onTap: (startLoading, stopLoading, btnState) async {
            if (btnState == ButtonState.idle) {
              startLoading();
              // 调用网络API
              await Future.delayed(const Duration(seconds: 5));
              stopLoading();
            }
          },
        ),
      ),
    );
  }
}

属性说明

  • animate:默认值为 false,是否在点击按钮时使用宽度进行动画。
  • roundLoadingShape:默认值为 true,在忙碌/加载状态下创建圆形按钮。
  • width:按钮在空闲状态下的宽度。
  • minWidth:按钮在忙碌/加载状态下的最小宽度,默认值等于高度以创建完全圆形的加载按钮。
  • borderRadius:按钮的圆角半径。
  • borderSide:给按钮提供边框颜色和宽度。
  • child:按钮在空闲状态下的内容。
  • loader:按钮在忙碌/加载状态下的内容。
  • onTap(startLoading, stopLoading, btnState):当点击按钮时调用的函数。
  • duration:动画的持续时间。
  • curve:动画的曲线。
  • reverseCurve:反向动画的曲线。

以上是 loading_btn 插件的基本使用方法和示例代码,希望对你的Flutter开发有所帮助!


更多关于Flutter加载按钮功能插件loading_btn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加载按钮功能插件loading_btn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用loading_btn插件来实现加载按钮功能的示例代码。这个插件允许你在按钮点击时显示加载状态,直到某个操作完成。

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

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

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

接下来,你可以在你的Flutter项目中按照以下方式使用loading_btn

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  bool isLoading = false;

  void onButtonClick() async {
    setState(() {
      isLoading = true;
    });

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

    setState(() {
      isLoading = false;
    });

    // 操作完成后可以显示一个Snackbar或处理其他逻辑
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('操作完成!')),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Button Demo'),
      ),
      body: Center(
        child: LoadingButton(
          onClick: onButtonClick,
          child: Text('点击加载'),
          loadingChild: CircularProgressIndicator(),
          isLoading: isLoading,
          color: Colors.blue,
          loadingColor: Colors.grey,
        ),
      ),
    );
  }
}

在这个示例中:

  1. LoadingButton是一个自定义按钮组件,它有两个主要的状态:普通状态和加载状态。
  2. onClick参数是按钮点击时的回调函数。
  3. child参数是按钮在正常状态下的内容。
  4. loadingChild参数是按钮在加载状态下的内容,这里使用了CircularProgressIndicator来表示加载状态。
  5. isLoading参数是一个布尔值,用于控制按钮是否处于加载状态。
  6. colorloadingColor参数分别用于设置按钮在正常状态和加载状态下的颜色。

当按钮被点击时,onButtonClick函数会被调用,并将isLoading设置为true,从而显示加载状态。模拟的耗时操作完成后,将isLoading设置为false,从而恢复按钮的正常状态,并显示一个Snackbar通知用户操作已完成。

这样,你就可以在Flutter项目中使用loading_btn插件来实现一个带有加载状态的按钮了。

回到顶部