【问题标题】:Stateful widget in Scaffold's bodyScaffold 主体中的有状态小部件
【发布时间】:2019-03-08 23:38:52
【问题描述】:

我不明白为什么在颤振中不可能有这样的结构:

//...
Scaffold(
  //...
  body: myPage(dataList[index])
)
//...

其中 myPage 是一个扩展 statefulWidget 并返回 ListView 的类。它需要一个存储在数组中的数据参数。我想在更改索引时更改脚手架的主体,例如使用导航抽屉。

我注意到:

  • 如果 myPage 扩展 statelessWidget 一切正常,
  • 如果我有扩展 statefulWidget 的不同页面类都可以正常工作,
  • 但如果我的 myPage 需要数据来更改内容,但没有发生任何变化,它不会改变,它会停留在第一页上

是的,每当我更改索引时,我都会使用 setState 方法来刷新布局。

这是一个错误还是我错过了什么?如果它不是一个错误,我能做些什么作为解决方法?提前致谢

更新:

我发布了另一个更简单的页面的代码,没有什么奇怪的地方有这个问题(我知道在这个页面中我可以使用 statelessWidget,但它应该可以工作):

class FirstFragment extends StatefulWidget {
  String data;
  FirstFragment(this.data);

  @override
  _FirstFragment createState() => new _FirstFragment(data);

}

class _FirstFragment extends State<FirstFragment>{
  String data;
  _FirstFragment(this.data);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Center(
      child: new Text(data),
    );
  }
}

【问题讨论】:

  • 你能把myPage的代码贴出来吗?
  • myPage 或其父级有问题。您要么忘记了 setstate、didUpdateWidget,要么无法使用不变性
  • 谢谢,我更新了帖子,告诉我你的想法
  • 您正在更改 index 变量,该变量位于包含 Scaffold 的类中(应该是有状态的)。而且myPage 没有刷新.. 我说的对吗?
  • 是的,这就是问题所在,我用@Amarok 回答解决了

标签: android dart flutter statefulwidget


【解决方案1】:

您不应该将参数从父窗口小部件类传递到其状态 - 您可以通过“窗口小部件”指令访问它们。另外,请听 Lint - 所有实例都应该是主类中的最终实例。

class FirstFragment extends StatefulWidget {
  final String data;
  FirstFragment(this.data);

  @override
  _FirstFragment createState() => new _FirstFragment();

}

class _FirstFragment extends State<FirstFragment>{


  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Center(
      child: new Text(widget.data),
    );
  }
}

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2021-06-11
    • 2019-11-25
    • 2020-10-19
    • 2018-10-10
    • 2021-02-16
    • 2019-06-10
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多