Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 滚动时SilverApp隐藏不工作_Flutter_Dart_Appbar - Fatal编程技术网

Flutter 滚动时SilverApp隐藏不工作

Flutter 滚动时SilverApp隐藏不工作,flutter,dart,appbar,Flutter,Dart,Appbar,向下滚动时,我们希望隐藏appBar,只显示tabBar,与此完全相同 然而,在我们的情况下,它不起作用。只有当我们单击并滚动appBar时,它才会隐藏 main.dart @override Widget build(BuildContext context) { return Scaffold( body: NestedScrollView( body: TabBarView( controller: _tabController,

向下滚动时,我们希望隐藏
appBar
,只显示
tabBar
,与此完全相同

然而,在我们的情况下,它不起作用。只有当我们单击并滚动
appBar
时,它才会隐藏

main.dart

 @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: NestedScrollView(
      body: TabBarView(
        controller: _tabController,
        children: <Widget>[TabA(), TabA()],
      ),
      floatHeaderSlivers: true,
      headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
        return <Widget>[
          SliverAppBar(
            title: Text("Silver App"),
            pinned: true,
            floating: true,
            forceElevated: innerBoxIsScrolled,
            bottom: TabBar(
              unselectedLabelColor: Colors.white,
              labelColor: Colors.white,
              tabs: <Widget>[
                Tab(
                  text: "Tab A",
                ),
                Tab(
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Text("Tab B"),
                      Padding(
                        padding: EdgeInsets.only(left: 15),
                      ),
                    ],
                  ),
                ),
              ],
              controller: _tabController,
              indicatorColor: Colors.white,
              indicatorSize: TabBarIndicatorSize.tab,
            ),
          ),
        ];
      },
    ));
  } 
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

class TabA extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _TabAState();
}

class _TabAState extends State<TabA> with SingleTickerProviderStateMixin {
  final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
      new GlobalKey<RefreshIndicatorState>();

  bool isLoading = false;
  ScrollController _controller;
  int page = 1;
  AnimationController controller;
  Animation<Offset> offset;

  @override
  void initState() {
    super.initState();
    _controller = ScrollController()..addListener(_scrollListener);
    controller =
        AnimationController(vsync: this, duration: Duration(milliseconds: 500));

    offset = Tween<Offset>(begin: Offset.zero, end: Offset(0.0, 2.0))
        .animate(controller);
  }

  final data = [
    'T 0',
    'T 1',
    'T 2',
      ...
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        floatingActionButton: SlideTransition(
            position: offset,
            child: FloatingActionButton(
                elevation: 0.0,
                child: Icon(Icons.add, color: Colors.white),
                onPressed: () {})),
        body: RefreshIndicator(
            key: _refreshIndicatorKey,
            onRefresh: _refresh,
            child: _showData()));
  }

  void _scrollListener() async {
    if (_controller.position.pixels == _controller.position.maxScrollExtent) {
      // display loading on bottom of listView
    }
    if (_controller.position.userScrollDirection == ScrollDirection.reverse) {
      setState(() {
        controller.forward();
      });
    }
    if (_controller.position.userScrollDirection == ScrollDirection.forward) {
      setState(() {
        controller.reverse();
      });
    }
  }

  Widget _showData() {
    return Stack(
      children: <Widget>[
        _showListView(),
        // Align(
        //   child: Row(
        //       mainAxisAlignment: MainAxisAlignment.center,
        //       children: <Widget>[
        //         Padding(
        //             padding: EdgeInsets.only(bottom: 15),
        //             child: Text("loading .....",
        //                 style: TextStyle(
        //                   color: const Color(0xff000066),
        //                   fontSize: 15,
        //                 ))),
        //         SizedBox(
        //           width: 12,
        //         ),
        //       ]),
        //   alignment: FractionalOffset.bottomCenter,
        // )
      ],
    );
  }

  Widget _showListView() {
    return ListView.builder(
        controller: _controller,
        itemCount: data.length,
        itemBuilder: (context, index) {
          return Text(data[index]);
        });
  }

  Future<void> _refresh() {
    // return data;
  }
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:嵌套滚动视图(
正文:选项卡视图(
控制器:\ tab控制器,
子项:[TabA(),TabA()],
),
浮头肝脏:是的,
headerSliverBuilder:(BuildContext上下文,boolInnerBoxIsCrolled){
返回[
滑杆(
标题:文本(“银色应用程序”),
对,,
浮动:是的,
强制提升:内包装箱为羊角形,
底部:选项卡栏(
未选择的标签颜色:Colors.white,
labelColor:Colors.white,
选项卡:[
标签(
文本:“选项卡A”,
),
标签(
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“选项卡B”),
填充物(
填充:仅限边缘设置(左:15),
),
],
),
),
],
控制器:\ tab控制器,
指示颜色:颜色。白色,
指标化:TabBarIndicatorSize.tab,
),
),
];
},
));
} 
TabA.dart

 @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: NestedScrollView(
      body: TabBarView(
        controller: _tabController,
        children: <Widget>[TabA(), TabA()],
      ),
      floatHeaderSlivers: true,
      headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
        return <Widget>[
          SliverAppBar(
            title: Text("Silver App"),
            pinned: true,
            floating: true,
            forceElevated: innerBoxIsScrolled,
            bottom: TabBar(
              unselectedLabelColor: Colors.white,
              labelColor: Colors.white,
              tabs: <Widget>[
                Tab(
                  text: "Tab A",
                ),
                Tab(
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Text("Tab B"),
                      Padding(
                        padding: EdgeInsets.only(left: 15),
                      ),
                    ],
                  ),
                ),
              ],
              controller: _tabController,
              indicatorColor: Colors.white,
              indicatorSize: TabBarIndicatorSize.tab,
            ),
          ),
        ];
      },
    ));
  } 
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

