Flutter SliverAppBar -- 允许滚动直到 SliverAppBar 不再可见
Flutter SliverAppBar -- Allow scrolling until SliverAppBar is no longer visible
我正在尝试用 SliverAppBar
创建一个 CustomScrollView
。由于包含主要内容的 SliverGrid
可能经常没有足够的内容允许滚动到 'SliverAppBar',UI 现在感觉 'stuck';用户只能滚动到 SliverAppBar
的一部分,但直到它被隐藏为止。
因此,我希望在隐藏 SliverAppBar
之前只允许滚动。
下面是我当前的代码,
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
backgroundColor: Colors.green,
expandedHeight: 500.0,
flexibleSpace: FlexibleSpaceBar(
background: Image.asset(
'tree_logo.jpg',
fit: BoxFit.cover,
),
),
),
SliverGrid.count(
crossAxisCount: 4,
crossAxisSpacing: 20.0,
mainAxisSpacing: 20.0,
childAspectRatio: 4 / 3,
children: [
PermissibleModuleCard(
moduleTitle: 'Master Data',
moduleDescription:
'Edit berbagai master-master data (client, supplier, tenaga kerja & material) serta konstanta-kosntanta lainnya (PPN, Alamat, etc.)',
),
],
),
],
),
);
}
}
查看文档后,我找到了 CustomScrollView
的 center
属性。这让我可以将 SliverList
设置为中心小部件。
最终代码:
class HomePage extends StatelessWidget {
final GlobalKey _sliverKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: CustomScrollView(
center: _sliverKey,
slivers: <Widget>[
SliverToBoxAdapter(
child: Image.asset(
'tree_logo.jpg',
fit: BoxFit.cover,
),
),
SliverGrid.count(
key: _sliverKey,
crossAxisCount: 4,
crossAxisSpacing: 20.0,
mainAxisSpacing: 20.0,
childAspectRatio: 4 / 3,
children: [
PermissibleModuleCard(
moduleTitle: 'Master Data',
moduleDescription:
'Edit berbagai master-master data (client, supplier, tenaga kerja & material) serta konstanta-kosntanta lainnya (PPN, Alamat, etc.)',
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return MasterDataModulesHomePage();
}));
},
),
],
),
],
),
);
}
}
我正在尝试用 SliverAppBar
创建一个 CustomScrollView
。由于包含主要内容的 SliverGrid
可能经常没有足够的内容允许滚动到 'SliverAppBar',UI 现在感觉 'stuck';用户只能滚动到 SliverAppBar
的一部分,但直到它被隐藏为止。
因此,我希望在隐藏 SliverAppBar
之前只允许滚动。
下面是我当前的代码,
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
backgroundColor: Colors.green,
expandedHeight: 500.0,
flexibleSpace: FlexibleSpaceBar(
background: Image.asset(
'tree_logo.jpg',
fit: BoxFit.cover,
),
),
),
SliverGrid.count(
crossAxisCount: 4,
crossAxisSpacing: 20.0,
mainAxisSpacing: 20.0,
childAspectRatio: 4 / 3,
children: [
PermissibleModuleCard(
moduleTitle: 'Master Data',
moduleDescription:
'Edit berbagai master-master data (client, supplier, tenaga kerja & material) serta konstanta-kosntanta lainnya (PPN, Alamat, etc.)',
),
],
),
],
),
);
}
}
查看文档后,我找到了 CustomScrollView
的 center
属性。这让我可以将 SliverList
设置为中心小部件。
最终代码:
class HomePage extends StatelessWidget {
final GlobalKey _sliverKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: CustomScrollView(
center: _sliverKey,
slivers: <Widget>[
SliverToBoxAdapter(
child: Image.asset(
'tree_logo.jpg',
fit: BoxFit.cover,
),
),
SliverGrid.count(
key: _sliverKey,
crossAxisCount: 4,
crossAxisSpacing: 20.0,
mainAxisSpacing: 20.0,
childAspectRatio: 4 / 3,
children: [
PermissibleModuleCard(
moduleTitle: 'Master Data',
moduleDescription:
'Edit berbagai master-master data (client, supplier, tenaga kerja & material) serta konstanta-kosntanta lainnya (PPN, Alamat, etc.)',
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return MasterDataModulesHomePage();
}));
},
),
],
),
],
),
);
}
}