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。
修复步骤
- 给
FirstPage添加message参数的定义和构造函数 - 在
_FirstPageState中用传入的message初始化_message变量 - 修改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
相关产品推荐
相关产品推荐

