#dart #flutter
#dart #флаттер
Вопрос:
У меня есть два просмотра прокрутки. Один вложенный, у которого есть панель SliverAppBar, а затем один CHILDSCROLLVIEW для остального моего содержимого (как показано в коде ниже). Затем у меня есть контроллер, который управляет непрозрачностью моих плавающих кнопок действий при прокрутке вверх и вниз.
Однако контроллер работает, только если он у меня есть в NestedScroll, и тогда он работает только при прокрутке фактического заголовка, а не при прокрутке остального содержимого.
Если я добавлю один и тот же контроллер в SingleChildScrollView, это заставит два вида прокручиваться отдельно. Есть идеи по исправлению?
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
resizeToAvoidBottomPadding: false,
body: NestedScrollView(
controller: _controller,
headerSliverBuilder: (BuildContext context, bool innerBoxScrolled){
return <Widget>[
SliverAppBar(
},
body:SingleChildScrollView(
),
Я сократил код, чтобы показывать только два вида.
Это метод, с помощью которого я изменяю непрозрачность базы данных:
void _scrollListener() {
if(_controller.position.userScrollDirection == ScrollDirection.reverse){
setState(() {
_hideFAB = true;
});
}
if(_controller.position.userScrollDirection == ScrollDirection.forward){
setState((){
_hideFAB = false;
});
}
}
Вот GIF, показывающий, что FAB изменяется только при прокрутке в панели приложений Sliver: GIPHY
Ответ №1:
Используйте ListView вместо SingleChildScrollView
, поместите остальное содержимое в ListView
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
resizeToAvoidBottomPadding: false,
body: NestedScrollView(
controller: _controller,
headerSliverBuilder: (BuildContext context, bool innerBoxScrolled){
return <Widget>[
SliverAppBar(
},
body:ListView(
),
Комментарии:
1. Попытался перейти на ListView, однако это не имело никакого значения. По-прежнему нет изменений в непрозрачности базы данных при прокрутке дальше, чем панель SliverAppBar.
2. Я бы предположил, что мне нужно добавить еще один контроллер или что-то в ListView, однако, если я попытаюсь это сделать, мне придется прокручивать SliverHeader и Listview отдельно
3. Исправлено с помощью Sliverlist вместо этого. Но спасибо за ответ.
Ответ №2:
Я исправил свою проблему, используя CustomScrollView
вместо NestedScrollView
, а затем заменил свой SingleChildScrollView
на SliverList
.