【问题标题】:Vertical ListView inside ScrollView flutterScrollView 内的垂直 ListView 颤动
【发布时间】:2021-04-25 17:46:35
【问题描述】:

我的 UI 用例类似于 Instagram 用户个人资料。

我有多个顶部的小部件和一个无限的ListView.builder 波纹管与项目。 我想滚动 ScrollView 中的所有内容,但滚动视图不能包含无限列表。

如何在 Flutter 中处理这种情况?

【问题讨论】:

    标签: flutter listview dart scroll


    【解决方案1】:

    使用 CustomScrollView 是解决方案

    这里我已经为你完成了基本实现:

    class MainBody extends StatefulWidget {
      MainBody({Key key}) : super(key: key);
    
      @override
      _MainBodyState createState() => _MainBodyState();
    }
    
    class _MainBodyState extends State<MainBody> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(),
          body: CustomScrollView(
            slivers: <Widget>[
              SliverToBoxAdapter(
                child: Container(
                    padding:
                        const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
                    child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Row(
                            children: [
                              Expanded(
                                child: Container(
                                  height: 100,
                                  width: 100,
                                  decoration: BoxDecoration(
                                      shape: BoxShape.circle, color: Colors.green),
                                  child: Center(child: Text("ProfileImage")),
                                ),
                                flex: 1,
                              ),
                              Expanded(flex: 2, child: Text("Profile Statistics"))
                            ],
                          ),
                          Text("Bio"),
                          Text("Some Buttons"),
                          Text("Story Highlights"),
                        ])),
              ),
              SliverToBoxAdapter(
                child: Container(
                    height: 150,
                    child: ListView.builder(
                        scrollDirection: Axis.horizontal,
                        itemCount: 10,
                        itemBuilder: (context, index) {
                          return Container(
                            margin: const EdgeInsets.all(10),
                            height: 100,
                            width: 100,
                            decoration: BoxDecoration(
                                shape: BoxShape.circle, color: Colors.red),
                            child: Center(child: Text((index + 1).toString())),
                          );
                        })),
              ),
              SliverAppBar(
                centerTitle: false,
                pinned: true,
                flexibleSpace: DefaultTabController(
                  initialIndex: 0,
                  length: 2,
                  child: TabBar(tabs: [
                    Center(child: Text("Icon1")),
                    Center(child: Text("Icon2")),
                  ]),
                ),
              ),
              SliverPadding(
                padding: const EdgeInsets.all(8),
                sliver: SliverList(
                    delegate: SliverChildBuilderDelegate(
                        (context, index) => Container(
                            height: 30,
                            child: Center(child: Text("Hey" + index.toString()))),
                        childCount: 20)),
              )
            ],
          ),
        );
      }
    }
    

    可以做进一步的增强

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 2012-09-22
      相关资源
      最近更新 更多