【问题标题】:pass parameter to another component - null将参数传递给另一个组件 - null
【发布时间】:2020-06-13 16:55:46
【问题描述】:

按照我发送的摘录和我收到参数的另一个摘录。但它即将为空

Usuario usuario = Usuario();
        usuario.email = email;
        usuario.senha = senha;

        //cadastrar ou logar
        if( _cadastrar ){
          print(usuario);
          Navigator.of(context).pushNamed('/termos-aceite', arguments: usuario.email);
        }else{
          //Logar
          _logarUsuario(usuario);
        }

// 第二屏 小部件构建(BuildContext 上下文){

    setState(() {
      args = ModalRoute.of(context).settings.arguments;
    });
    print('args');
    print(args); //value is null

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您需要发送地图而不是属性

    Usuario usuario = Usuario();
        usuario.email = email;
        usuario.senha = senha;
    
        //cadastrar ou logar
        if( _cadastrar ){
          print(usuario);
          Navigator.of(context).pushNamed('/termos-aceite', arguments: {"email":usuario.email});
        }else{
          //Logar
          _logarUsuario(usuario);
        }
    

    当您尝试获取值时,将参数转换为 String 对象的 Map,并使用属性键获取数据

         setState(() {
      args = ModalRoute.of(context).settings.arguments as Map<String, Object>;
    
    });
    print('args');
    print(args["email"]); //value is email's value
    

    【讨论】:

      【解决方案2】:

      有一种更好的通用方法可以做到这一点,我建议你这样做。

      所以我们可以通过使用 Constructor 方法来做到这一点,该方法接受一些带有值的变量,在你的情况下这是页面,即/termos-aceite。现在将此/termos-aceite 的页面名称设为Termos。让我们看看这是如何工作的。

      class Termos extends StatelessWidget {
        // Declare a field that holds the Todo.
        final dynamic email;
      
        // In the constructor, require a Todo.
        DetailScreen({Key key, @required this.email}) : super(key: key);
      
        //To use that, you can simply do
        print(args);
        setState(() {
          args = this.email;
        });
      }
      

      为了将其传递给页面,在本例中为Termos,我们仅使用您的代码来完成此操作

      Usuario usuario = Usuario();
      usuario.email = email;
      usuario.senha = senha;
      
      //cadastrar ou logar
      if( _cadastrar ){
         print(usuario);
         // Read about MaterialPageRoute() here
         // https://api.flutter.dev/flutter/material/MaterialPageRoute-class.html
         Navigator.push(context, MaterialPageRoute(
           builder: (context) => Termos(email: email)
         ));
      }else{
        //Logar
        _logarUsuario(usuario);
      }
      

      我希望你能得到你想要的。另外,请继续在谷歌上搜索有关颤振的这些内容。这很酷,您会在文档本身中找到很棒的东西。无论如何,我为您列出了一些链接,希望这对您来说是一个学习经验。继续学习

      【讨论】:

      • 感谢您的帮助,但 @override Widget build(BuildContext context) { var args = ''; setState(() { args = this.email; }); this.email 无法访问
      • @usr123123 答案已编辑,如果主要任务是传递您存储在usuario.email 中的电子邮件变量,只需将email 传递给它,然后在下一页中获取值.请尝试更新答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2012-09-25
      • 2020-10-03
      相关资源
      最近更新 更多