将参数传递给另一个组件-null

时间:2020-06-13 16:55:46

标签: flutter dart

按照我发送的摘录和我收到的其他参数进行摘录。但它为空

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);
        }

//第二个屏幕 小部件build(BuildContext context){

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

2 个答案:

答案 0 :(得分:0)

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

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

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);
}

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

答案 1 :(得分:0)

您需要发送地图而非物业

     setState(() {
  args = ModalRoute.of(context).settings.arguments as Map<String, Object>;

});
print('args');
print(args["email"]); //value is email's value

当您尝试获取值时,像这样将参数强制转换为String Object Map,并使用属性键获取数据

func _physics_process(delta):
   if is_dead == false:
      # all the gravity code is in here.