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

Flutter开发报错:命名参数'message'未定义[97:53]求解决

解决Flutter报错:The named parameter 'message' isn't defined

问题原因

报错位于第97行:你在SecondPage点击返回按钮时,调用FirstPage(message: _message2)试图传入参数,但FirstPage这个StatefulWidget类没有定义接收message参数的成员变量和构造函数,导致编译器无法识别该参数。同时你的返回逻辑存在问题:用Navigator.push会在路由栈中新增一个FirstPage实例,正确的返回方式应该是用Navigator.pop把结果传回原FirstPage。

修复步骤

  1. 给FirstPage添加message参数的定义和构造函数
  2. 在_FirstPageState中用传入的message初始化_message变量
  3. 修改SecondPage的返回逻辑,用Navigator.pop替代Navigator.push,传递返回值

修复后的完整代码

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Passing Variable Demo',
      home: FirstPage(),
    );
  }
}

class FirstPage extends StatefulWidget {
  // 添加接收message的可选参数
  final String? message;
  // 构造函数
  FirstPage({this.message});

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

class _FirstPageState extends State<FirstPage> {
  TextEditingController _textEditingController = TextEditingController();
  late String _message;

  @override
  void initState() {
    super.initState();
    // 用传入的message初始化,为空则设空字符串
    _message = widget.message ?? '';
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Message: $_message'),
            TextField(
              controller: _textEditingController,
              decoration: InputDecoration(
                hintText: 'Enter your message',
              ),
            ),
            ElevatedButton(
              child: Text('Go to Second Page'),
              onPressed: () async {
                // 传递输入框的内容给SecondPage,而非初始为空的_message
                final result = await Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => SecondPage(message: _textEditingController.text),
                  ),
                );
                setState(() {
                  _message = result ?? '';
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  final String message;
  SecondPage({required this.message});
  @override
  _SecondPageState createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
  late String _message2;
  TextEditingController _textEditingController = TextEditingController();

  @override
  void initState() {
    super.initState();
    // 用传入的message初始化_message2
    _message2 = widget.message;
    // 将内容同步到输入框,方便用户修改
    _textEditingController.text = _message2;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Message: $_message2'),
            TextField(
              controller: _textEditingController,
              decoration: InputDecoration(
                hintText: 'Enter your message',
              ),
            ),
            ElevatedButton(
              child: Text('Go back to First Page'),
              onPressed: () {
                // 用pop返回输入框内容给上一页,避免重复创建FirstPage实例
                Navigator.pop(context, _textEditingController.text);
              },
            ),
          ],
        ),
      ),
    );
  }
}

额外优化说明

  • 修正了FirstPage跳转时的传参逻辑:原本传递的是空初始值_message,改为传递用户实际输入的_textEditingController.text
  • SecondPage初始化时将传入的内容同步到输入框,提升用户体验
  • 用Navigator.pop返回结果,保证路由栈的合理性,避免页面堆积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:50:28