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

Flutter向Stateful Widget传递数据失败:请求排查与修正

问题修正方案

错误原因解析

  1. 第一个错误是因为你在DataScreen类外部定义了全局zipCode变量,但类内部未声明对应成员字段,构造函数里的this.zipCode无法匹配类属性。
  2. 第二个错误是第一个问题的连锁反应——DataScreen类未正确定义zipCode成员,导致state里的widget.zipCode无法正常访问。

修正后的完整代码

class DataScreen extends StatefulWidget {
  // 在类内部声明成员变量,用final保证不可变性(符合StatefulWidget设计规范)
  final String zipCode;

  // 修正构造函数,初始化类的zipCode成员,添加required确保参数必填(null安全要求)
  const DataScreen({required this.zipCode, super.key});

  @override
  _DataScreenState createState() => _DataScreenState();
}

class _DataScreenState extends State<DataScreen> {
  List<PropertyInformation> propertyList = [];
  bool isLoaded = false;

  Future<void> getItems() async {
    setState(() {
      isLoaded = true;
    });
    var client = http.Client();

    try {
      // 现在可正常访问widget.zipCode
      var url = Uri.parse(
          "https://realty-mole-property-api.p.rapidapi.com/properties?zipCode=${widget.zipCode}");
          
      final response = await client.get(
        url,
        headers: {
          'X-RapidAPI-Key': '51ced1b32emsh509f82e1d58ae16p1ad6e6jsn75d75166a8b4',
          'X-RapidAPI-Host': 'realty-mole-property-api.p.rapidapi.com'
        },
      );

      if (response.statusCode == 200) {
        var jsonData = jsonDecode(response.body);
    
        for (var element in jsonData) {
          element.removeWhere((key, value) => key == null || value == null);
        }        

        for (var i in jsonData) {
          propertyList.add(PropertyInformation.fromJson(i));
        }

      } else {
        //print('Status Code: ${response.statusCode}');
      }
    } catch (e) {
      setState(() {
        isLoaded = false;
      });
      log("error $e");
    }

    setState(() {
      isLoaded = false;
    });
  }

  @override
  void initState() {
    getItems();
    super.initState();
  }
}

额外注意事项

  • 删除原来全局的const String zipCode = '';,避免变量名冲突。
  • 构造函数的required关键字是Flutter null安全的规范要求,和你页面1的调用方式DataScreen(zipController.text)兼容,也可以改成更清晰的命名参数调用:DataScreen(zipCode: zipController.text)。
  • 请勿在公开代码中暴露API密钥,建议通过环境变量或配置文件管理敏感信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:17:30