Flutter:使用ListView.builder消失SliverAppBar

时间:2019-05-10 12:49:59

标签: listview dart flutter flutter-sliver

当滚动时,我正在尝试使用消失的Appbar构建帖子(例如Instagram)的供稿。这是我的代码:

  Widget build(BuildContext context) {
     return Scaffold(
               appBar: AppBar(
                       backgroundColor: Colors.pink[100]         
                       ),
               body: postImagesWidget()
     );
   }

Widget postImagesWidget() {
return
  FutureBuilder(
  future: _future,
  builder: ((context, AsyncSnapshot<List<DocumentSnapshot>> snapshot) {

      return LiquidPullToRefresh(
        onRefresh: _refresh,    // refresh callback

        child: ListView.builder(
                  itemCount: snapshot.data.length,
                  itemBuilder: ((context, index)  =>

                SinglePost(
                  list: snapshot.data,
                  index: index,
                  followingUser: followingUser,
                  currentUser: currentUser,
                  fetch: fetchFeed,
                )))
      );
    }),
);}

如您所见,我目前正在使用普通的AppBar和用于创建帖子的Listview.builder。我听说了 SliverAppBar 并试图在我的设置中实现它,但是无法使其与ListView.builder一起使用。

关于如何删除滚动条上的AppBar的任何建议或想法?

最诚挚的问候。

1 个答案:

答案 0 :(得分:-1)

FLutter具有一个名为SliverAppBar的小部件。正是您想要的!

到SliverAppBar的文档链接: Flutter Docs - SliverAppBar

编辑

我很抱歉,我在忙碌的一天;)。 Sliver是一种不同类型的小部件,它们只是与其他SliverWidget(这不是规则)相关,例如在学校哈利集团。好吧,下面我写了一些带有注释的代码,您可以在DartPad中尝试。


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      // Your code starts here
      home: Scaffold(
        // NestedScrollView to hold a Body Widget (your list) and a SliverAppBar. 
        body: NestedScrollView(
          // SingleChildScrollView to not getting overflow warning
            body: SingleChildScrollView(child: Container() /* Your listview goes here */),
            // SliverAppBar goes inside here
            headerSliverBuilder: (context, isOk) {
              return <Widget>[
                SliverAppBar(
                  expandedHeight: 150.0,
                  flexibleSpace: const FlexibleSpaceBar(
                    title: Text('Available seats'),
                  ),
                  actions: <Widget>[
                    IconButton(
                      icon: const Icon(Icons.add_circle),
                      tooltip: 'Add new entry',
                      onPressed: () { /* ... */ },
                    ),
                  ]
                )
              ];
            }),
      ),
    );
  }
}