【问题标题】:Flutter sticky header list add items on scroll颤动的粘性标题列表在滚动时添加项目
【发布时间】:2023-03-04 20:57:02
【问题描述】:

各位开发者您好,

对于我的第一个 Flutter 项目,我需要使用带有粘性标题和无限滚动的列表。为此,我找到了一个非常好的库。 https://pub.dev/packages/flutter_sticky_header

最终目标是通过向下滚动将新项目从我的数据库中提取到列表中。 出于测试目的,我添加了一个按钮以将随机项目添加到我的列表中。但是,调用该函数时 UI 不会更新。我对 Flutter 很陌生。在我的代码下面。每次将项目添加到列表时,如何在不重新创建小部件的情况下更新 UI。

class AppScaffold2 extends StatefulWidget {
  @override
  _AppScaffold2State createState() => _AppScaffold2State();
}

class _AppScaffold2State extends State<AppScaffold2> {

  final CustomScrollView x =  CustomScrollView(
      slivers: new List<Widget>(),
      reverse: false,
    );

    int counter = 0;

  add(Widget w){
    x.slivers.add(w);
  }

  @override
  Widget build(BuildContext context) {
    return DefaultStickyHeaderController(
      child: Scaffold(
        body: Container(child: Column(children: <Widget>[
          Expanded(child: x),
          MaterialButton(
            onPressed: () => fetch(),
            child: Text('add to list')  
          ) 
        ],),)
      ),
    );
  }

  fetch() {
    x.slivers.add(_StickyHeaderList(index: counter));
    counter++;
  }
}

class _StickyHeaderList extends StatelessWidget {
  const _StickyHeaderList({
    Key key,
    this.index,
  }) : super(key: key);

  final int index;

  @override
  Widget build(BuildContext context) {
    return SliverStickyHeader(
      header: Header(index: index),
      sliver: SliverList(
        delegate: SliverChildBuilderDelegate(
          (context, i) => ListTile(
            leading: CircleAvatar(
              child: Text('$index'),
            ),
            title: Image.network(
            "https://i.ytimg.com/vi/ixkoVwKQaJg/hqdefault.jpg?sqp=-oaymwEZCNACELwBSFXyq4qpAwsIARUAAIhCGAFwAQ==&rs=AOn4CLDrYjizQef0rnqvBc0mZyU3k13yrg",
          ),
          ),
          childCount: 6,
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    尝试在 fetch 方法中使用 setState()。 像这样。

    fetch() {
        x.slivers.add(_StickyHeaderList(index: counter));
         setState(() {
            _counter++;
         });  
    }```
    
    

    【讨论】:

    • 如果我为条子制作一个单独的列表并在 customScrollView 中使用这个列表,它会起作用。在 setState 中更新列表后,它现在呈现到 UI。感谢您为我指明正确的方向
    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2020-01-18
    • 2016-04-30
    • 2020-08-11
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多