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

使用get_ip_address包获取IP时返回Future实例的问题求助

问题解决:获取IP时返回Instance of 'Future'

问题核心是你没有等待异步方法执行完成就直接使用返回的Future对象。getIp()是异步方法,返回的是Future<String>类型,必须通过await关键字等待它执行完毕,才能拿到实际的IP字符串。

修复步骤:

  1. 在按钮点击回调中,创建User对象前调用getIp()并添加await,获取真实IP:
onPressed: isClick
    ? () async {
        isClick = false;
        final DateTime dateCreated = DateTime.now();
        // 新增:等待异步方法完成,拿到实际IP字符串
        final String ipAddress = await getIp();
        setState(() {
          // 原代码此处仅写了dateCreated,未赋值给状态变量,建议修正为对应状态字段
          // 示例:this._dateCreated = dateCreated;
        });
        final user = User(
            name: _nameController.text,
            surname: _surnameController.text,
            email: _emailController.text,
            year: _selectedValue,
            dateCreated: DateFormat('dd/MM/y - HH:mm:ss').format(dateCreated),
            ipAddress: ipAddress); // 替换为真实IP
        hasInternet = await InternetConnectionChecker().hasConnection;
        await UserService.insert([user.toJson()]);
        if (hasInternet) {
          showToast(StringConstants.registerOkayText, duration: 2, gravity: Toast.bottom);
        } else {
          showToast(StringConstants.registerNotOkayText, duration: 5, gravity: Toast.bottom);
        }
      }
    : null,
  1. 优化getIp()方法,确保返回正确的IP字符串:
    当getIpAddress()返回JSON对象时,直接toString()会得到对象实例描述,需要提取具体IP字段(根据接口返回结构调整):
static Future<String> getIp() async {
  try {
    var ipAddressType = IpAddress(type: RequestType.json);
    dynamic ipData = await ipAddressType.getIpAddress();
    // 假设返回的JSON包含'ip'字段,替换为实际字段名
    return ipData['ip'] ?? '未知IP';
  } on IpAddressException catch (exception) {
    return exception.message;
  }
}

关键提示:

  • 带async的异步方法返回的Future是未完成的操作占位符,必须用await等待它完成,才能获取实际返回值。
  • 直接将Future对象赋值给字符串类型字段,就会输出Instance of 'Future'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:03:25