首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(三十五):异步基础 Future / async / await —— 网络请求与延时操作

Flutter 零基础入门(三十五):异步基础 Future / async / await —— 网络请求与延时操作

作者头像
LarryLan
发布2026-03-03 13:00:43
发布2026-03-03 13:00:43
390
举报

异步基础 Future / async / await —— 网络请求与延时操作

到目前为止,你已经可以:

  • 写展示页面
  • 输入与表单交互
  • 页面跳转并传递参数

但是一个真正的 App,绝大多数功能都涉及异步操作

  • 网络请求(获取列表数据)
  • 延时操作(倒计时、广告页)
  • 文件读写

Flutter 中的异步操作核心是 Future / async / await


一、什么是 Future?

一句话理解:

Future = 异步操作的结果容器

  • 还没完成 → 等待中
  • 完成 → 成功(返回值)
  • 失败 → 异常

📌 类比:

就像你向朋友借钱, 你把 IOU 交给朋友 → 等待他还钱(Future)


二、最简单的 Future 示例

代码语言:javascript
复制
Future<String> fetchData() {
  return Future.delayed(Duration(seconds: 2), () {
    return '网络数据加载完成';
  });
}
  • Future.delayed 模拟异步延时
  • 2 秒后返回结果

使用方法一:then

代码语言:javascript
复制
fetchData().then((value) {
  print(value); // 网络数据加载完成
});

✅ then 的作用:

  • 等异步完成后回调结果
  • 传统写法

使用方法二:async / await(推荐)

代码语言:javascript
复制
void loadData() async {
  String result = await fetchData();
  print(result);
}

📌 注意:

  • await 只能在 async 修饰的函数里使用
  • 更直观,更像同步代码

三、异常处理

代码语言:javascript
复制
try {
  String result = await fetchData();
  print(result);
} catch (e) {
  print('加载失败:$e');
}

📌 真实项目必须处理异常,否则 App 崩溃。


四、完整示例:延时操作

代码语言:javascript
复制
class AsyncDemo extends StatefulWidget {
  @override
  _AsyncDemoState createState() => _AsyncDemoState();
}

class _AsyncDemoState extends State<AsyncDemo> {
  String _data = '等待加载...';

  Future<String> fetchData() {
    return Future.delayed(Duration(seconds: 3), () => '异步数据加载完成');
  }

  void loadData() async {
    try {
      String result = await fetchData();
      setState(() {
        _data = result;
      });
    } catch (e) {
      setState(() {
        _data = '加载失败';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('异步示例')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_data),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: loadData,
              child: Text('加载数据'),
            ),
          ],
        ),
      ),
    );
  }
}

📌 点击按钮后,2~3 秒后显示异步结果 ✅ 这就是 异步更新 UI 的标准模式


五、异步的核心总结

  • Future → 异步任务容器
  • then → 回调方式
  • async / await → 推荐方式
  • try / catch → 异常处理
  • setState → 异步更新 UI

六、异步常见坑

❌ 忘记 async / await ❌ then 写多层回调 → 回调地狱 ❌ 异步结束不更新 UI ❌ Future 未处理异常 → 崩溃 ❌ 放在 build 里直接 await → 页面卡住

📌 建议:异步任务尽量写在 事件或 initState 中。


七、应用场景

  • 网络请求(http / dio)
  • 延时操作(广告页 / 倒计时)
  • 数据库 / 文件读取
  • 定时任务

📌 几乎所有业务功能都离不开异步。


八、本篇你真正掌握了什么?

你已经学会:

  • Future 的概念
  • async / await 基本用法
  • 异步任务更新 UI
  • 异常处理
  • 延时模拟操作

📌 到这里为止:

你可以实现“网络请求 + 异步更新 UI”的基本功能,为后续 API 调用打下基础。


九、一句话总结

Future 管异步 async / await 写逻辑 setState 更新 UI


🔜 下一篇预告

《Flutter 零基础入门(三十六):简单状态管理 setState —— StatefulWidget 进阶》

下一篇我们将学习:

  • StatefulWidget 深入
  • setState 的正确用法
  • 异步与状态结合
  • UI 刷新机制

🚀 真正掌握“动态页面”能力

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异步基础 Future / async / await —— 网络请求与延时操作
    • 一、什么是 Future?
    • 二、最简单的 Future 示例
      • 使用方法一:then
      • 使用方法二:async / await(推荐)
    • 三、异常处理
    • 四、完整示例:延时操作
    • 五、异步的核心总结
    • 六、异步常见坑
    • 七、应用场景
    • 八、本篇你真正掌握了什么?
    • 九、一句话总结
    • 🔜 下一篇预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档