Flutter 颤振:带有嵌套滚动视图和滑动条的选项卡

Flutter 颤振:带有嵌套滚动视图和滑动条的选项卡,flutter,Flutter,简而言之,我希望有这样的行为(滚动到底部时,appBar隐藏的多个选项卡,滚动到顶部时,appBar显示),并且我希望保留每个选项卡的滚动位置: 我已经有了所有选项卡,每个选项卡都有一个scrollController,但是如果我理解得很好,为了实现SliverAppBar,我只需要有一个滚动控制器,用于主嵌套ScrollView,对吗 而ScrollController只能连接到一个ScrollView。那么,如何管理ScrollView()以保留滚动位置呢 我看到了属性ScrollCont

简而言之,我希望有这样的行为(滚动到底部时,appBar隐藏的多个选项卡,滚动到顶部时,appBar显示),并且我希望保留每个选项卡的滚动位置:

我已经有了所有选项卡,每个选项卡都有一个scrollController,但是如果我理解得很好,为了实现
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)),
            ],
          ),
        ),
      )
    );
  }
}