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

Flutter未定义名称报错及语法符号使用规则相关问题求助

Flutter代码报错问题解答

第一版代码错误原因

  • 私有变量访问错误:_biggerFont、_suggestions都是定义在_RandomWordsState类里的私有属性(下划线开头),你把_buildRow、_buildSuggestions方法写在了RandomWords Widget类里,State类的私有属性父Widget类无法访问,自然报未定义错误。
  • 无用变量告警:MyApp里定义的wordPair没有被使用,_RandomWordsState的build方法里定义的wordPair也没有被后续逻辑调用,所以触发无用变量告警。
  • 方法未调用告警:_buildSuggestions仅完成了定义,没有在build方法中被调用,所以触发未引用告警。

第二版代码错误原因

全部为语法结构类错误,核心是括号不匹配、类定义顺序错误:

  • 类定义嵌套错误:_RandomWordsState类的结尾缺少闭合},导致后面的RandomWords类被识别为_RandomWordsState的内部类,MyApp中自然无法调用顶层的RandomWords类。
  • 组件参数归属错误:appBar和body是Scaffold的专属参数,你直接写到了MaterialApp的构造参数里,所以报参数不存在错误。
  • 括号不匹配:MyApp的build方法中,MaterialApp闭合的);后面多了多余的),同时缺少语句结束符;,直接触发语法错误。
  • 状态变量位置错误:_suggestions、_biggerFont是随State生命周期变化的属性,写在RandomWords Widget类里不符合StatefulWidget的规范,需要移到State类中。

括号使用规则

  • ):用于闭合单个(包裹的内容,比如方法参数列表void func(int a)、Widget构造参数Text('测试内容'),每写一个(就要对应一个)完成闭合。
  • );:当(包裹的是一个表达式/语句时,闭合)后需要加语句结束符;,比如变量定义final text = Text('测试内容');、return语句return Scaffold();。
  • }:用于闭合单个{包裹的代码块,比如类定义class A { ... }、方法体void build() { ... }、判断/循环逻辑块if(true) { ... },每写一个{就要对应一个}完成闭合。

小技巧:写代码时每打一个开括号,立刻补写对应的闭括号,再往中间填充内容,大部分编辑器也会高亮显示配对的括号,不匹配时会自动标红提示。

修正后可运行代码

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Startup Name Generator',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Welcome to Flutter'),
        ),
        body: const Center(
          child: RandomWords(),
        ),
      ),
    );
  }
}

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

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

class _RandomWordsState extends State<RandomWords> {
  final _suggestions = <WordPair>[];
  final _biggerFont = const TextStyle(fontSize: 50.0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Startup Name Generator'),
      ),
      body: _buildSuggestions(),
    );
  }

  Widget _buildRow(WordPair pair) {
    return ListTile(
      title: Text(
        pair.asPascalCase,
        style: _biggerFont,
      ),
    );
  }

  Widget _buildSuggestions() {
    return ListView.builder(
        padding: const EdgeInsets.all(16.0),
        itemBuilder: (context, i) {
          if (i.isOdd) return const Divider();

          final index = i ~/ 2;
          if (index >= _suggestions.length) {
            _suggestions.addAll(generateWordPairs().take(10));
          }
          return _buildRow(_suggestions[index]);
        });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:18:02