在 Flutter 中将数据从一个屏幕传递到另一个屏幕是 null

Posted

技术标签:

【中文标题】在 Flutter 中将数据从一个屏幕传递到另一个屏幕是 null【英文标题】:Passing data from one screen to other screen in Flutter is null 【发布时间】:2019-10-27 23:29:25 【问题描述】:

我有两个屏幕,从一个我想将标题字符串传递到另一个屏幕。此标题可以登录或注册,在第一个屏幕中预先确定。我尝试过的:

Container(
  child: RaisedGradientButton(
    onPressed: () 
      print('Login clicked');
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => 
            MyApp(
              formMode: FormMode.LOGIN, 
              screenTitle: "Login",
            )
        ),
      );
    , 
    textButton: "Login", 
    height: 55, 
    width : 200.0, 
    buttonTitleColor: Colors.white, 
    buttonBackgroundColor: Colors.red,
  )
),

下面是带有初始化步骤的第二个屏幕:

enum FormMode  LOGIN, SIGNUP 

void main() 
  runApp(
    MaterialApp(
      home: StatelessLanding(),
    ),
  );


class MyApp extends StatelessWidget
  // In the constructor, require a Todo
  final FormMode formMode;
  final String screenTitle;

  MyApp(Key key, @required this.formMode, @required this.screenTitle) 
    : super(key: key);

  @override
  Widget build(BuildContext context)
    return MyAppStateFul();
  


class _MyAppStateFulState extends State<MyAppStateFul> 
  FormMode formMode;
  String screenTitle;

  _MyAppStateFulState(FormMode formMode, String screenTitle) 
    this.formMode = formMode;
    this.screenTitle = screenTitle;
  

这是我使用屏幕标题的地方:

@override
Widget build(BuildContext context) 
  var screenTitle = "Login";
  print('screen title is $widget.screenTitle');
  print('screen title is $this.screenTitle');
  print('screen title is $screenTitle');

请高手帮帮我。 谢谢

【问题讨论】:

我觉得本页的答案可以帮到你***.com/questions/50818770/… 我觉得这个页面上的答案***.com/questions/50818770/…可以帮到你 【参考方案1】:

代码有点难以理解,但您似乎忘记将 screenTitleMyApp 类传递给 MyAppStateful 小部件。

在您上面列出的代码中,您有以下无状态小部件:

class MyApp extends StatelessWidget
  // In the constructor, require a Todo
  final FormMode formMode;
  final String screenTitle;

  MyApp(Key key, @required this.formMode, @required      this.screenTitle) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return MyAppStateFul();
  

在我看来,您似乎必须将 screenTitle 传递给 MyAppStateFul 构造函数才能使其在您的有状态小部件中可用,如下所示:

  @override
  Widget build(BuildContext context) 
    return MyAppStateFul(screenTitle);
  

当然,这还需要您更改 MyAppStateFulconstructor 以接受 screenTitle 参数(如果它尚未接受)。

我认为这应该可以为您解决问题。

【讨论】:

以上是关于在 Flutter 中将数据从一个屏幕传递到另一个屏幕是 null的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中将列表数据从一个屏幕传递到另一个屏幕(StatefulWidget)

如何在颤动中将数据从一个小部件传递到另一个小部件?

将数据从另一个类传递到另一个类 onPressed Flutter

将模型从一个屏幕传递到另一个 FLUTTER 的更好方法

如何将道具从一个屏幕传递到另一个屏幕并显示? [复制]

使用 Flutter Provider 将数据传递到另一个屏幕