flutter升级2.0
前言
flutter2.0版本带来了很多变化,特别是加入了空安全,升级后的大片报错,让大家望而却步。
现在距2.0发布已经快半年了,大部分插件也支持了空安全,而我们的项目却因为版本低,用不上新东西,所以准备试一试来升级啦~
升级flutter
老版本1.22.6 ---升级为---> 最新版本2.2.3

问题很多,慢慢改吧~
一、API调整
首先修改 Dart SDK 的 environment ,在pubspec.yaml
environment:
sdk: ">=2.12.0-0 <3.0.0"
1、废弃List
需要使用 [] 或者 List.filled 来替换你原有的实现,例如:new LIst()改为[] ; List<Widget>(length) 改为 List.filled(length)。

2、废弃Stack的overflow
需要使用 clipBehavior 替换 overflow,例如:overflow: Overflow.visible 改为 clipBehavior: Clip.none,默认是 Clip.hardEdge。

3、FlatButton 改为 TextButton;RaisedButton 改为 ElevatedButton
FlatButton 和 RaisedButton 上的 padding、color 等方法现在需要使用 ButtonStyle 来设置。
4、其他
- Scaffold 的 resizeToAvoidBottomPadding 改为 resizeToAvoidBottomInset
- 官方新增了 DateUtils 到 'package:flutter/material.dart' 里,可能会与你的项目里的 DateUtils 命名冲突。
- Theme.of(context, shadowThemeOnly: true) 的 shadowThemeOnly 参数正式取消。
- Localizations.localeOf(context, nullOk: true) 和 MediaQuery.of(context, nullOk: true) 的 nullOk 参数正式取消。
二、空安全
参考 https://dart.cn/null-safety
1、什么是空安全
空安全是指代码中的类型默认是非空的,除非你声明它们可空,否则它们的值都不能为空。
类型系统中的可空性:
空安全推出前,Null 类型被看作是所有类型的子类;而空安全修改了类型的层级结构,Null 类型不再是所有类型的子类。如下图:

Null 是任何可空类型的子类,例如,可空类型String?,作为基础类型的超类,可以接收String和null。

2、四个关于空安全的操作符

① ?
类型后面跟操作符 ? ,表示当前变量可为null。例如:
int count = null; (报错) int? count = null; (正确)
常用于组件中不必传的参数变量:

②!
类型后面跟操作符 ! ,表示此变量值不为null,如果为null则会抛出异常。慎重使用。例如:
String? name = null;
name.length (报错)
name?.length (正确)
name!.length (报错)操作符!表示当前变量不为null,但是name为null,会抛出异常。
常用于可以确定不为null的变量。

③late
表示这是一个非空变量,稍后再初始化。例如:

④required
表示此参数不能为空。
原来的@required 可以直接改为required,以前没有使用 @required 注解的参数加上 required 时要慎重。
注:@required和required的区别:@required 将参数标记为必须传递,如果未传,分析器会给出一个提示;空安全中,required 修饰的参数未传递,会显示一个错误。

更多修改意见可以查看https://dart.cn/null-safety/faq
三、其他调整
1、void function
报错 error: The argument type ‘Function‘ can‘t be assigned to the parameter type ‘void Function()‘.
声明改为 final void Function() onTap;
2、类型对不上

TBC---------------------------
报错还没改完,之后应该还有新的问题,会继续记录
flutter升级2.0的更多相关文章
- xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...
- gitlab RPM卸载 & 安装 && 升级(9.0.13-》9.5.9-》10.0->10.3.9->10.6.6-》10.8-》11.0)
版本:9.0.3 升级版本:9.0.13 一,停止服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab-ctl stop nginx 二, ...
- python3 升级 pip9.0.1 到pip-9.0.3
首先试试 python -m pip install --upgrade pip python3.5 升级 pip-9.0.3报错 You are using pip version 9.0.1, h ...
- 【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"? 解决方式:手 ...
- Android Studio升级到0.8.1后怎样设置字体大小?
升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改, ...
- 升级xcode10.0, 终端运行 运行报错:Print: Entry, “:CFBundleIdentifier”, Does Not Exist
目录 问题原因 解决方法 终端解决 Print: Entry, ":CFBundleIdentifier", Does Not Exist 第一步: 去官网GitHub下载对应包就 ...
- centos6.8 Mysql-5.7.20 升级 mysql-8.0.14-1
Mysql-5.7.20 升级 mysql-8.0.14-1 操作前建议先查阅以下网页初步了解Mysql版本升级信息 https://blog.csdn.net/u012946310/artic ...
- Flutter 开发从 0 到 1(五)源码
Flutter 开发从 0 到 1 明天开始又要上班了,你的假期任务完成如何啊?由于平时加班太多了,实在挤不出更多时间,从开始想用 Flutter <Flutter 开发从 0 到 1(一)需求 ...
- GreenDao2.2升级GreenDao3.0的适配之路
前言.为什么要升级到Greendao3.0? 1. 多人开发 以往的数据库建表建Dao等操作要新开一个module,在统一的地方管理数据库建表,现在可以直接写Entity.多人开发时自己管自己的Ent ...
随机推荐
- gitlab git 安装
1.配置yum源 vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=Gitlab CE Repository baseurl=https://m ...
- ptm经验总结
- 密码学系列之:memory-bound函数
密码学系列之:memory-bound函数 目录 简介 内存函数 内存受限函数 内存受限函数的使用 简介 memory-bound函数可以称为内存受限函数,它是指完成给定计算问题的时间主要取决于保存工 ...
- LVM磁盘管理实战案例
前言:这是关于centos/linux上的LVM磁盘上的扩容,缩减,磁盘类型等收集做的案例 至于ubuntu系统的磁盘扩容参考:https://www.jianshu.com/p/5dcfcec687 ...
- Java | 标识符 & 关键字
标识符是什么? 标识符 标识符是指在程序中,我们自己定义的内容.比如类的名字.方法的名字和变量的名字等等,都是标识符.在我们写的第一个程序当中,我们给类起名叫做Hello 也叫做标识符. 命名规则 标 ...
- .NET Core 中的 Swagger 应用与微服务场景下的Swagger Api 集成显示
Swagger 与 OpenAPI 的历史来源: Swagger 项目于 2015 年捐赠给 OpenAPI Initiative,此后被称为 OpenAPI.这两个名称可以互换使用.但是," ...
- python -- 程序的结构语句
一.顺序结构 顺序结构是python脚本程序中基础的结构,它是按照程序语句出现的先后顺序进行依次执行 二.选择结构 选择结构是通过判断某些特定的条件是否满足来决定程序语句的执行顺序 常见的有单分支选择 ...
- jvm源码解读--11 ldc指令的解读
写一个java文件 public static void main(String[] args) { String str1="abc"; String str2 ="a ...
- 构建后端第2篇之---springb @ComponentScan注解使用
张艳涛写于2021-2-8日 构建后端项目的时候遇到一个问题,在zyt-auth项目的依赖定义了@Component类,这个类在项目启动的时候提示没有找到bean Field tokenService ...
- 【阅读笔记】Java核心技术卷一 #1.Chapter3
3 Java的基本程序设计结构 3.1 一个简单的 Java 应用程序(略) 3.2 注释(略) 3.3 数据类型 8种基本类型 byte,short,int,long float,double ch ...