#flutter #dart #flutter-layout
#flutter #dart #flutter-layout
Вопрос:
Я пытаюсь добавить границу к контейнеру, который начинает прокручиваться вниз, и удалить его, если прокрутить обратно наверх.
Я слушаю контроллер прокрутки и устанавливаю состояние с помощью setState(), однако похоже, что весь виджет перестраивается, вы можете увидеть сбой.
Может кто-нибудь помочь, как это исправить? Я добавил комментарии к border и listview для ярлыка:
класс:
class __ExampleAlertDialogState extends State<_ExampleAlertDialog> {
ScrollController _scrollController = ScrollController();
var scrollPos = false;
@override
void initState() {
super.initState();
_scrollController.addListener(_onScroll);
}
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(vertical: 50, horizontal: 20),
child: Expanded(
child: ClipRRect(
borderRadius: BorderRadius.circular(5),
child: Material(
child: Column(
children: [
Container(
decoration: BoxDecoration(
// Adding and removing the border here
border: Border(
bottom: scrollPos == true
? BorderSide(
color: Theme.of(context).dividerColor)
: BorderSide.none)),
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Icon(Icons.arrow_back), Icon(Icons.refresh)],
),
),
Expanded(
// This is the scrollable ListView
child: ListView.builder(
controller: _scrollController,
...
))
],
),
),
),
),
);
}
void _onScroll() {
final currentScroll = _scrollController.position.pixels;
if (currentScroll > 2 amp;amp; scrollPos == false) {
setState(() {
scrollPos = true;
});
} else if(currentScroll < 2 amp;amp; scrollPos == true) {
setState(() {
scrollPos = false;
});
}
}
}
Комментарии:
1. Вы можете перенаправить виджет, который нужно создавать отдельно в классе, или использовать решение для управления состоянием (например, поставщик).
2. надеялся, что это будет проще, но позвольте мне попробовать @MohammedAlfateh
3. именно так это делается в flutter, вы преобразуете его в отдельный автономный виджет с отслеживанием состояния