我如何强制隐藏列表视图中的第一项
How can i force the first item in listview to be hidden
我有 listView 包含许多项目,如下所示
Scaffold(
backgroundColor:Colors.blue
appbar:AppBar()
body: ListView(
children: <Widget>[
Text('hello'),
Divider(height: 2, color: Colors.black,),
Text('hello'),
Divider(height: 2, color: Colors.black,),
Text('hello'),
Divider(height: 2, color: Colors.black,),
Text('hello'),,
],
),
)
现在我需要隐藏第一个索引或使其不可见或位于应用栏下方或屏幕顶部直到用户向下滚动(例如正常滚动)才会显示..
我尝试了以下方法,但如果用户向下滚动,它不会再次显示。我用 Stack 覆盖了它,并用相同脚手架颜色的容器欺骗了它
Stack(
children[
Text('hello'),
Container(
color:Colors.blue
)
]
)
我知道这根本不是好方法。因为它将永远隐藏
我该如何处理,谢谢
要实现这一点,如果您想要应用栏下的第一个元素。请检查我的代码
var itemCount = 31; // change this value to view different result
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('hi'),
),
body: SingleChildScrollView(
child: Stack(children: [
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
),
Positioned(
top: itemCount <= 20 ? -15 : null,
right: 0,
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ListView.builder(
padding: EdgeInsets.only(bottom: 70),
controller: ScrollController(
initialScrollOffset: itemCount < 31 ? itemCount + 1 : 31),
shrinkWrap: true,
itemCount: itemCount,
itemBuilder: (BuildContext context, int index) {
return Column(
children: [
Container(child: Text('hello $index')),
Divider(
height: 2,
color: Colors.black,
),
Text(''),
],
);
},
),
))
])));
它会起作用,请更改 var itemCount = 31 ;
值以查看结果
使用 flutter_screenutil
插件。所以它将适应所有屏幕尺寸
Note That
my device display height: 756.0
my device display width : 360.0
my device display aspectRatio : 0.47619047619047616
so my ScrollOffset should be 31 , so i am use this value
我有 listView 包含许多项目,如下所示
Scaffold(
backgroundColor:Colors.blue
appbar:AppBar()
body: ListView(
children: <Widget>[
Text('hello'),
Divider(height: 2, color: Colors.black,),
Text('hello'),
Divider(height: 2, color: Colors.black,),
Text('hello'),
Divider(height: 2, color: Colors.black,),
Text('hello'),,
],
),
)
现在我需要隐藏第一个索引或使其不可见或位于应用栏下方或屏幕顶部直到用户向下滚动(例如正常滚动)才会显示..
我尝试了以下方法,但如果用户向下滚动,它不会再次显示。我用 Stack 覆盖了它,并用相同脚手架颜色的容器欺骗了它
Stack(
children[
Text('hello'),
Container(
color:Colors.blue
)
]
)
我知道这根本不是好方法。因为它将永远隐藏
我该如何处理,谢谢
要实现这一点,如果您想要应用栏下的第一个元素。请检查我的代码
var itemCount = 31; // change this value to view different result
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('hi'),
),
body: SingleChildScrollView(
child: Stack(children: [
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
),
Positioned(
top: itemCount <= 20 ? -15 : null,
right: 0,
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ListView.builder(
padding: EdgeInsets.only(bottom: 70),
controller: ScrollController(
initialScrollOffset: itemCount < 31 ? itemCount + 1 : 31),
shrinkWrap: true,
itemCount: itemCount,
itemBuilder: (BuildContext context, int index) {
return Column(
children: [
Container(child: Text('hello $index')),
Divider(
height: 2,
color: Colors.black,
),
Text(''),
],
);
},
),
))
])));
它会起作用,请更改 var itemCount = 31 ;
值以查看结果
使用 flutter_screenutil
插件。所以它将适应所有屏幕尺寸
Note That
my device display height: 756.0
my device display width : 360.0
my device display aspectRatio : 0.47619047619047616
so my ScrollOffset should be 31 , so i am use this value