dart – API调用后有状态小部件上的定时问题

dart – API调用后有状态小部件上的定时问题,第1张

概述我遇到了计时问题,我从api获取数据,然后从 JSON创建一个列表.我想在结果列表视图中使用结果列表的长度作为项目计数.但是它会在itemcount上抛出null错误,然后完成处理并显示listview.我试图找到时间问题的位置以及如何处理项目和小部件,以便我可以避免错误.如果有人有任何想法我的代码存在缺陷,我的代码如下. class Specialty extends StatefulWidge 我遇到了计时问题,我从API获取数据,然后从 JSON创建一个列表.我想在结果列表视图中使用结果列表的长度作为项目计数.但是它会在itemcount上抛出null错误,然后完成处理并显示ListvIEw.我试图找到时间问题的位置以及如何处理项目和小部件,以便我可以避免错误.如果有人有任何想法我的代码存在缺陷,我的代码如下.

class Specialty extends StatefulWidget {  Specialty({Key key,this.Title}) : super(key: key);  final String Title;  @overrIDe  _SpecialtyState createState() => new _SpecialtyState();}class _SpecialtyState extends State<Specialty> {  bool _dataReceived = false;  bool _authenticated = false;  SharedPreferences prefs;  List myList;  @overrIDe  voID initState() {    super.initState();    _getPrefs();    _getSpecialty();  }  _getPrefs() async {    prefs = await SharedPreferences.getInstance();    _authenticated = prefs.getBool('authenticated');    print('AUTH2: ' + _authenticated.toString());    print('AUTHCODE2: ' + prefs.getString('authcode'));  }  _getSpecialty() async {    var _url = 'http://$baseurl:8080/support/specialty';    var http = createhttpClIEnt();    var response = await http.get(_url);    var specialtIEs = JsonCodec.decode(response.body);    myList = specialtIEs.toList();    //_dataReceived = true;    setState(() {      _dataReceived = true;    });  }  Future<Null> _onRefresh() {    Completer<Null> completer = new Completer<Null>();    Timer timer = new Timer(new Duration(seconds: 3),() {      completer.complete();    });    return completer.future;  }  @overrIDe  Widget build(BuildContext context) {    return new Scaffold(        body: new Refreshindicator(          child: new ListVIEw.builder(            itemBuilder: _itemBuilder,itemCount: myList.length,),onRefresh: _onRefresh,));  }  Widget _itemBuilder(BuildContext context,int index) {    SpecialtIEs spec = getSpec(index);    return new SpecialtyWidget(spec: spec,);  }  SpecialtIEs getSpec(int index) {    return new SpecialtIEs(        myList[index]['ID'],myList[index]['name'],myList[index]['details'],new Photo('lib/images/' + myList[index]['image'],myList[index]['name']));    //return new SpecialtIEs.fromMap(myList[index]);  }  var JsonCodec = const JsonCodec();}
解决方法 在调用异步方法时应该使用await.您可以将initState标记为异步,它仍将覆盖.

每当你改变成员变量时,一定要调用setState().

如果在异步等待后执行此 *** 作,请检查setState之前是否(已安装),因为该窗口小部件可能不再可见.

在进行异步编程时,请考虑使用FutureBuilder而不是setState.

总结

以上是内存溢出为你收集整理的dart – API调用后有状态小部件上的定时问题全部内容,希望文章能够帮你解决dart – API调用后有状态小部件上的定时问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存