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调用后有状态小部件上的定时问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)