【问题标题】:flutter statfulWidget refresh twiceflutter stateful Widget刷新两次
【发布时间】:2019-09-23 10:36:56
【问题描述】:
return MaterialApp(
      home: Scaffold(
        body: RefreshIndicator(
          key: _globalKey,
          onRefresh: refresh,
          child: Sub(),
        ),
      ),
    );

有简单的refreshindicator和子Widget

class Sub extends StatefulWidget {
  @override
  _SubState createState() => _SubState();
}

class _SubState extends State<Sub> {
  @override
  Widget build(BuildContext context) {
    print('sub');
    return Container(
      color: Colors.amber,
      child: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            Container(
              height: 300,
              color: Colors.blue,
            ),
            Container(
              height: 300,
              color: Colors.red,
            ),
            Container(
              height: 300,
              color: Colors.green,
            ),
          ],
        ),
      ),
    );
  }
}

Sub Widget 在构建时打印“sub” 关键是当我触摸或只是轻微拖动页面(没有足够的调用 refreshindicator)子小部件被重建两次。我不知道为什么,我不知道我该怎么做。 (statelesswidget 可以解决这个问题,但我需要使用 statefulwidget)

【问题讨论】:

  • 如果只是静态数据,为什么还要使用 statefulwidget?
  • 现在我正在使用 streambuilder 所以我需要使用 statefulwidget
  • 我没有看到 initState 但我猜你在其中调用了 refresh 。 RefreshIndicator 不需要它
  • 但我想为用户界面移动页面
  • RefreshIndicator 自己调用刷新

标签: flutter


【解决方案1】:

这取决于你想在不重新构建的情况下实现什么,但我使用的替代方案是用于颤振图表。在 build()intiState() 之外的某个地方创建一个对象 Sub sub1=Sub(); ,然后这个小部件将不会再次重建并且值将相同。

【讨论】:

  • 我在父 Widget 的 initState() 中添加了 Sub sub1 = Sub() 但结果是一样的。
  • 您是否在顶级类中添加了 sub1,例如 return MaterialApp( home: Scaffold( body: RefreshIndicator( key: _globalKey, onRefresh: refresh, child: sub1, ), );
猜你喜欢
  • 2019-07-26
  • 2021-09-26
  • 1970-01-01
  • 2020-02-27
  • 2018-12-06
  • 1970-01-01
  • 2018-01-28
  • 2019-07-08
  • 2020-06-29
相关资源
最近更新 更多