【问题标题】:How to control time delay between two sections in Flutter?Flutter中如何控制两个部分之间的时间延迟?
【发布时间】:2019-09-13 02:06:13
【问题描述】:

我正在制作一个包含两个部分的应用程序。一个是 PageView 部分,您可以通过滑动动作更改页面。另一个显示您更改页面后现在所在的页面。但是有时间延迟。当我将第一页更改为第二页时,下部的更改会延迟约 0.5 秒。

为了找到任何原因,我将 index 声明为 double(现在重新声明为 int)。我发现当我在第一部分 PageView 中更改页面时,下部显示小数变化(例如,不是 1 -> 2,而是 1.0 -> 1.xxx -> 2)。 我还尝试了 Switch-case 语句。在此语句中,默认为返回 Text('nothing')。而且我发现在改的时候,下半部分什么都没有显示。

    import 'package:flutter/material.dart';

    class HomePage extends StatefulWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }

    class _HomePageState extends State<HomePage> {
      static final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
      final controller = PageController(initialPage: 0);
      var scrollDirection = Axis.horizontal;
      var actionIcon = Icons.swap_vert;
      int index;

      @override
      void initState() {
        super.initState();
        index = 0;
        controller.addListener(() {
          setState(() {
            index = controller.page.toInt();
          });
        });
      }


      @override
      Widget build(BuildContext context) {
        return Scaffold(
          key: _scaffoldKey,
          appBar: AppBar(
            centerTitle: true,
            title: Text('it\'s a drill for page view'),
          ),
          body: _buildBody(),
        );
      }

      Widget _buildBody() {
        return SafeArea(
          child: Column(
            children: <Widget>[
              Expanded(
                child: PageView.builder(
                  controller: controller,
                  itemCount: 5,
                  itemBuilder: (context, index) {
                    return Text('it is $index');
                  },
                )
                ),
              Expanded(
                child: FittedBox(
                  fit: BoxFit.fitWidth,
                  child: Container(
                    color: Colors.blue,
                    child: _showContent()
                  ),
                ),
              )
            ],
          ),
      );
      }

      Widget _showContent() {
        switch (index) {
          case 0: return Text('One');
          break;
          case 1: return Text('Two');
          break;
          case 2: return Text('Three');
          break;
          case 3: return Text('Four');
          break;
          case 4: return Text('Five');
          break;
          default: return Text('Nothing');
        }
      }
    }

我希望两节不会有任何延误。有什么解决办法吗? 请帮我。我是一个真正的初学者。所以也许我请你原谅。但我从不让这个问题无人问津。非常感谢。

【问题讨论】:

    标签: flutter dart delay


    【解决方案1】:
     Timer(
        Duration(seconds: 3),
            (){ //return YOU CAN PUT YOUR STUFF HERE.});
    

    【讨论】:

    • 嘿亲爱的你想做动画类延迟吗?还是别的什么?
    • 不,实际上我不想耽搁。当我在PageView中更改页面时,下部分会发生变化,这将是完美的。
    【解决方案2】:

    可能在PageController监听器中对当前页面的值进行四舍五入比较适合你。

    这是修改后的监听代码:

    controller.addListener(() {
      setState(() {
        index = controller.page.round();
      });
    });
    

    【讨论】:

    • 我已经尝试按照你说的做,但是没有用。但是由于另一个人对我以前的问题的解决方案,我终于解决了这个问题。感谢您的帮助!