如何在另一个飞镖文件中访问滚动控制器?



我正在尝试实现一个功能,以便在滚动SingleChildScrollView时隐藏BottomNavigationBar,但是我的SingleChildScrollView小部件与BottomNavigationBar不在同一个dart文件中。

我创建了ScrollController和一个包含一些页面的数组 ->我的可滚动列表在TasksList()

late ScrollController scrollController;
//more logic
@override
void initState() {
super.initState();
scrollController = ScrollController();
}
@override
void dispose() {
scrollController.dispose();
super.dispose();
}

final screens = [
TasksList(),
AddTodoPage(),
AddTodoPage(), ];

对于底部导航栏,我使用了一个名为CurvedNavigationBar的小部件,它基本上是默认导航栏的样式。每次我点击一个项目时,索引都会计数并更改屏幕:

bottomNavigationBar: CurvedNavigationBar(
key: navigationkey,
color: LightColors.kYellowPrimary,
buttonBackgroundColor: LightColors.kDarkerYellow,
backgroundColor: Colors.transparent,
height: 60,
animationCurve: Curves.easeInOut,
animationDuration: const Duration(milliseconds: 450),
index: index,
items: items,
onTap: (index) => setState(() {
this.index = index;
}),
),
body: screens[index],

任务列表包含一个包含我的列表基架

Widget build(BuildContext context) {
return Scaffold(
//List

我将如何在包含列表的文件中访问在带有底部导航栏的文件中创建的滚动控制器?有没有办法全局访问滚动控制器?

您的问题不包含足够的信息,但我可以给出一些指示:

  • 首先,您可以在不通过PrimaryScrollController.of(context)指定的情况下获取 scrollController ,这是屏幕上根 scrollViews 的默认值,或者当 scrollView 将标志主要设置为true时。

  • 其次,您可以在树上创建高于 scrollView(在您的情况下为 SingleChildScrollView)和导航栏的 scrollController ,在插入导航栏的小部件中将侦听器添加到其位置并基于它插入/删除导航栏。

  • 第三,您可以使用NotificationListener<ScrollNotification>小部件收听滚动通知,只需将其插入树中并根据通知内容触发状态更改即可。

  • 第四,您可以使用Scrollable.of(context).position访问当前滚动位置,并根据其值重建树。

我已经给出了指示,希望它有助于构建您的 UI 和处理可滚动小部件的方法的体验。

最新更新