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

Flutter调试提示Undefined name 'data'错误,求解决方案

解决Dart调试时"Undefined name 'data'"错误

问题详情

调试过程中出现以下错误:

error: org-dartlang-debug:synthetic_debug_expression:1:1: Error: Undefined name 'data'

调试器提示data是List类型,且已确认JSON文件路径正确。当前用于读取JSON文件的代码如下:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class SharedPref extends StatefulWidget {
  const SharedPref({super.key});

  @override
  State<SharedPref> createState() => _SharedPrefState();
}

class _SharedPrefState extends State<SharedPref> {
  void readCountryCode() async {
    var data =
        await rootBundle.loadString('assets/local_files/country_code.json');
    print(data);
    print('object');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image.asset('images/logo.png'),
      ),
    );
  }
}

解决方案

1. 检查调试作用域与变量生命周期

data是readCountryCode函数内部的局部变量,仅在该函数执行期间存在:

  • 确保断点设置在readCountryCode函数内部(比如print(data);这一行),不要在函数外部(如build方法的断点)尝试访问该变量。
  • 若调试控制台手动输入了data表达式,但当前断点不在函数执行流程中,直接删除该无效表达式即可。

2. 确保函数被调用

当前代码中readCountryCode函数从未被触发执行,data变量根本不会被初始化,调试时自然找不到该变量。可以添加触发逻辑,比如在UI中加按钮调用:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Image.asset('images/logo.png'),
          ElevatedButton(
            onPressed: readCountryCode,
            child: const Text('读取JSON'),
          ),
        ],
      ),
    ),
  );
}

3. 若需全局访问data,改为成员变量

如果需要在readCountryCode函数外部访问data,可将其声明为类的成员变量:

class _SharedPrefState extends State<SharedPref> {
  var data; // 声明为类成员变量

  void readCountryCode() async {
    data = await rootBundle.loadString('assets/local_files/country_code.json');
    print(data);
    print('object');
    setState(() {}); // 若需更新UI可调用
  }

  // build方法不变或按需求修改
}

4. 区分原始字符串与解析后的List

调试器提示data是List,大概率是你后续对读取到的JSON字符串做了解析(比如使用jsonDecode(data)),但当前代码未体现。此时要注意:

  • 原始data是字符串类型,解析后的List需用新变量存储(比如var countryList = jsonDecode(data);),调试时不要混淆两个变量的名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:05:55