前言

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的更多相关文章

  1. xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)

    xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...

  2. 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 二, ...

  3. 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 ...

  4. 【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。

    近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"?       解决方式:手 ...

  5. Android Studio升级到0.8.1后怎样设置字体大小?

    升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改, ...

  6. 升级xcode10.0, 终端运行 运行报错:Print: Entry, “:CFBundleIdentifier”, Does Not Exist

    目录 问题原因 解决方法 终端解决 Print: Entry, ":CFBundleIdentifier", Does Not Exist 第一步: 去官网GitHub下载对应包就 ...

  7. 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 ...

  8. Flutter 开发从 0 到 1(五)源码

    Flutter 开发从 0 到 1 明天开始又要上班了,你的假期任务完成如何啊?由于平时加班太多了,实在挤不出更多时间,从开始想用 Flutter <Flutter 开发从 0 到 1(一)需求 ...

  9. GreenDao2.2升级GreenDao3.0的适配之路

    前言.为什么要升级到Greendao3.0? 1. 多人开发 以往的数据库建表建Dao等操作要新开一个module,在统一的地方管理数据库建表,现在可以直接写Entity.多人开发时自己管自己的Ent ...

随机推荐

  1. [小技巧] Windows7 半角全角快捷键 修改方法

    From : http://blog.sina.com.cn/s/blog_87ab67b10100x3ww.html 转载说明:在浏览器下我们可以使用空格下翻一页,Shift + 空格上翻一页. 但 ...

  2. MindInsight:一款基于MindSpore框架的训练可视化插件

    技术背景 在深度学习或者其他参数优化领域中,对于结果的可视化以及中间网络结构的可视化,也是一个非常重要的工作.一个好的可视化工具,可以更加直观的展示计算结果,可以帮助人们更快的发掘大量的数据中最有用的 ...

  3. Local dimming algorithm in matlab plus 1

    (续)LED局部背光算法MATLAB仿真 在上一篇博客<Local dimming algorithm in matlab>中,我们实现了对一篇论文的算法用matlab仿真.在本篇论文中, ...

  4. SA20225394 舒蔚 高级软件工程实验总结

    [实验]: 一.编程神器Visual Studio Code 配置好Visual Studio Code这一强大而又轻量的编辑器.其中有版本控制+代码补全+自动加载依赖,并且可以根据自己的需要添加插件 ...

  5. Vim的操作

    记录下vim的快捷键操作: I       进入编辑: Esc     退出编辑: 按ESC键 跳到命令模式,然后::w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w ...

  6. Java多线程(下)

    线程同步 当多个线程访问一个对象时,有可能会发生污读,即读取到未及时更新的数据,这个时候就需要线程同步. 线程同步: 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线 ...

  7. Oracle19c 如何用rman duplicate 克隆一个数据库。(Active方式)

    Oracle19c 如何用rman duplicate 克隆一个数据库. 首先克隆有两种方法,一种是Backup-Based,一种是Active方式.官网文档链接https://docs.oracle ...

  8. 【数论】A%B Problem luogu-1865

    题目描述 让你输出区间内的素数的个数 分析 预处理筛法,在随便搞一下就好了. AC代码 #include <bits/stdc++.h> using namespace std; #def ...

  9. C++五十一篇 -- VS2017开发人员新闻无法联网

    参考链接:https://blog.csdn.net/zz1589275782/article/details/88364983 这几天玩了下以前的电脑,本来想更新一下Visual Studio In ...

  10. iloc与loc总结

    pandas中操作DataFrame时候,经常用到**loc,iloc,at,iat,ix** loc函数通过行索引"index"中具体的值来去行的数据(如取"index ...