【发布时间】: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,
),
),
);
}
}
【问题讨论】: