Flutter圆角加载按钮插件rounded_loading_button_plus的使用

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

Flutter圆角加载按钮插件rounded_loading_button_plus的使用

rounded_loading_button_plus

pub package build codecov style: effective dart License: MIT Awesome Flutter

RoundedLoadingButton 是一个Flutter包,它以简单的实现提供了带有成功和错误动画的动画加载按钮。

安装 Installation

在您的 pubspec.yaml 文件中添加以下内容:

dependencies:
    rounded_loading_button_plus: ^2.0.8

使用 Usage

导入 Import

import 'package:rounded_loading_button_plus/rounded_loading_button_plus.dart';

简单实现 Simple Implementation

首先,创建一个 RoundedLoadingButtonController 控制器实例,并定义点击按钮后执行的方法。然后,在UI中使用 RoundedLoadingButton 组件并将其控制器和点击事件方法传入即可。

final RoundedLoadingButtonController _btnController = RoundedLoadingButtonController();

void _doSomething() async {
  Timer(Duration(seconds: 3), () {
    _btnController.success();
  });
}

RoundedLoadingButton(
  child: Text('Tap me!', style: TextStyle(color: Colors.white)),
  controller: _btnController,
  onPressed: _doSomething,
)

配置属性 Configurable Properties

RoundedLoadingButton 提供了多种可配置属性,包括但不限于:

  • duration - 按钮动画的持续时间
  • loaderSize - CircularProgressIndicator 的大小
  • animateOnTap - 是否在点击事件触发时启动加载动画
  • resetAfterDuration - 在指定的持续时间后重置动画,默认为15秒
  • errorColor - 按钮处于错误状态时的颜色
  • successColor - 按钮处于成功状态时的颜色
  • successIcon - 成功状态下的图标
  • failedIcon - 错误状态下的图标

示例代码 Example Code

下面是一个完整的示例代码,展示了如何在应用中集成 RoundedLoadingButton 并配置多个按钮以及控制它们的状态(如:重置、错误、成功)。

import 'dart:async';

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

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

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

class MyHomePage extends StatefulWidget {
  MyHomePage();

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final RoundedLoadingButtonController _btnController1 =
      RoundedLoadingButtonController();

  final RoundedLoadingButtonController _btnController2 =
      RoundedLoadingButtonController();

  void _doSomething(RoundedLoadingButtonController controller) async {
    Timer(Duration(seconds: 10), () {
      controller.success();
    });
  }

  @override
  void initState() {
    super.initState();
    _btnController1.stateStream.listen((value) {
      print(value);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Rounded Loading Button Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            RoundedLoadingButton(
              successIcon: Icons.cloud,
              failedIcon: Icons.cottage,
              child: Text('Tap me!', style: TextStyle(color: Colors.white)),
              controller: _btnController1,
              onPressed: () => _doSomething(_btnController1),
            ),
            SizedBox(height: 50),
            RoundedLoadingButton(
              color: Colors.amber,
              successColor: Colors.amber,
              controller: _btnController2,
              onPressed: () => _doSomething(_btnController2),
              valueColor: Colors.black,
              borderRadius: 10,
              child: Text('''
Tap me i have a huge text''', style: TextStyle(color: Colors.white)),
            ),
            SizedBox(height: 50),
            OutlinedButton(
              style: ButtonStyle(
                shape: MaterialStateProperty.all(RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(30))),
              ),
              onPressed: () {
                _btnController1.reset();
                _btnController2.reset();
              },
              child: Text('Reset'),
            ),
            SizedBox(height: 20),
            OutlinedButton(
              style: ButtonStyle(
                shape: MaterialStateProperty.all(RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(30))),
              ),
              onPressed: () {
                _btnController1.error();
                _btnController2.error();
              },
              child: Text('Error'),
            ),
            SizedBox(height: 20),
            OutlinedButton(
              style: ButtonStyle(
                shape: MaterialStateProperty.all(RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(30))),
              ),
              onPressed: () {
                _btnController1.success();
                _btnController2.success();
                print(_btnController1.currentState);
              },
              child: Text('Success'),
            )
          ],
        ),
      ),
    );
  }
}

此示例代码创建了一个包含两个 RoundedLoadingButton 和三个 OutlinedButton 的页面。两个 RoundedLoadingButton 分别用于展示不同配置下的按钮效果;而三个 OutlinedButton 则分别用于重置所有按钮状态、设置所有按钮为错误状态、设置所有按钮为成功状态。


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

1 回复

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


当然,下面是一个关于如何使用Flutter中的rounded_loading_button_plus插件的代码案例。这个插件允许你创建一个带有圆角且可以在加载状态时显示动画的按钮。

首先,确保你的pubspec.yaml文件中已经包含了rounded_loading_button_plus的依赖项:

dependencies:
  flutter:
    sdk: flutter
  rounded_loading_button_plus: ^x.y.z  # 请使用最新版本号

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

以下是一个简单的示例代码,展示如何使用RoundedLoadingButton

import 'package:flutter/material.dart';
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Rounded Loading Button Plus Example'),
        ),
        body: Center(
          child: RoundedLoadingButtonPlus(
            // 按钮宽度和高度
            width: 200,
            height: 50,
            // 圆角半径
            borderRadius: 25,
            // 按钮颜色
            color: Colors.blue,
            // 加载状态的颜色
            loadingColor: Colors.grey,
            // 按钮文字
            child: Text(
              'Click Me',
              style: TextStyle(color: Colors.white, fontSize: 18),
            ),
            // 加载指示器的大小
            loadingIndicatorSize: 24,
            // 加载指示器的颜色
            loadingIndicatorColor: Colors.white,
            // 按钮点击事件
            onPressed: () async {
              // 模拟一个异步操作
              await Future.delayed(Duration(seconds: 2));
              // 这里可以处理异步操作完成后的逻辑
              print('Button clicked!');
            },
            // 加载状态的回调函数
            onLoading: () {
              print('Loading...');
            },
            // 加载完成后的回调函数
            onCompleted: () {
              print('Loading completed!');
            },
            // 加载失败后的回调函数
            onError: (String errorMessage) {
              print('Error: $errorMessage');
            },
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个RoundedLoadingButtonPlus,设置了按钮的宽度、高度和圆角半径。
  2. 按钮的颜色在普通状态下是蓝色,在加载状态下是灰色。
  3. 按钮上的文字是“Click Me”,颜色为白色,字体大小为18。
  4. 加载指示器的大小为24,颜色为白色。
  5. onPressed回调模拟了一个异步操作,通过Future.delayed延迟2秒。
  6. onLoadingonCompletedonError分别用于处理加载状态、加载完成和加载失败的逻辑。

你可以根据实际需求调整这些参数和回调函数。希望这个示例对你有帮助!

回到顶部