如何将解码后的数据从我的 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"],
deaths: json["deaths"],
recovered: json["recovered"],
weekIncidence: json["weekIncidence"],
casesPer100k: json["casesPer100k"],
casesPerWeek: json["casesPerWeek"]
答案 0 :(得分:2)
为什么不直接使用返回的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.
答案 1 :(得分:1)
虽然我同意 @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
}
}