如何运行异步等待代码,这是从存储的提供者在initState



当我的应用程序启动时,我试图从API获取数据。因此,我在Provider的存储中编写了async await函数来获取API数据。但是,它不起作用并发送404状态码。我该如何解决这个问题?

主要。飞镖代码

@override
void initState(){
super.initState();
// this is the code from provider
context.read<HomeData>().getData();
}
@override
Widget build(BuildContext context) {
return  DefaultTabController(
length: 4,
child: Scaffold(
appBar: TopAppBar(
),
body: BodyPage(
changePage : _changePage,
pageController : _pageController,
currentIndex : _currentIndex,
),
bottomNavigationBar: BottomBar(currentIndex: _currentIndex, pageController: _pageController),
extendBodyBehindAppBar: true,
),
);
}

提供程序存储代码

class HomeData extends ChangeNotifier {
var homeData = [];
var boardItem = {};
late String _image;
String get image => _image;
late String _content;
String get content => _content;
var _now;
DateTime get now => _now;
// 처음 홈에서 렌더링 될 때 나오는 아이템 데이터를 불러옴
getData() async{
var rawData = await http.get(Uri.parse('https://codingapple1.github.io/app/Constants.json'));
if (rawData.statusCode == 200) {
homeData = jsonDecode(rawData.body);
print(homeData);
}
else{
print('statusCode : ${rawData.statusCode}');
}
notifyListeners();
}
}

由于问题是404意味着页面没有找到(可用)。尝试重新检查链接路径。

你会发现context问题,直到第一个框架得到构建。您可以使用addPostFrameCallback

@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
await context.read<HomeData>().getData();
});
}

你也可以尝试使用FutureBuilder

你可以使用FutureBuilder或WidgetsBinding,或者你可以把它放在你的init状态;Future.delayed(Duration.zero, ()async{await xx();},);

相关内容

  • 没有找到相关文章

最新更新