【发布时间】:2019-11-21 00:28:29
【问题描述】:
这是我调用 API 来获取 xml 项目的代码。 列表视图按文章更新。
现在,在更改 listview 的变量后,我调用了一次 setState()。
但是,在运行此代码时。 setState() 被无限调用,并不断更新。
我应该如何解决或最佳做法是什么??
class Article{
String title;
String url;
Article() {}
}
List<Article> articles = [];
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
void _callApi() async{
final response = await http.get('http://localhost/mamasoku/web/app_dev.php/api/byLatest/1/10');
if (response.statusCode == 200) {
var document = xml.parse(response.body);
var items = document.findAllElements('item');
print("item number:" + items.length.toString());
items.forEach((var item) {
var a = Article();
a.title = item.findElements('title').single.text;
a.url = item.findElements('url').single.text;
articles.add(a);
});
setState(() => {});
}
}
_callApi();
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: BodyLayout(),
);
}
}
class BodyLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return _myListView(context);
}
}
Widget _myListView(BuildContext context) {
return ListView.builder(
itemCount: articles.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(articles[index].title),
);
},
);
}
void onTapped(var index) {
print(index);
}
【问题讨论】: