fluttter 项目升级到2.2.0

  • 1.修改pubspec.yaml,升级插件
  • 2.适配代码
  • 3.编译问题


在尝试升级flutter到2.2.0时遇到一些适配问题,记录一下供以后查看:

1.修改pubspec.yaml,升级插件

少数三方库还没有支持空安全:sharesdk_plugin,还有一些包含本地库的异常:umeng_sdk:
                  path: ./umeng_sdk/

2.适配代码

由于要适配空安全,很多可能为空的变量都要初始化或者定义为可为空(?.)或者(!),这些变量的定义方式都会牵连很多地方,比如返回值也许会不一致,所以这要看实际情况来选择定义为什么方便还要安全;

服务端请求接口也有改动

@POST("/bike/userBike/defaultUserBike")
  @FormUrlEncoded()
  Future<void> defaultUserBike({
    @required @Field() int userBikeId, 
  });

改为

@POST("/bike/userBike/defaultUserBike")
  @FormUrlEncoded()
  Future<void> defaultUserBike(
    @Field() int? userBikeId, 
  );
  或者
  @POST("/bike/userBike/defaultUserBike")
  @FormUrlEncoded()
  Future<void> defaultUserBike(
    @Field() int userBikeId,
  );

不可为空的情况,一旦后端返回为空就会抛异常,你初始化了都没用,会报Null类型无法转换为String等类型,可为空又感觉没有起到空安全的作用,界面里的变量可不可为空都还好控。

升级三方库后,第三方库或许有些改动,比如dio,

Dio()..interceptors.add(InterceptorsWrapper({
 InterceptorSendCallback onRequest,
 InterceptorSuccessCallback onResponse,
 InterceptorErrorCallback onError,
}))

onError ,onResponse, onRequest 参数和返回值都有改动,查看才知道为什么之前访问接口一直没有返回结果呢,还以为是其他请求头的问题。

3.编译问题

好不容易修改完代码错误,编译又要花一段时间:

Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command 'C:\Users\IMBA\flutter\bin\flutter.bat'' finished with non-zero exit value 1

一般在这个错误之前还会有一些其他错误原因,修改完之后还是有这个报错那就只能尝试clean 删除pubspec.lock,重新编译。 之前运行好好的突然还报GC overhead limit exceeded错误!!!我可什么都没改,我可太难了。。。。

flutter不向下兼容,升级起来的代价太大了,都不敢轻易升级,改动实在太多,测了测listview展示图片列表的效果,的确比之前体验好一些,但还是要压缩图片,不然返回图片列表的时候会有闪烁,不知道相当大量的图片会怎么样,上下滑动列表也会重新渲染,不过这个还是能接受的,毕竟内存为大。所以暂时也还没有适配2.2.0 哈哈哈。。。