我是Flutter的新手,我正在尝试创建我的第一个应用程序。 在我的应用中,我为网络通话创建了一个单例课程。
class NetworkUtil {
Config configuration;
Dio dio;
static NetworkUtil _instance = new NetworkUtil._internal();
NetworkUtil._internal();
factory NetworkUtil(Config config){
_instance.configuration = config;
_instance.dio = new Dio();
return _instance;
}
final JsonDecoder _decoder = new JsonDecoder();
Future<dynamic> post(String url, {Map headers, body, encoding}) {
url = _instance.configuration.url+url;
return dio.post(url, data: body).then((response) {
final String res = response.data;
return res;
}).catchError((e){
if(e.response.data.containsKey("message")){
//I Need to dispatch event in blocClass
final _classBloc = BlocProvider.of<classBloc>(context); //I haven't context here
_classBloc .dispatch(ErrorMessage(message: e.response.data["message"]));
}else{
throw new Exception("System Error");
}
});
}
}
我的问题是我没有上下文,所以我无法在Bloc中调度事件。
我一直在考虑将上下文作为参数传递,但是我不知道这是否是一个不好的实践,在Android框架上是糟糕的错误实践,将Context作为参数传递,我在Flutter中也不知道。
是否可以使用BlocProvider超越组件?
答案 0 :(得分:0)
我认为您看错了。您想进行网络呼叫以作为对bloc
事件的响应,因此在您的处理函数中-我假设它将在mapEventToState
中,因为您使用的是flutter_bloc
-您想要具有类似的东西:
// event case
yield LoadingEvent();
try {
var post = await NetworkUtil.post(...);
yield CompleteState(post);
} catch (error) {
// handle errors
yield ErrorState(error.message);
}