Flutter配置Dio超时参数后出现LateInitializationError错误怎么解决
问题解答
错误成因
你在构造Dio实例的过程中,直接在BaseOptions参数内访问了还未完成赋值的dio变量。late修饰的变量必须完成赋值后才能被访问,而你赋值dio的逻辑本身还在执行时就调用dio.options.xxx,自然会触发未初始化错误。
此外你存在逻辑误区:BaseOptions本身就是用来配置Dio实例参数的配置类,不需要通过引用Dio实例的options来赋值。
解决方法
直接给BaseOptions的三个超时参数传入对应数值即可,无需引用未初始化的dio变量:
如果使用Dio 4.x及以上版本,超时参数接收Duration类型,修正后的代码如下:
class DioHelper { static late Dio dio; static init() { dio = Dio( BaseOptions( baseUrl: 'https://newsapi.org', receiveDataWhenStatusError: true, connectTimeout: const Duration(milliseconds: 100000), receiveTimeout: const Duration(milliseconds: 30000), sendTimeout: const Duration(milliseconds: 30000), ), ); } static Future<Response> getData({ required String url, required Map<String, dynamic> query, }) async { return await dio.get( url, queryParameters: query, ); } }
如果使用Dio 3.x及更低版本,直接传入毫秒数值即可:
connectTimeout: 100000, receiveTimeout: 30000, sendTimeout: 30000,
额外注意事项
调用getData方法前必须先执行一次DioHelper.init()完成dio变量初始化,建议在应用启动入口main函数中runApp执行前完成初始化调用。
内容的提问来源于stack exchange,提问作者Nyctophilius
相关产品推荐
相关产品推荐

