Как показать виджет только когда пользователь прокручивает?

Я также получил эту ужасную ошибку и нашел решение для этого ...

  1. Щелкните правой кнопкой мыши по имени решения
  2. Нажмите «Чистое решение»
  3. ]
  4. Перезапустить Visual Studio
  5. Перейти к проекту Свойства >> Сборка
  6. Изменить конфигурацию для выпуска
  7. Начать отладку (F5)
blockquote>

1), 2)

4), 5)

Надеюсь, это вам тоже поможет.

1
задан Miguel Ruivo 26 February 2019 в 23:43
поделиться

1 ответ

Вы правы, в GestureDetector нет событий onScroll, но есть onVerticalDrag события, которые в основном совпадают с другим именем.

Но для этого вам на самом деле не нужен GestureDetector. Вы можете прослушивать изменения прокрутки, обрабатывая уведомления ScrollStartNotification и ScrollEndNotification с помощью NotificationListener, поскольку вы уже используете SingleChildScrollView.

Я создал небольшой пример, чтобы показать вам, что будет производить следующее: При прокрутке флаг для отображения кнопки устанавливается на true, а в конце он сбрасывается обратно на false и восстанавливает дерево без кнопки через 5 секунд, если между ними больше нет уведомлений о прокрутке (вот почему вы не устанавливаете _buttonShowing = false после завершения Future, но до этого.

example

bool _buttonShowing = false;

  @override
  Widget build(BuildContext context) {
    List<Widget> columnWidgets = List<Widget>.filled(100, Container(height: 100.0, child: Placeholder()));

    if (_buttonShowing) {
      columnWidgets = List.from(columnWidgets)
        ..insert(
            3, Visibility(child: RaisedButton(child: Text('Press me'), onPressed: () {}), visible: _buttonShowing));
    }

    return Scaffold(
      appBar: AppBar(),
      body: NotificationListener<ScrollNotification>(
        onNotification: (scrollNotification) {
          if (scrollNotification is ScrollStartNotification) {
            if (!_buttonShowing) {
              setState(() => _buttonShowing = true);
            }
          } else if (scrollNotification is ScrollEndNotification) {
            if (_buttonShowing) {
              _buttonShowing = false;
              Future.delayed(Duration(seconds: 5)).then((_) => setState(() {}));
            }
          }
        },
        child: SingleChildScrollView(
          child: Column(crossAxisAlignment: CrossAxisAlignment.stretch, children: columnWidgets),
        ),
      ),
    );
  }
0
ответ дан Miguel Ruivo 26 February 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: