我正在尝试使用GetConnect包从完全依赖GetX的flutter应用程序进行API调用。
这是我使用的代码:
class OnBoardingProvider extends GetConnect {
@override
void onInit() {
httpClient.baseUrl = 'https://www.my_domain_name.com/';
httpClient.addRequestModifier((request) {
request.headers['lang'] = Get.locale.languageCode;
return request;
});
if (UserModelProvider().checkForLogin()) {
httpClient.addAuthenticator((request) {
String token = UserModelProvider().getToken();
request.headers['Authorization'] = "Token $token";
return request;
});
}
super.onInit();
}
Future<List<dynamic>> getOnBoarding() async {
final response = await get('static-pages/api/on_boarding/');
return response.body;
}
但它一直显示错误
Unhandled Exception: Invalid argument(s): No host specified in URI static-pages/api/on_boarding/
这意味着httpClient.baseUrl = ...
行没有影响代码。。或者我说错话了!!
更新
当我调用函数时,我以这种方式调用OnBoardingProvider
的实例
OnBoardingProvider().getOnBoarding().then((value) {
print(value.body);
});
方法onInit
没有被调用,这就是为什么baseUrl没有被初始化的原因。
当使用Get.put(Controller(((注入依赖项时,会调用方法"onInit";进入小部件树。
所以,
OnBoardingProvider onBoardingProvider = Get.put(onBoardingProvider());
onBoardingProvider.getOnBoarding().then((value) {
print(value.body);
});
有关GetX和Get-Connect 中depenceny注入的更多信息