如何 运行 异步等待来自 initState 中提供程序存储的代码
How to run async await code which is from store of provider inside initState
我正在尝试在我的应用程序启动时从 API 获取数据。因此,我在Provider的一个store写了async await函数,用来带API个数据。但是,它不起作用并发送 404 状态代码。我该如何解决这个问题?
main.dart 代码
@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();
}
}
As the issue is 404 means page is not found(available). Try rechecking the link path.
在构建第一帧之前,您会发现 context
问题。您可以使用 addPostFrameCallback
.
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
await context.read<HomeData>().getData();
});
}
您也可以尝试使用 FutureBuilder
。
您可以使用 FutureBuilder 或 WidgetsBinding,也可以将其置于初始状态; Future.delayed(Duration.zero, ()async{await xx();},);
我正在尝试在我的应用程序启动时从 API 获取数据。因此,我在Provider的一个store写了async await函数,用来带API个数据。但是,它不起作用并发送 404 状态代码。我该如何解决这个问题?
main.dart 代码
@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();
}
}
As the issue is 404 means page is not found(available). Try rechecking the link path.
在构建第一帧之前,您会发现 context
问题。您可以使用 addPostFrameCallback
.
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
await context.read<HomeData>().getData();
});
}
您也可以尝试使用 FutureBuilder
。
您可以使用 FutureBuilder 或 WidgetsBinding,也可以将其置于初始状态; Future.delayed(Duration.zero, ()async{await xx();},);