Flutter 颤振:带有嵌套滚动视图和滑动条的选项卡
简而言之,我希望有这样的行为(滚动到底部时,appBar隐藏的多个选项卡,滚动到顶部时,appBar显示),并且我希望保留每个选项卡的滚动位置: 我已经有了所有选项卡,每个选项卡都有一个scrollController,但是如果我理解得很好,为了实现Flutter 颤振:带有嵌套滚动视图和滑动条的选项卡,flutter,Flutter,简而言之,我希望有这样的行为(滚动到底部时,appBar隐藏的多个选项卡,滚动到顶部时,appBar显示),并且我希望保留每个选项卡的滚动位置: 我已经有了所有选项卡,每个选项卡都有一个scrollController,但是如果我理解得很好,为了实现SliverAppBar,我只需要有一个滚动控制器,用于主嵌套ScrollView,对吗 而ScrollController只能连接到一个ScrollView。那么,如何管理ScrollView()以保留滚动位置呢 我看到了属性ScrollCont
SliverAppBar
,我只需要有一个滚动控制器,用于主嵌套ScrollView
,对吗
而ScrollController
只能连接到一个ScrollView
。那么,如何管理ScrollView()以保留滚动位置呢
我看到了属性ScrollController.positions
和PrimaryScrollController
类,但我不知道这些是否是解决方案
如果有人有一个想法:)一个简单的解决方案就是这个软件包 下面是我如何实现您想要的滚动行为(当滚动到底部时,多个选项卡的appBar隐藏,当我滚动到顶部时,
appBar
显示):
(它没有抛光,但你可以使用它)
结果:
我在嵌套的ScrollView
中使用了一个带有SliverAppBar
的支架,通过这些支架,您可以得到两个单独的AppBar
,并且SliverAppBar
在向上滚动时隐藏。
要保留每个选项卡的滚动位置,我将使用3个独立的
ScrollController
。如果您在这些方面需要更多帮助,请写一条评论;) 一个简单的解决方案就是这个包
下面是我如何实现您想要的滚动行为(当滚动到底部时,多个选项卡的appBar隐藏,当我滚动到顶部时,appBar
显示):
(它没有抛光,但你可以使用它)
结果:
我在嵌套的ScrollView
中使用了一个带有SliverAppBar
的支架,通过这些支架,您可以得到两个单独的AppBar
,并且SliverAppBar
在向上滚动时隐藏。
要保留每个选项卡的滚动位置,我将使用3个独立的
ScrollController
。如果您在这些方面需要更多帮助,请写一条评论;) 另外,请提供一些代码,这样我们就不需要从头开始来帮助您也请提供一些代码,这样我们就不需要从头开始来帮助您非常感谢,这正是我想要的,您的示例非常适合简单的选项卡内容。但只要我用滚动条填充标签,AppBar就不再隐藏了。我试过在我的选项卡上使用或不使用独立的ScrollController,但没有成功(但在所有情况下,当用户滚动到底部时,我需要ScrollController到我的“LoadMore”功能)是的,我在为您编写此示例后亲自尝试过,Github上已经有一个开放问题,现在最好使用我上面链接的软件包。您是否尝试使用相同的scrollcontroller提供NestedScrollView和Tab?唯一的缺点是每个scrollposition不会保存在TabSwitch上谢谢您的评论。我只是尝试对NestedScrollView和我的ScrollView使用相同的ScrollController。为了让它工作,我们需要在一个没有足够元素填充页面(没有滚动)的选项卡上。今晚我将检查链接包,非常感谢:)欢迎您,请将答案标记为已接受,如果它对您有帮助,请非常感谢,这正是我想要的,您的示例非常适合简单的选项卡内容。但只要我用滚动条填充标签,AppBar就不再隐藏了。我试过在我的选项卡上使用或不使用独立的ScrollController,但没有成功(但在所有情况下,当用户滚动到底部时,我需要ScrollController到我的“LoadMore”功能)是的,我在为您编写此示例后亲自尝试过,Github上已经有一个开放问题,现在最好使用我上面链接的软件包。您是否尝试使用相同的scrollcontroller提供NestedScrollView和Tab?唯一的缺点是每个scrollposition不会保存在TabSwitch上谢谢您的评论。我只是尝试对NestedScrollView和我的ScrollView使用相同的ScrollController。为了让它工作,我们需要在一个没有足够元素填充页面(没有滚动)的选项卡上。今晚我将查看链接包,非常感谢:)欢迎光临,如果对您有帮助,请将答案标记为已接受
import 'package:flutter/material.dart';
class Test extends StatelessWidget {
@override
Widget build(BuildContext context) {
return NestedScrollView(
headerSliverBuilder: (context, isScrolled) {
return [SliverAppBar(
leading: IconButton(
icon: Icon(Icons.menu),
onPressed: () {},
),
title: Text('Pets'),
centerTitle: false,
actions: [
IconButton(
icon: Icon(Icons.share),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.search),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.pets),
onPressed: () {},
),
],
)];
},
body: DefaultTabController(
length: 3,
child: Scaffold(
appBar: TabBar(
labelColor: Colors.black,
tabs: [
Tab(text: 'Dogs',),
Tab(text: 'Cats'),
Tab(text: 'Birds'),
],
),
body: TabBarView(
children: [
Center(child: Icon(Icons.pets, color: Colors.blue)),
Center(child: Icon(Icons.pets, color: Colors.green)),
Center(child: Icon(Icons.pets, color: Colors.red)),
],
),
),
)
);
}
}