2021年3月3日、Google開発者はFlutter 2を発表しました。新しいバージョンのDart言語には何が登場しましたか?以前のFlutterバージョンを使用して作成されたアプリケーションの開発とサポートについてはどうですか?そして最も重要なことは、バージョン2への移行はどれほど難しいでしょうか。この記事では、アプリケーションを新しいバージョンのFlutterに移行する際の経験と、移行中に発生する可能性のある問題について詳しく説明します。
Flutterとは誰ですか?Flutterが必要な理由は何ですか?
, , Flutter — Google - , Android, iOS . Flutter Web Desktop. , Android iOS, . ? 2018, Flutter 2 .
Flutter 2?
:
Dart 2.12 c «Sound null safety»;
«Flutter for web»;
«Flutter for desktop».
, Flutter 2 , , , , api ?
Web Desktop , «sound null safety» . «sound null safety» ? «Sound null safety» - , Dart 2.12, Flutter 2.0. «null safety», . .
«Sound null safety» Dart null. null , :
. , , , null, « » , «NoSuchMethodError».
«Sound null safety», :
, Dart :
Null , . String, . , , , null .
- , null. - String?. : , , , .
:
makeBurger(String burger, [String? meat]) {
if (meat != null) {
print('$burger with $meat');
} else {
print('Vegan $burger'); }
}
«?» , null .
Flutter 2. , , — pub.dev. 85% -250 pub.dev «null safety». , , , , pub.dev.
, , Dart Flutter :
flutter upgrade
Flutter’ Dart 2.12.
SDK, Flutter Dart, . AndroidStudio Settings->Plugins. “Update”. .
, , , «null safety». :
dart pub outdated --mode=null-safety
, , pubspec.yaml, . , , , «null safety», . 5 .
Dart , :
dart pub upgrade --null-safety
, …
, device_id «null safety». pub.dev , : 2019. , http ID . , «null safety» , ID , - platform_device_id. , . platform_device_id pubspec.yaml device_id. .
, !
: pubspec.yaml, :
dart pub get
dart pub upgrade
.
: . post() get() http uri, String Uri. Uri.parse().
SDK, , - .
, :
dart migrate
, , , “ ”, , «null safety».
- , . , , .
. - «?» , nullable.
/* no valid migration */
, null, .
, , nullable title:
final, ;
, .
«Add…», String /*!*/, , , non-nullable, , , . , , «meter.customName» ButtonItem «!».
, , , nullable, non-nullable , «!». «» , non-nullable, nullable. «!» null-aware , «?.», «??», «!.» ( ).
ComboMeal(Drink? drink) {
drink!.addIce(); //
}
ComboMeal(null);
«!» , , , «!» , - .
«!» null, . , , meters:
, «!».
, null «» non –nullable . :
ComboMeal(Drink drink) {
if (drink.bestTemperature != null) {
keepTemperature(drink.bestTemperature); //
}
}
ComboMeal(Drink drink) {
int? bestTemperature = drink.bestTemperature;
if (bestTemperature!= null) {
keepTemperature(bestTemperature); // null safety
}
}
, , - , . , .
«?.» – null, . addIce() . , , ?
ComboMeal(Drink? drink) {
drink?.addIce(); // addIce
}
...
ComboMeal(null);
«!» , , «??», null .
ComboMeal(Drink? drink) {
keepTemperature(drink.bestTemperature ?? 70);
}
late.
late nullable , , null . , «burgerName» nullable .
class ComboMeal {
String burgerName; //
void comboWithCheeseburger() {
burgerName = 'heeseburger';
}
void comboWithChickenBurger() {
burgerName = 'Chicken burger';
}
getComboMealName() {
return 'ComboMeal with ' + burgerName;
}
}
, «burgerName» null .
class ComboMeal {
String? burgerName;
void comboWithCheeseburger() {
burgerName = 'heeseburger';
}
void comboWithChickenBurger() {
burgerName = 'Chicken burger';
}
getComboMealName() {
return 'Combo meal with ' + burgerName!;
}
}
late nullable.
class ComboMeal {
late String burgerName; //null safety
void comboWithCheeseburger() {
burgerName = 'heeseburger';
}
void comboWithChickenBurger() {
burgerName = 'Chicken burger';
}
getComboMealName() {
return 'Combo Meal with ' + burgerName;
}
}
ComboMeal comboMeal = ComboMeal();
comboMeal.comboWithCheeseburger();
print(comboMeal.getComboMealName());
, . , , «LateInitializationError» , «burgerName» .
late «» .
class ComboMeal {
late String burgerName = _getSurpriseName();
}
«burgerName» «ComboMeal», . , , , .
? 1200 . - . “Apply Migration”, , .
, . , .
, , /* no valid migration */. , null. .
Dart. :
List<String> words = List<String>();
- , , , null. , nullable . – List.empty(), List.generate(), List.fill(), []. .
, , . , .
, .
100% . , , - - , «null safety». , - , . , , , , .
/ nullable non-nullable, , . nullable « ». , null. , json- , , . , , response- nullable. , .
«late» , . «late», nullable, , , :
.
«null-safety» Dart Dart Flutter , , nullable non-nullable. , Dart 2.12 - nullable non-nullable, non-nullable , nullable .
, . , , . !
P.S. «»
, Flutter 2. «», «».
«» . : , , - . .