Class 颤振中两类变量的传递

Class 颤振中两类变量的传递,class,variables,flutter,dart,Class,Variables,Flutter,Dart,我在flatter中创建注册和登录页面,并且面临一个问题,因为我想使用main.dart文件中class\u MyHomePage中声明的相同变量“email”和“password” 转到signup.dart文件中的另一个类SignupPage 我已经导入了这些文件,但无法在两个类中使用这些值 class _MyHomePageState extends State<MyHomePage> { int _counter = 0; String _email = ''; Stri

我在flatter中创建注册和登录页面,并且面临一个问题,因为我想使用main.dart文件中class\u MyHomePage中声明的相同变量“email”和“password”

转到signup.dart文件中的另一个类SignupPage

我已经导入了这些文件,但无法在两个类中使用这些值

class _MyHomePageState extends State<MyHomePage> {
 int _counter = 0;

String _email = '';
String _password = '';

final formKey = new GlobalKey<FormState>();

FormType _formType = FormType.login;

bool validateAndSave() {
final form = formKey.currentState;
if (form.validate()) {
  form.save();
  return true;
 //      print('Form is Valid  Email: $_email, Password: $_password');
}
return false;
}
class\u MyHomePageState扩展状态{
int _计数器=0;
字符串_email='';
字符串_password='';
final formKey=new GlobalKey();
FormType _FormType=FormType.login;
bool validateAndSave(){
最终形式=formKey.currentState;
if(form.validate()){
form.save();
返回true;
//打印('表格为有效电子邮件:$\\电子邮件,密码:$\\密码');
}
返回false;
}

您可以通过以下方式在屏幕上导航时传递数据

Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => SignUp(email: emailvariable,pass: passvariable),
                ),
通过以下方式,您可以接收数据

class SignUp extends StatefulWidget {

  final email;
  final pass; 
  SignUp({Key key,this.email,this.pass}) : super(key: key);

  @override
  _SignUpState createState() => _SignUpState();
}
现在,在状态小部件中,您可以访问电子邮件并将变量作为

widget.pass and widget.email

您可以通过以下方式在屏幕上导航时传递数据

Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => SignUp(email: emailvariable,pass: passvariable),
                ),
通过以下方式,您可以接收数据

class SignUp extends StatefulWidget {

  final email;
  final pass; 
  SignUp({Key key,this.email,this.pass}) : super(key: key);

  @override
  _SignUpState createState() => _SignUpState();
}
现在,在状态小部件中,您可以访问电子邮件并将变量作为

widget.pass and widget.email
这有两种方法 通过类构造函数传递值

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => Register(email: email, pass: pass),
  ),
如果你不想来回走动,你可以用这个

就在第二页中,像这样使用

class Register extends StatefulWidget {
  Register({Key key, this.email, this.pass});

  final String email;
  final String pass;

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

class _RegisterState extends State<Register> {

  @override
  Widget build(BuildContext context) {
    print(widget.email);
    print(widget.pass);
    // to use state class values you need to use the widget as the parent class object
    return Container(
    );
  }
}
在路由到另一页之前,将值存储在全局范围中

如果必须多次路由,甚至需要进一步使用这些值,则在路由到另一个页面并访问该页面之前,将这些值存储在全局文件中

归档

环球飞镖 要访问这些值 这有两种方法 通过类构造函数传递值

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => Register(email: email, pass: pass),
  ),
如果你不想来回走动,你可以用这个

就在第二页中,像这样使用

class Register extends StatefulWidget {
  Register({Key key, this.email, this.pass});

  final String email;
  final String pass;

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

class _RegisterState extends State<Register> {

  @override
  Widget build(BuildContext context) {
    print(widget.email);
    print(widget.pass);
    // to use state class values you need to use the widget as the parent class object
    return Container(
    );
  }
}
在路由到另一页之前,将值存储在全局范围中

如果必须多次路由,甚至需要进一步使用这些值,则在路由到另一个页面并访问该页面之前,将这些值存储在全局文件中

归档

环球飞镖 要访问这些值
如果其他答案不能解决您的问题,您可以使用Flitter提供的InheritedModel小部件。它允许您在深度嵌套的小部件之间共享数据。文档很好,甚至有来自Flitter团队的视频解释如何使用它:

如果其他答案不能解决您的问题,您可以使用Inherit由Flatter提供的edModel widget。它允许您在深度嵌套的widget之间共享数据。文档很好,甚至有来自Flatter团队的视频解释如何使用它:

第一个解决方案将产生相同的问题,即多次定义相同的变量,因此我选择第二个解决方案,但我得到了此错误:错误:名称“\u emailTest”正通过前缀“global”引用,但未在使用该前缀导入的任何库中定义。(未定义的\u前缀位于[flatter\u app\u service]lib/main.dart:136)设置全局变量不是一个好的做法。您可以通过类构造函数发送它们,或者使用状态管理的形式(ScopedModel、Redux、BLoC等)这使您可以轻松地在整个应用程序中共享值,而无需太多混乱。变量名称不应包括u因为它使dart中的值变为私有,请尝试删除下划线@Alexalit。第一个解决方案将产生相同的问题,即多次定义相同的变量,因此我选择第二个解决方案,但我得到以下错误:错误:名称_“emailTest”是通过前缀“global”引用的,但没有在使用该前缀导入的任何库中定义。(在[flatter_app_service]lib/main.dart:136处未定义的_prefixed_name)设置全局变量不是一个好做法。您可以通过类构造函数或使用状态管理的形式发送它们(ScopedModel、Redux、BLoC等)这让你可以轻松地在整个应用程序中共享价值,而无需太多混乱。变量名称不应包括u,因为它会使dart中的值变为私有,请尝试删除下划线@AlexAliI我猜这些小部件是独立的,但如果这是首选方式,请尝试一下!我猜这些小部件是独立的,但如果这是首选方式,请给出这是一次机会!