class TabA extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _TabAState();
}

class _TabAState extends State<TabA> with SingleTickerProviderStateMixin {
  final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
      new GlobalKey<RefreshIndicatorState>();

  bool isLoading = false;
  ScrollController _controller;
  int page = 1;
  AnimationController controller;
  Animation<Offset> offset;

  @override
  void initState() {
    super.initState();
    _controller = ScrollController()..addListener(_scrollListener);
    controller =
        AnimationController(vsync: this, duration: Duration(milliseconds: 500));

    offset = Tween<Offset>(begin: Offset.zero, end: Offset(0.0, 2.0))
        .animate(controller);
  }

  final data = [
    'T 0',
    'T 1',
    'T 2',
      ...
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        floatingActionButton: SlideTransition(
            position: offset,
            child: FloatingActionButton(
                elevation: 0.0,
                child: Icon(Icons.add, color: Colors.white),
                onPressed: () {})),
        body: RefreshIndicator(
            key: _refreshIndicatorKey,
            onRefresh: _refresh,
            child: _showData()));
  }

  void _scrollListener() async {
    if (_controller.position.pixels == _controller.position.maxScrollExtent) {
      // display loading on bottom of listView
    }
    if (_controller.position.userScrollDirection == ScrollDirection.reverse) {
      setState(() {
        controller.forward();
      });
    }
    if (_controller.position.userScrollDirection == ScrollDirection.forward) {
      setState(() {
        controller.reverse();
      });
    }
  }

  Widget _showData() {
    return Stack(
      children: <Widget>[
        _showListView(),
        // Align(
        //   child: Row(
        //       mainAxisAlignment: MainAxisAlignment.center,
        //       children: <Widget>[
        //         Padding(
        //             padding: EdgeInsets.only(bottom: 15),
        //             child: Text("loading .....",
        //                 style: TextStyle(
        //                   color: const Color(0xff000066),
        //                   fontSize: 15,
        //                 ))),
        //         SizedBox(
        //           width: 12,
        //         ),
        //       ]),
        //   alignment: FractionalOffset.bottomCenter,
        // )
      ],
    );
  }

  Widget _showListView() {
    return ListView.builder(
        controller: _controller,
        itemCount: data.length,
        itemBuilder: (context, index) {
          return Text(data[index]);
        });
  }

  Future<void> _refresh() {
    // return data;
  }
}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“package:flatter/rendering.dart”;
类TabA扩展了StatefulWidget{
@凌驾
State createState()=>u TabAState();
}
类_TabAState使用SingleTickerProviderStateMixin扩展状态{
最后一次全球杯=
新GlobalKey();
bool isLoading=false;
滚动控制器(u控制器),;
int page=1;
动画控制器;
动画偏移;
@凌驾
void initState(){
super.initState();
_控制器=ScrollController()…addListener(\u scrollListener);
控制器=
AnimationController(vsync:this,duration:duration(毫秒:500));
偏移=二者之间(开始:偏移.0,结束:偏移(0.0,2.0))
.制作动画(控制器);
}
最终数据=[
‘t0’,
‘t1’,
‘t2’,
...
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
浮动操作按钮:滑动转换(
位置:偏移,
子:浮动操作按钮(
标高:0.0,
子项:图标(Icons.add,颜色:Colors.white),
onPressed:({})),
正文:刷新指示器(
键:_refreshIndicatorKey,
onRefresh:\u refresh,
子项:_showData());
}
void\u scrollListener()异步{
if(_controller.position.pixels==_controller.position.maxScrollExtent){
//在listView的底部显示加载
}
if(_controller.position.userScrollDirection==ScrollDirection.reverse){
设置状态(){
controller.forward();
});
}
if(_controller.position.userScrollDirection==ScrollDirection.forward){
设置状态(){
controller.reverse();
});
}
}
Widget_showData(){
返回堆栈(
儿童:[
_showListView(),
//对齐(
//孩子:排(
//mainAxisAlignment:mainAxisAlignment.center,
//儿童:[
//填充物(
//填充:仅限边缘设置(底部:15),
//子项:文本(“加载…”,
//样式:TextStyle(
//颜色:常量颜色(0xff000066),
//尺寸:15,
//                 ))),
//大小盒子(
//宽度:12,
//         ),
//       ]),
//对齐:分馏Loffset.bottomCenter,
// )
],
);
}
小部件_showListView(){
返回ListView.builder(
控制器:_控制器,
itemCount:data.length,
itemBuilder:(上下文,索引){
返回文本(数据[索引]);
});
}
未来(更新){
//返回数据;
}
}
输出:


如您所见,
appBar
listView
滚动时不会隐藏。它只有在按下应用程序栏并滚动时才会隐藏。

这里是基于您的代码的工作代码。

关键点是“ScrollController”实例由“NestedScrollView”上下文创建
并将该“ScrollController”实例传递给TabBarView子级中的“ListView”内部

导入“包装:颤振/材料.省道”;
导入“package:flatter/rendering.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态
使用SingleTickerProviderStateMixin{
TabController\u TabController;
@凌驾
void initState(){
super.initState();
_tabController=tabController(初始索引:0,长度:2,vsync:this);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:嵌套滚动视图(
车身:建造商(
生成器:(上下文){
final _scr=PrimaryScrollController.of(上下文);
ret