Flutter异步构建插件simple_async_builder的使用

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

Flutter异步构建插件simple_async_builder的使用

simple_async_builder 是一个用于 Flutter 的简单异步构建器插件。它提供了 AsyncFutureBuilderAsyncStreamBuilder,这些组件比 Flutter 原生的 FutureBuilderStreamBuilder 更加开发者友好。

简介

该插件的目的是简化处理异步操作时的 UI 构建。通过提供一些默认配置,使得在处理异步数据时更加方便。

安装

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

dependencies:
  simple_async_builder: ^最新版本号

然后运行 flutter pub get 来获取新安装的包。

使用方法

基本用法

下面是一个简单的例子,展示了如何使用 AsyncFutureBuilder 构建一个等待两秒后返回结果的按钮点击计数器:

AsyncFutureBuilder<int>(
  future: Future<int>.delayed(const Duration(seconds: 2), () => 3),
  builder: (context, value) => Text("Button was clicked $value times"),
)

这将生成以下效果:

example-widget

同样的效果也可以通过 Flutter 的原生 FutureBuilder 实现:

FutureBuilder<int>(
  future: Future<int>.delayed(const Duration(seconds: 2), () => 3),
  builder: (context, snapshot) {
    switch(snapshot.connectionState) {
      case ConnectionState.none:
        return Text("Error");
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
      case ConnectionState.done:
        return Center(child: Text('Button was clicked ${snapshot.data ?? 0} times'));
    }
  }
);

高级用法

你可以自定义 AsyncFutureBuilder 的各个部分,例如等待状态、错误处理等。以下是一个更复杂的例子:

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    final futureClickCount = Future<int>.delayed(const Duration(seconds: 2), () => 3);
    return Scaffold(
      appBar: AppBar(title: const Text('Example')),
      body: AsyncFutureBuilder<int>(
        future: futureClickCount,
        waiting: (context) => Row(children: [CircularProgressIndicator(), Text("Loading...")],),
        builder: (context, value) => Center(child: Text('Button was clicked $value times')),
        error: (context, error, stack) => Text("Ups, something went wrong... $error"),
        reportError: (errorDetail) => reportToFirebase(errorDetail.exception.toString()),
      ),
    );
  }

  void reportToFirebase(Object error) {
    debugPrint(error.toString());
  }
}

在这个例子中:

  • waiting 参数指定了在等待异步操作完成时显示的内容。
  • builder 参数用于处理异步操作成功后的结果显示。
  • error 参数用于处理异步操作失败时显示的内容。
  • reportError 参数用于报告错误,这里将其发送到 Firebase 进行进一步分析。

完整示例

以下是完整的示例代码,展示了如何在一个应用中使用 AsyncFutureBuilderAdvancedWidget

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

void main() {
  runApp(const ExampleApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(home: ExampleWidget());
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    final futureClickCount = Future<int>.delayed(const Duration(seconds: 2), () => 3);
    return Scaffold(
      appBar: AppBar(
        title: const Text('Example'),
      ),
      body: AsyncFutureBuilder<int>(
        future: futureClickCount,
        builder: (context, value) => Center(child: Text('Button was clicked $value times')),
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    final futureClickCount = Future<int>.delayed(const Duration(seconds: 2), () => 3);
    return Scaffold(
      appBar: AppBar(title: const Text('Example')),
      body: AsyncFutureBuilder<int>(
        future: futureClickCount,
        waiting: (context) => Row(children: [CircularProgressIndicator(), Text("Loading...")],),
        builder: (context, value) => Center(child: Text('Button was clicked $value times')),
        error: (context, error, stack) => Text("Ups, something went wrong... $error"),
        reportError: (errorDetail) => reportToFirebase(errorDetail.exception.toString()),
      ),
    );
  }

  void reportToFirebase(Object error) {
    debugPrint(error.toString());
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用simple_async_builder插件的示例代码。simple_async_builder是一个帮助你在Flutter应用中处理异步构建的插件。它允许你在等待异步任务完成时显示占位符内容,并在任务完成后显示实际内容。

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

dependencies:
  flutter:
    sdk: flutter
  simple_async_builder: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来获取依赖。

接下来,我们来看一个完整的示例代码,展示如何使用SimpleAsyncBuilder来构建异步UI:

import 'package:flutter/material.dart';
import 'package:simple_async_builder/simple_async_builder.dart';
import 'dart:async';

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  // 模拟一个异步任务,例如从网络获取数据
  Future<String> fetchData() async {
    await Future.delayed(Duration(seconds: 2)); // 模拟网络延迟
    return "Hello, Flutter!";
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SimpleAsyncBuilder Demo'),
      ),
      body: Center(
        child: SimpleAsyncBuilder<String>(
          future: fetchData(), // 传入异步任务
          builder: (context, data, loading, error) {
            if (loading) {
              // 显示加载中的占位符
              return CircularProgressIndicator();
            } else if (error != null) {
              // 处理错误
              return Text('Error: ${error.toString()}');
            } else {
              // 显示实际数据
              return Text(data ?? '', style: TextStyle(fontSize: 24));
            }
          },
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个Flutter应用,其中包含一个主页面MyHomePage。在MyHomePage中,我们使用SimpleAsyncBuilder来构建异步UI。SimpleAsyncBuilder接收一个future(在这个例子中是fetchData()函数返回的Future),并且根据future的状态(加载中、完成、错误)来构建不同的UI。

  • future处于加载状态时,我们显示一个CircularProgressIndicator
  • future完成并且没有错误时,我们显示从future获取的数据。
  • future完成时发生错误时,我们显示一个错误消息。

这样,你就可以使用simple_async_builder插件来方便地处理Flutter应用中的异步UI构建了。

回到顶部