如何解决将 API 数据从类传递给 GetX 控制器
如何将解码后的数据从我的 Api 传递到我的 GetX 控制器?
这是我的 Class "Germany" 和我的 fetchGermany() 函数。
Future<Germany> fetchGermany() async {
final response =
await get(Uri.parse('https://api.corona-zahlen.org/germany'));
if (response.statusCode == 200) {
return Germany.fromJson(jsonDecode(response.body));
} else {
throw Exception('Failed to get data');
}
}
class Germany {
int cases;
int deaths;
int recovered;
double weekIncidence;
double casesPer100k;
int casesPerWeek;
Germany(
{required this.cases,required this.deaths,required this.recovered,required this.weekIncidence,required this.casesPer100k,required this.casesPerWeek});
factory Germany.fromJson(Map<String,dynamic> json) {
return Germany(
cases: json["cases"],deaths: json["deaths"],recovered: json["recovered"],weekIncidence: json["weekIncidence"],casesPer100k: json["casesPer100k"],casesPerWeek: json["casesPerWeek"]);
}
}
这是我的 GetX 控制器,目前为空:
class DetailController extends GetxController {
}
所以基本上我只想能够访问这些数据:
cases: json["cases"],casesPerWeek: json["casesPerWeek"]
解决方法
为什么不直接使用返回的Germany
对象?
我认为没有必要在此处使用 GetxController
。
可以简单地用作:
Germany _germany;
@override
void initState() {
super.initState();
fetchGermanyData();
}
fetchGermanyData() async {
final fetchedData = await fetchGermany();
setState(() => _germany = fetchedData);
}
/// use ? : operator to show relevant UI in the build method.
,
虽然我同意 @DarShan 的观点,您在这里不一定需要 GetXController
,但我仍然只是为了在有状态小部件上使用无状态小部件。如果不是因为 UI 代码比较杂乱和业务逻辑分离没有其他原因。
也不确定您的 Api 调用函数是否是全局的,或者您的示例中是否就是这样,但如果它是全局的,我会创建一个辅助类。
class ApiHelper {
Future<Germany> fetchGermany() async {
final response =
await get(Uri.parse('https://api.corona-zahlen.org/germany'));
if (response.statusCode == 200) {
return Germany.fromJson(jsonDecode(response.body));
} else {
throw Exception('Failed to get data');
}
}
}
那么您的 GetX 类可以如下所示。
class DetailController extends GetxController {
Germany germany;
@override
void onInit() async {
super.onInit();
final apiHelper = ApiHelper();
germany = await apiHelper.fetchGermany();
}
}
这是一个使用 GetView
小部件的示例,它只是一个无状态小部件,具有您提供的类型的内置控制器,而无需找到它。
class GermanyExample extends GetView<DetailController> {
@override
Widget build(BuildContext context) {
// access the initialized Germany object with controller.germany
return // the rest of your UI
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。