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

Flutter中如何将参数传递至另一个Dart文件并转换为可用变量

解决Flutter中跨页面传递userName变量的问题

嘿,我来帮你搞定这个变量传递的问题!其实你离正确答案只差几步简单的调整,咱们一步步来梳理:

核心问题分析

你现在的代码里,Verify页面的StatefulWidget没有把传入的_userName保存为类的成员变量,导致State类里根本访问不到这个值。另外,你提到的this.其实是用来引用当前类实例的成员,咱们正好可以用它来修复这个问题。

步骤1:修正Verify页面的StatefulWidget定义

首先要把传入的userName变成Verify类的成员变量,这样State才能访问到它。修改后的代码如下:

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

class Verify extends StatefulWidget {
  // 定义一个final的公开成员变量,用来存储传入的userName
  final String userName;

  // 构造函数:把传入的参数赋值给类的成员变量,this.userName就是指当前实例的userName属性
  const Verify(this.userName, {Key? key}) : super(key: key);

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

这里的this.userName就是你疑惑的this.用法:在构造函数里,它用来区分构造函数的参数和类的成员变量(如果参数名和成员变量名一样的话,必须用this.来指定是成员变量)。

步骤2:在State类中访问传递过来的变量

State类本身不能直接访问StatefulWidget的成员,但可以通过widget属性(它指向对应的StatefulWidget实例)来获取。修改你的State类代码:

class _VerifyState extends State<Verify> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        // 用widget.userName来访问传递过来的变量
        child: Text('Here is your variable ${widget.userName} please verify'),
      ),
    );
  }
}

步骤3:确认跳转代码的正确性

你在第一个文件里的跳转代码其实是对的,不过可以优化成命名参数让代码更清晰(可选):

onPressed: () => signUp(_email, _password).then((_) { 
  Navigator.of(context).pushReplacement( 
    MaterialPageRoute(builder: (context) => Verify(_userName))); 
    // 或者用命名参数:Verify(userName: _userName)
}),

额外说明

  • 完全不需要把数据存入列表,通过StatefulWidget构造函数传递参数是Flutter中跨页面传递简单数据最直接、高效的方式。
  • 关于this.的补充:在类的方法里,如果局部变量和成员变量同名,必须用this.来指定成员变量;如果没有重名,this.可以省略,比如你在State里写this.widget.userName和widget.userName是一样的效果。

这样调整后,你就能在Verify页面正常获取到传递过来的userName变量啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:53:59