Flutter升级空安全版本注意事项

FlutterBoost发布了3.0,试着把Flutter升级到了2.5空安全版本,升级的过程几乎是逐行更改代码,对项目影响很大,遇到的一些坑分享给大家

  1. 空类型
    ○ 声明时可为空的变量需要加?
UserEntity? user;
user?.userId = 759896253;
user = UserEntity();
user!.nickname = "测试用名";

○ 构造方法要在方法体外为不能为空的成员变量赋值,如下的msg字段,而code、data、error就不必如此
要在构造方法执行前,保证当前类中非dynamic、late标识的成员变量都不为空

class Test{
  int code = -1;
  String msg;
  dynamic data;
  late String error;
  Test(): msg = "" {
    
  }
}

○ 组件方法中可选参数(非空类型)要么加默认值,要么加required注解标明必传,@required => required
final int index;
CoursesSubPage({this.index = 1});
CoursesSubPage({required this.index});
○ 继承JsonConvert的Entity需要加默认值

  1. 组件变化
    ○ FlutterBoost.singleton.open => BoostNavigator.instance.push
    ○ Scaffold中appBar属性的类型Widget => PreferredSizeWidget
    一般常为:AppBar、TabBar、PreferredSize
    resizeToAvoidBottomPadding => resizeToAvoidBottomInset
    ○ Stack中overflow => clipBehavior

  2. 创建List时:List() => []
    List list = []
    var _hotList = []

  3. 页面生命周期监听改变

  4. 类冲突:下面两个引用文件中,都有DateUtils类,会发生冲突,DateUtils识别不出什么意思
    解决方法是其中一个改名或者去掉一个import

import 'package:ncflutter/utils/date_utils.dart';
import 'package:flutter/material.dart';
DateUtils.format()
  1. WillPopScope组件的onWillPop方法需要用async修饰

  2. programKey.currentContext!.findRenderObject()返回值为RenderObject需强转为RenderBox

两周时间FlutterBoost发布了两个小版本,很多issue还没有修复,目前想先等一波,让别人先趟趟雷。目前网上资料不太完善,建议大家也等一波

你可能感兴趣的:(Flutter,flutter,安全)