Flutter 处理异步操作并根据异步操作状态动态构建界面的方法FutureBuilder

概述

当界面的内容需要依靠网络请求的数据,就需要处理苦恼的,状态是空,非空的逻辑了,不然页面构建可能会报错,而FutureBuilder提供了一个非常好的解决方法,直接看代码

代码

异步操作函数

即网络请求函数(通常情况下)

Dart 复制代码
Future<List<String>> fetchStringList() async {
  return Future.delayed(Duration(seconds: 2), () {
    // 模拟网络请求
    return ['Item 1', 'Item 2', 'Item 3'];
  });
}

widget构建部分

Dart 复制代码
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FutureBuilder Example'),
        ),
        body: Center(
          child: FutureBuilder<List<String>>(
            future: fetchStringList(), // Future函数
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                // 数据还在加载中,显示一个加载指示器
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return ListView.builder(
                  itemCount: snapshot.data!.length,
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Text(snapshot.data![index]),
                    );
                  },
                );
              }
            },
          ),
        ),
      ),
    );
  }
}

可以看出来,这为需要异步操作的页面提供了更好的构建页面方式。

相关推荐
老徐聊GEO1 分钟前
把“安徽“写进题面之后:多平台AI推荐名单的区域扰动测量(2026)
前端·人工智能·算法·geo优化
tianbin9114 分钟前
批处理与微调辅助场景:Claude 中转并发、链路缓存与压测对比
java·开发语言·缓存
小朱爱编程1238 分钟前
AI点了两次发布,我多了两篇事故
数据库·人工智能·大模型·软件工程
frjc12 分钟前
Spring AI 里 ChatClient 和 ChatModel 有什么区别?什么时候该用哪个?
java·开发语言·spring·ai
moshuying12 分钟前
DeppInfer系列之 - 矩阵、注意力与 GPU:拆解 DeepGEMM 与 FlashMLA
前端·javascript·面试
小成2023032026518 分钟前
C++~05异常处理
开发语言·c++
Wang's Blog21 分钟前
Java 项目实战: 交友项目 - 圈子功能的表设计方案
java·开发语言·交友
时间售卖铺25 分钟前
MySQL DML 与 DQL 语句详解
运维·数据库·mysql·云原生
codeejun33 分钟前
每日一Go·MySQL-9、索引存储结构|页分裂、页合并、索引高度与磁盘
数据库·mysql
燕落南枝35 分钟前
CSS 分组选择器与链接伪类选择器详解
前端·css