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

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

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

RoundedLoadingButton 是一个用于 Flutter 的简单实现的带有动画效果的加载按钮插件。它支持成功和失败状态下的动画效果。

安装

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

dependencies:
    rounded_loading_button: ^2.0.8

导入

在 Dart 文件中导入 RoundedLoadingButton 包:

import 'package:rounded_loading_button/rounded_loading_button.dart';

简单实现

首先创建一个 RoundedLoadingButtonController 实例来控制按钮的状态。然后定义一个异步函数 _doSomething,在这个函数中设置按钮的成功或失败状态。最后,在构建方法中使用 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,
)

完整示例

以下是一个完整的示例代码,展示了如何使用 RoundedLoadingButton 插件。

import 'dart:async';

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

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

class MyApp extends StatelessWidget {
  [@override](/user/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](/user/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](/user/override)
  void initState() {
    super.initState();
    _btnController1.stateStream.listen((value) {
      print(value);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Rounded Loading Button Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              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'),
              )
            ],
          ),
        ));
  }
}

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

1 回复

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


当然,以下是如何在Flutter中使用rounded_loading_button插件来实现一个圆角加载按钮的代码示例。首先,你需要确保已经在pubspec.yaml文件中添加了该插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  rounded_loading_button: ^2.0.0  # 请检查最新版本号并更新

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

接下来,你可以在你的Flutter应用中实现一个带有圆角加载效果的按钮。下面是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:rounded_loading_button/rounded_loading_button.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 {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

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

  void handleButtonClick() 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('Rounded Loading Button Demo'),
      ),
      body: Center(
        child: RoundedLoadingButton(
          width: 200,
          height: 50,
          color: Colors.blue,
          child: Text(
            '点击加载',
            style: TextStyle(color: Colors.white),
          ),
          loadingBuilder: (context, width, height) => CircularProgressIndicator(
            strokeWidth: 2.0,
            valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
          ),
          onPressed: isLoading ? null : handleButtonClick,
          borderRadius: 25.0,
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们首先导入了rounded_loading_button包。
  2. 创建了一个简单的Flutter应用,包含一个主页面MyHomePage
  3. MyHomePage中,定义了一个布尔变量isLoading来跟踪按钮的加载状态。
  4. handleButtonClick函数模拟了一个异步操作(例如网络请求),在点击按钮后设置isLoadingtrue,模拟操作完成后将其设置回false
  5. 使用RoundedLoadingButton组件,并配置了宽度、高度、颜色、子组件(按钮上的文本)、加载指示器构建器以及按钮点击事件处理函数。
  6. isLoadingtrue时,按钮将显示加载指示器并禁用点击事件。

这个示例展示了如何使用rounded_loading_button插件创建一个具有圆角效果的加载按钮,并在按钮点击时显示加载动画。

回到顶部