我想使用创建一个长条列表视图,SliverAppBar
这样当我向上滚动列表时,主体内的图标会缩小以发生在leading
appBar 的空间中。
这里的图像显示了我想要实现的目标。当我向上滚动时,图表应该向上移动并在标题旁边滑动。(类似于英雄小部件的东西)
到目前为止,我尝试过SliverAppBar
,但未能成功。我很高兴使用其他一些小部件来实现这一点。谢谢你。
我想使用创建一个长条列表视图,SliverAppBar
这样当我向上滚动列表时,主体内的图标会缩小以发生在leading
appBar 的空间中。
这里的图像显示了我想要实现的目标。当我向上滚动时,图表应该向上移动并在标题旁边滑动。(类似于英雄小部件的东西)
到目前为止,我尝试过SliverAppBar
,但未能成功。我很高兴使用其他一些小部件来实现这一点。谢谢你。
你试过这个吗?
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
//Variables needed to adapt FlexibleSpaceBar text color (title)
ScrollController _scrollController;
bool lastStatus = true;
double height = 200;
void _scrollListener() {
if (_isShrink != lastStatus) {
setState(() {
lastStatus = _isShrink;
});
}
}
bool get _isShrink {
return _scrollController.hasClients &&
_scrollController.offset > (height - kToolbarHeight);
}
@override
void initState() {
super.initState();
_scrollController = ScrollController()..addListener(_scrollListener);
}
@override
void dispose() {
_scrollController.removeListener(_scrollListener);
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: NestedScrollView(
controller: _scrollController,
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
expandedHeight: height,
floating: false,
pinned: true,
flexibleSpace: FlexibleSpaceBar(
centerTitle: true,
title: _isShrink
? Row(
children: [
//Replace container with your chart
// Here you can also use SizedBox in order to define a chart size
Container(
margin: EdgeInsets.all(10.0),
width: 30,
height: 30,
color: Colors.yellow),
Text('A little long title'),
],
)
: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'A little long title',
textAlign: TextAlign.center,
),
//Replace container with your chart
Container(
height: 80,
color: Colors.yellow,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Your chart here'),
],
),
),
]),
),
),
),
];
},
body: ListView.builder(
itemCount: 100,
itemBuilder: (context, index) {
return Container(
height: 40,
child: Text(index.toString()),
);
},
),
),
);
}
}
我不认为它可以用 SliverAppBar 来完成。您应该在 Pub.dev 中搜索软件包,这可能会帮助您fluent_appbar