【问题标题】:Slider is hanging if lot of items to slide如果有很多要滑动的项目,滑块会挂起
【发布时间】:2020-02-17 06:14:54
【问题描述】:

我有大约 10000 个项目的水平列表,并且滚动我使用的是颤动滑块,但它根本不平滑。我认为设置换向阀的状态不是正确的方法。

                                            Slider(
                                              key: ValueKey('slider'),
                                              activeColor: Colors.blue,
                                              inactiveColor: Colors.white,
                                              min: 0.0,
                                              max: scrollController.hasClients
                                                  ? scrollController
                                                      .position.maxScrollExtent
                                                  : 10000.0,
                                              value: value,
                                              onChanged: (double value) {
                                                scrollController.position
                                                    .jumpTo(value);
                                                if (mounted)
                                                  setState(
                                                      () => this.value = value);
                                              },
                                              onChangeStart: (double value) {},
                                              onChangeEnd: (double value) {
                                              },
                                            )```

【问题讨论】:

    标签: flutter dart flutter-widget


    【解决方案1】:

    以下是一些加快速度的提示:

    • 您可以不使用 min: 0.0max: 10000.0 默认值从0.01.0 然后乘以 value * 10000.0,这样Slider就不用计算了 从0.010000.0 但从0.0 到的值的位置 1.0
    • 如果setState() 只是更新Slider 就好了 而不是整个小部件树。为此,您可以将 SliderStatefulWidget 中,或者您可以将 Slider 包装为 StatefulBuilder
    • release 模式下运行应用程序将比在 debug 模式。

    这是一个简单的例子,使用StatefulBuilder

    StatefulBuilder(
      builder: (context, setState) {
        return Slider(
          value: value,
          onChanged: (value) {
            _scrollController.position.jumpTo(value * 10000);
            setState(() {
              this.value = value;
            });
          },
        );
      },
    )
    

    【讨论】:

    • 但我收到错误 ==>I/flutter (18521): 'package:flutter/src/material/slider.dart': 断言失败: line 132 pos 15: 'value >= min && value
    • 确保设置 this.value = value;而不是值 * 10000
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多