【发布时间】:2019-12-08 17:21:04
【问题描述】:
我尝试了很多方法来调用 API 并获取数据,这很令人满意,但我无法通过正确的方法做到这一点,当我从构建中做到这一点时,它工作得很好,但它不是正确的地方,当我尝试在 initState 中执行它时它根本不起作用,它甚至不执行 print();
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Post {
final List<dynamic> data;
Post({this.data});
factory Post.fromJson(Map<String, dynamic> json) {
return Post(
data: json['response'],
);
}
}
class LoaderPublicity extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _LoaderPublicity();
}
}
class _LoaderPublicity extends State<LoaderPublicity> {
List allPublicity;
@override
void initState() {
super.initState();
getPublicity().then((value) {
print(allPublicity);
});
print(allPublicity);
}
//Obtener todas las publicidades desde el api
Future<void> getPublicity() async {
var response = await http.post(
'http://contablenift.co:3008/consult/getGeneralPublicity',
body: {'actividad': "Turistico", 'location': "No"});
print('????????2');
if (response.statusCode == 200) {
setState(() {
allPublicity = Post.fromJson(json.decode(response.body)).data;
});
}
}
@override
Widget build(BuildContext context) {
getPublicity();
// TODO: implement build
return Container(
child: Column(
children: <Widget>[Text('Aqui va la publicidad')],
),
);
}
}
** 解决了问题,去了整个开发组后发现我的手机没有网络,开心一天**
【问题讨论】:
-
你想在哪里打电话给
getPublicity()?在initState? -
是的,在 initState 中。此函数调用 API 并更新 allPublicity
-
为什么要返回
getPublicity()中的数据?我会把它留在setState(),然后使用类中的变量。将getPublicity()的返回类型设置为 void 并保留它。 -
另外,请勿使用
this拨打setState()。删除this,因为你不需要它。 -
ingles:已经修改为返回数据给变量,绘制修改,函数的当前状态是让它运行的尝试的总和,它真正尝试的是让它运行在 initState 中能够使用 setState
标签: flutter