Flutter异步按钮构建插件async_button_build的使用

Flutter异步按钮构建插件async_button_build的使用

async_button

async_button 是一个用于处理异步按钮操作的小部件,它提供了一种方便的方式来在执行异步任务时显示加载状态。

特性

  • 异步处理:按下按钮时运行异步函数。
  • 加载状态:在任务运行时自动禁用按钮并显示加载指示器。
  • 可定制化:通过 buttonBuilder 函数完全自定义按钮的外观和行为。

安装

在你的 pubspec.yaml 文件的 dependencies 下添加以下行:

dependencies:
  async_button: ^1.0.0

然后运行以下命令:

flutter pub get

使用

AsyncButton 可以帮助你轻松处理涉及异步操作(如网络请求)的按钮点击事件。你可以通过 buttonBuilder 函数自定义按钮的外观。

以下是一个完整的示例代码,展示如何使用 AsyncButton

import 'package:flutter/material.dart';
import 'package:async_button/async_button.dart'; // 导入async_button包

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Async Button Example'),
        ),
        body: Center(
          child: AsyncButtonExample(),
        ),
      ),
    );
  }
}

class AsyncButtonExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return AsyncButton(
      onPressedAsync: () async {
        // 模拟异步操作,例如网络请求或文件读取
        await Future.delayed(Duration(seconds: 2)); // 模拟耗时2秒的操作
      },
      buttonBuilder: (BuildContext context, VoidCallback onPressed, bool working) {
        return ElevatedButton(
          onPressed: onPressed,
          child: working
            ? CircularProgressIndicator() // 加载中显示圆形进度条
            : Text('提交'), // 按钮文本
        );
      },
    );
  }
}

代码说明

  1. 导入包

    import 'package:async_button/async_button.dart';

    引入 async_button 包以便使用 AsyncButton 小部件。

  2. 主应用结构

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Async Button Example'),
            ),
            body: Center(
              child: AsyncButtonExample(),
            ),
          ),
        );
      }
    }

    创建了一个简单的 Flutter 应用程序,包含一个 AsyncButtonExample 小部件作为主页。

  3. AsyncButton 的使用

    class AsyncButtonExample extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return AsyncButton(
          onPressedAsync: () async {
            // 模拟异步操作
            await Future.delayed(Duration(seconds: 2));
          },
          buttonBuilder: (BuildContext context, VoidCallback onPressed, bool working) {
            return ElevatedButton(
              onPressed: onPressed,
              child: working
                ? CircularProgressIndicator()
                : Text('提交'),
            );
          },
        );
      }
    }
1 回复

更多关于Flutter异步按钮构建插件async_button_build的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


async_button_build 是一个 Flutter 插件,它可以帮助你轻松地构建带有异步操作的按钮。这个插件特别适用于处理需要等待异步操作完成后再进行下一步操作的场景,例如网络请求、文件读写等。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  async_button_build: ^1.0.0  # 请使用最新版本

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

基本用法

async_button_build 提供了一个 AsyncButtonBuilder 小部件,你可以使用它来构建带有异步操作的按钮。以下是一个简单的示例:

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

class MyAsyncButton extends StatelessWidget {
  Future<void> _performAsyncOperation() async {
    // 模拟一个异步操作,例如网络请求
    await Future.delayed(Duration(seconds: 2));
    print('Async operation completed');
  }

  @override
  Widget build(BuildContext context) {
    return AsyncButtonBuilder(
      onPressed: _performAsyncOperation,
      builder: (context, child, callback, _) {
        return ElevatedButton(
          onPressed: callback,
          child: child,
        );
      },
      child: Text('Click Me'),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: Text('Async Button Example')),
      body: Center(
        child: MyAsyncButton(),
      ),
    ),
  ));
}

参数说明

  • onPressed: 这是一个 Future<void> 类型的回调函数,当按钮被点击时会执行这个异步操作。
  • builder: 这是一个构建按钮的函数,它接收 BuildContextchildcallbackstate 四个参数。你可以在这个函数中自定义按钮的外观和行为。
    • context: 当前的 BuildContext
    • child: 按钮的子部件,通常是你在 child 参数中传递的内容。
    • callback: 这是一个回调函数,当按钮被点击时会调用这个函数来触发异步操作。
    • state: 这是一个 AsyncButtonState 枚举,表示按钮的当前状态(例如 idleloadingsuccesserror 等)。
  • child: 按钮的子部件,通常是按钮的文本或图标。

处理不同状态

你可以根据 state 参数来处理按钮的不同状态。例如,当按钮处于 loading 状态时,你可以显示一个加载指示器:

AsyncButtonBuilder(
  onPressed: _performAsyncOperation,
  builder: (context, child, callback, state) {
    return ElevatedButton(
      onPressed: callback,
      child: state == AsyncButtonState.loading
          ? CircularProgressIndicator()
          : child,
    );
  },
  child: Text('Click Me'),
)

处理成功和错误状态

你还可以根据 state 参数来处理成功和错误状态。例如,当异步操作成功时,你可以显示一个成功的图标:

AsyncButtonBuilder(
  onPressed: _performAsyncOperation,
  builder: (context, child, callback, state) {
    return ElevatedButton(
      onPressed: callback,
      child: state == AsyncButtonState.loading
          ? CircularProgressIndicator()
          : state == AsyncButtonState.success
              ? Icon(Icons.check)
              : child,
    );
  },
  child: Text('Click Me'),
)
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!