Flutter:页面重建不合逻辑

标签 flutter dart

我的 flutter 应用程序中有一个页面,该页面仅用于显示我的应用程序的 Logo ,然后转到另一个页面。出于某种原因,即使它被调用一次,我也无法弄清楚它会多次运行构建方法。
这是代码:

class LoadingPage extends StatelessWidget {
  int i = 0;
  @override
  Widget build(BuildContext context) {
    i++;
    print(i);
    test(context);
    test2();
    return Scaffold(
      backgroundColor: Colors.lightBlue,
      body: SafeArea(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Image.asset("assets/images/logo.png"),
            SizedBox(
              height: Responsive.deviceHeight(context) * 0.05,
            ),
            LoadingRotating.square(
              backgroundColor: Colors.lightBlue,
              borderColor: Colors.white,
              borderSize: 5.0,
            ),
          ],
        ),
      ),
    );
  }

  void test(BuildContext context) {
    Future.delayed(const Duration(seconds: 5), () {
      print("H");
      Navigator.of(context).pushAndRemoveUntil(
        MaterialPageRoute(builder: (context) => ProductListPage()),
        (Route<dynamic> route) => false,
      );
    });
  }

  void test2(){
    print("H2");
  }
}
我希望打印以下内容:
1
H2
H
但结果是:
I/flutter (20904): 1
I/flutter (20904): H2
I/flutter (20904): 1
I/flutter (20904): H2
I/flutter (20904): H
I/flutter (20904): H
有人可以解释这种行为吗?
谢谢

最佳答案

你应该对待build方法,好像它会被多次调用。不能保证它只会被调用一次。查看此答案以获取更多详细信息:How to deal with unwanted widget build?

关于Flutter:页面重建不合逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62851317/

相关文章:

flutter : Difference between InkWell and InkResponse?

android - flutter : How can I add divider between each List Item in my code?

flutter - 使用provider禁用按钮的方法

dart - itemcount 中的 snapshot.data.length 不起作用 : "The getter ' length' was called on null"

flutter - Dart/Flutter super (key:key)示例

api - flutter 响应始终相同

json - flutter 文本编辑 Controller listview.builder

flutter - 如何从子无状态小部件设置有状态小部件的状态

android - Flutter:无状态小组件中的 “Looking up a deactivated widget'祖先是不安全的

Flutter 如何处理异步/等待中的错误