前言

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

报错还没改完,之后应该还有新的问题,会继续记录

最新文章

  1. MVC学习笔记----缓存
  2. SqlServerException:拒绝对表对象的select,insert权限解决(新建账号导致的问题)
  3. BZOJ4386 : [POI2015]Wycieczki
  4. 使用Azure Redis Cache
  5. linux gcc 编译时头文件和库文件搜索路径
  6. Ruby自学笔记(五)— 条件判断
  7. C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)
  8. centos7里默认python升级到2.7.11
  9. 苦B的程序猿道路数据验证
  10. Aliexpress API 测试工具
  11. 什么是PostBack(译)
  12. YARN整理
  13. 大白话5分钟带你走进人工智能-第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归
  14. 【English】20190428
  15. 几个bat文件(关于robot freamwork安装)
  16. @Value取不到值的原因(引用application.properties中自定义的值)
  17. 20165223 《JAVA程序设计》第四周学习总结
  18. Linux C++ UDP Socket通信实例
  19. 从头配置,开发 cocos2dx 3.14.1
  20. idea设置代码提示不区分大小写

热门文章

  1. 官宣.NET 6 预览版4
  2. 【笔记】Python编程 从入门到实践 第二版(基础部分)
  3. 「AGC035C」 Skolem XOR Tree
  4. 抓包工具-Charles
  5. Spring Boot(三):Spring Boot中的事件的使用 与Spring Boot启动流程(Event 事件 和 Listeners监听器)
  6. python 模拟点击微信
  7. ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁
  8. Scala学习——函数高级操作
  9. Requests方法 --- post 请求body的四种类型
  10. Selnium + POM + Pytest:学习记录