Слайдер зависает, если много предметов для скольжения - PullRequest
1 голос
/ 21 октября 2019

У меня есть горизонтальный список около 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) {
                                              },
                                            )```

1 Ответ

1 голос
/ 21 октября 2019

Вот несколько советов, как сделать это быстрее:

  • Вместо использования min: 0.0 и max: 10000.0 вы можете оставить значения по умолчанию для работы от 0.0 до 1.0, а затем умножитьvalue * 10000.0, таким образом Slider не должен вычислять позицию для значений от 0.0 до 10000.0, но от 0.0 до 1.0.
  • Было бы хорошо, еслиsetState() просто обновляет Slider, а не все дерево виджетов. Для этого вы можете поместить Slider в StatefulWidget или обернуть Slider StatefulBuilder.
  • Запуск приложения в режиме release будет быстрее, чем в *Режим 1025 *.

Вот краткий пример использования StatefulBuilder:

StatefulBuilder(
  builder: (context, setState) {
    return Slider(
      value: value,
      onChanged: (value) {
        _scrollController.position.jumpTo(value * 10000);
        setState(() {
          this.value = value;
        });
      },
    );
  },
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...