首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CustomScrollView不检测滚动

CustomScrollView不检测滚动
EN

Stack Overflow用户
提问于 2020-05-14 19:50:28
回答 1查看 4.1K关注 0票数 4

我是新来的,想知道是否有人可以帮助我的卷轴技工。我是第一次尝试SliverAppBar,它与酒吧本身的动作是正确的。但是,我有一个ListView.builder,它构建了一个小部件,我把这些小部件放在了一个剩余的小部件中,它没有检测到列表的移动。任何帮助都将不胜感激。

代码语言:javascript
复制
    return Scaffold(
      body: CustomScrollView(
        slivers: <Widget>[
          SliverAppBar(
            title: Row(
          children: <Widget>[
            Text('appName')],),
            expandedHeight: 110,
            floating: true,
            pinned: true,
            flexibleSpace: FlexibleSpaceBar(
              background: Container(
                child: Padding(
                  padding: const EdgeInsets.all(20.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: <Widget>[
                      Text('my text 1', style: TextStyle(
                        fontFamily: 'OpenSans',
                      ),
                      softWrap: true,),
                      Text('my Text', style: TextStyle(
                        fontFamily: 'OpenSans',
                         ),),],),),),),),

          SliverFillRemaining(
            hasScrollBody: true,
            child: Container(
              child: NoteList(
                  items: items,
                ),
            ),
          )
        ],
      ),

NoteList

代码语言:javascript
复制
class NoteList extends StatelessWidget {

  const NoteList({
    @required this.items, 
  });

  final List<Note> items;

  Future _navigateToNote(BuildContext context, Note note) => Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => NoteScreen(note)),
  );

  Widget _itemBuilder(BuildContext context, int position) {
    final cardShape = const RoundedRectangleBorder(
      borderRadius: BorderRadius.all(Radius.circular(0)),
    );
    return Padding(
      padding: const EdgeInsets.only(top:0, bottom: 0),
      child: Card(
        shape: cardShape,
        child: InkWell(
          onTap: () => _navigateToNote(context, items[position]),
          customBorder: cardShape,
       child: Padding(
            padding: const EdgeInsets.all(2.0),
            child: Column(
              children: <Widget>[
                ListTile(
                  title: Text('${items[position].theItem}',             
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scrollbar(
      child: ListView.builder(
        itemCount: items.length,
        padding: const EdgeInsets.only(left: 2, right: 2),
        itemBuilder: _itemBuilder,
      ),
    );
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 21:24:09

ListView中使用CustomScrollView。两者都是可滚动的,因此会发生冲突。

要解决这个问题,请将ListView替换为SliverList --用于显示CustomScrollView内部项目列表的特殊小部件。

这里不需要SliverFillRemaining,所以代码如下:

代码语言:javascript
复制
Scaffold(
  body: CustomScrollView(
    slivers: [
      SliverAppBar(
        ...
      ),
      SliverList(
        delegate: SliverChildBuilderDelegate(
          (context, index) => Card(
            // any nested widgets
            child: ListTile(
              title: Text(items[index].name),
            ),
          ),
          childCount: items.length,
        ),
      ),
    ],
  ),
);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61806214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档