gpt4 book ai didi

dart - 如何在 flutter 中使用 KeepAliveNotification?

转载 作者:行者123 更新时间:2023-12-01 00:19:54 25 4
gpt4 key购买 nike

我在 SliverList 中有一些小部件,当我滚动到屏幕外时,我不想失去状态。根据文档,“......惰性列表中的 child 被包装在 AutomaticKeepAlive 小部件中,这样 children 可以使用 KeepAliveNotifications 来保持他们的状态,否则他们会在屏幕外被垃圾收集。”,我的问题是,我该如何发送一个 KeepAliveNotification?我无法理解文档,也找不到任何使用示例。

我在哪里获得或创建可听的?在我的应用程序中,当用户点击部分标题时,它会展开并将对齐方式从水平更改为垂直。当用户向下滚动页面时,状态会丢失。下面的代码示例(删除了一些与问题无关的代码以减少困惑)。

class Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new DefaultTabController(
length: choices.length,
child: new Scaffold(
body: new CustomScrollView(slivers: <Widget>[
new SliverAppBar(
title: new Container(
child: new TabBar(
tabs: choices.map((Choice choice) {
return new Tab(
text: choice.title,
icon: new Image.asset(choice.icon, height:22.0),
);
}).toList(),
)),
),
new SliverList(delegate:new SliverChildListDelegate([
// Widget that I want to KeepAlive
new TrendingArticles(),
//Other widgets
])),
]),
),
),
);
}
}
//Widget that I want to KeepAlive
class TrendingArticles extends StatefulWidget{
const TrendingArticles({ Key key }) : super(key: key, );

@override
_TrendingArticlesState createState() => new _TrendingArticlesState();
}

class _TrendingArticlesState extends State<TrendingArticles> {
List<Article> articles = [];
_getArticles() async {
//Code for getting articles
}
@override
initState(){
super.initState();
_getArticles();
}
void _handleSize(){
//Handles changing orientation and size of widget
}
@override
Widget build(BuildContext context) {
return new Container(
height:sectionHeight,
child: new Column(children: <Widget>[
new SectionHeader(title: "Articles", onTap:_handleSize,alignment:headerAlignment),
new Container(
height:sectionHeight - 55,
child: new ListView(
scrollDirection: scrollDirection,
children: articles.map((Article article) {
return new ArticleCard(
height: cardHeight,
article: article,
onBannerTap: (Article article) {
setState(() {
article.isFavorite = !article.isFavorite;
});
}
);
}).toList(),
),
),
]));
}
}

最佳答案

如前所述here ,您必须添加 AutomaticKeepAliveClientMixin对于您的 sliver 列表委托(delegate)子的 State 类,您希望保持该状态。在您的示例中,它是 _TrendingArticlesState
记得调用super.build(context);build你的方法_TrendingArticlesState类(class)。

关于dart - 如何在 flutter 中使用 KeepAliveNotification?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com