Я также получил эту ужасную ошибку и нашел решение для этого ...
blockquote>
- Щелкните правой кнопкой мыши по имени решения
- Нажмите «Чистое решение»
]- Перезапустить Visual Studio
- Перейти к проекту Свойства >> Сборка
- Изменить конфигурацию для выпуска
- Начать отладку (F5)
1), 2)
4), 5)
Надеюсь, это вам тоже поможет.
Вы правы, в GestureDetector
нет событий onScroll
, но есть onVerticalDrag
события, которые в основном совпадают с другим именем.
Но для этого вам на самом деле не нужен GestureDetector
. Вы можете прослушивать изменения прокрутки, обрабатывая уведомления ScrollStartNotification
и ScrollEndNotification
с помощью NotificationListener
, поскольку вы уже используете SingleChildScrollView
.
Я создал небольшой пример, чтобы показать вам, что будет производить следующее: При прокрутке флаг для отображения кнопки устанавливается на true
, а в конце он сбрасывается обратно на false
и восстанавливает дерево без кнопки через 5 секунд, если между ними больше нет уведомлений о прокрутке (вот почему вы не устанавливаете _buttonShowing = false
после завершения Future
, но до этого.
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),
),
),
);
}