You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter调用http.get的then方法报函数表达式不能命名错误解决方法

错误原因
  • 触发Function expressions can't be named: then报错的直接原因是括号书写错位:原代码中.then((response)) {的写法,在(response)后多写了一个右括号,导致Dart语法解析器判定then方法的调用已经提前结束,后面跟随的{ ... }代码块被识别为名为then的函数表达式,而Dart语法不允许为匿名函数表达式命名,直接抛出语法错误。
  • 代码中还存在几个新手常犯的问题,修正时可以一并处理:
    • 已经使用await处理异步逻辑的前提下,不需要额外链式调用then,两种异步写法混用极易出现语法错误,也会降低代码可读性
    • response.body是字符串类型,无法直接通过['status']读取字段,必须先通过jsonDecode将字符串解析为Map结构后才能取属性
    • 方法参数中未定义callback,直接调用会触发未定义方法报错;代码末尾存在错位多余的大括号,会触发括号不匹配错误
    • 未判断HTTP请求状态码,请求失败时直接解析响应体大概率会触发解码异常
修正方案

优先使用async/await写法,逻辑更直观适合新手,修正后可正常运行的代码如下:

import 'dart:convert';
import 'package:http/http.dart' as http;

// 记得在方法参数中定义传入的callback回调
void submitForm(FeedbackForm feedbackForm, Function callback) async {
  try {
    // 发起异步get请求,await等待结果,不需要套then
    final response = await http.get(Uri.parse(URL + feedbackForm.toParams()));
    // 先校验请求状态码为200(成功)再处理响应
    if (response.statusCode == 200) {
      // 先将响应体字符串解码为Map结构,再读取status字段
      final responseData = jsonDecode(response.body);
      callback(responseData['status']);
    } else {
      print("请求异常,状态码:${response.statusCode}");
    }
  } catch (e) {
    print(e);
  }
}

如果坚持使用then链式写法,注意不要搭配await,且要保证括号位置正确,写法参考如下(不推荐新手使用):

import 'dart:convert';
import 'package:http/http.dart' as http;

void submitForm(FeedbackForm feedbackForm, Function callback) {
  http.get(Uri.parse(URL + feedbackForm.toParams()))
    .then((response) {
      if (response.statusCode == 200) {
        final responseData = jsonDecode(response.body);
        callback(responseData['status']);
      }
    })
    .catchError((e) {
      print(e);
    });
}

内容的提问来源于stack exchange,提问作者Rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:27:32