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

報錯還沒改完,之後應該還有新的問題,會繼續記錄🍔

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章