【Flutter】3.35にアップデートするためにしたことをまとめてみたよ

Dart

概要

どうも、@daiki1003です!

さぁ、こちらも毎度お馴染みのアップデート記事となっております。

Flutter 3.35でアップデートされた内容に関しては後ほど記事を書きたいと思います。

執筆時アップデート前環境

名前バージョン
macOSSequoia 15.6
Flutter3.32.8

⏱️ アップデートレベル

3

理由

  • Radio は少しだけ作業が必要
  • 他は素直に従うだけ

Flutter

argument_type_not_assignable

この動きは最近良くあって、XxxThemeをXxxThemeDataに統一しようという流れですね。

// Before
ThemeData(
  bottomAppBarTheme: BottomAppBarTheme(
    ...,
  ),
)

// After
ThemeData(
  bottomAppBarTheme: BottomAppBarThemeData(
    ...,
  ),
)

deprecated_member_use

Radio.groupValue/onChanged

地味に使いづらかったのでこれは本当にナイスアプデですね!

// Before
Column(
  children: [
    Radio<int>(
      value: 1,
      groupValue: currentValue,
      onChanged: (newValue) {
        
      },
    ),
    Radio<int>(
      value: 2,
      groupValue: currentValue,
      onChanged: (newValue) {
  
      },
    ),
    ...ラジオ表示数分続く
  ],
)

// After
RadioGroup<int>(
  groupValue: currentValue,
  onChanged: (newValue) {
  },
  child: Column(
    children: [
      Radio<int>(value: 1),
      Radio<int>(value: 2),
    ],
  ),
),

RadioListTile.groupValue/onChanged

上とまとめてもよかったのですが、迷う人もいると思うので敢えてこちらも載せます。

// Before
Column(
  children: [
    RadioListTile<int>(
      value: 1,
      groupValue: currentValue,
      onChanged: (newValue) {
      },
    ),
    RadioListTile<int>(
      value: 2,
      groupValue: currentValue,
      onChanged: (newValue) {
      },
    ),
  ],
)

// After
RadioGroup(
  groupValue: currentValue,
  onChanged: (newValue) {
  },
  child: Column(
    children: [
      RadioListTile<int>(value: 1),
      RadioListTile<int>(value: 2),
    ],
  ),
)

AppBarTheme.color

// Before
ThemeData(
  appBarTheme: AppBarTheme(
    color: Colors.white,
  ),
)

// After
ThemeData(
  appBarTheme: AppBarTheme(
    backgroundColor: Colors.white,
  ),
)

DropdownButtonFormField.value

// Before
child: DropdownButtonFormField<SomeType>(
  value: SomeType.anything,
),

// After
child: DropdownButtonFormField<SomeType>(
  initialValue: SomeType.anything,
)

Matrix4.translate

// Before
Matrix4.identity()
..translate(0.1, 0.1)
..scale(maxScale);

// After
Matrix4.identity()
..translateByDouble(0.1, 0.1, 0, 0)
..scaleByDouble(maxScale, maxScale, maxScale, 1);

内部実装を見ると、元々指定していた第一引数をみて分岐をしているようです。

(Flutterの実装より)

@pragma('wasm:prefer-inline')
@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
@Deprecated('Use translateByVector3, translateByVector4, '
'or translateByDouble instead')
void translate(dynamic x, [double y = 0.0, double z = 0.0]) {
  if (x is Vector3) {
    translateByVector3(x);
  } else if (x is Vector4) {
    translateByVector4(x);
  } else if (x is double) {
    translateByDouble(x, y, z, 1.0);
  } else {
    throw UnimplementedError();
  }
}

unnecessary_this

前から警告が出ていたように思いますが、このタイミングで検出されたものもありました。

class SomeWonderfulClass {
  const SomeWonderfulClass({
    required this.value,
  });

  final int value;

  int add(int otherValue) {
    // Before
    return this.value + otherValue;

    // After
    return value + otherValue;
  }
}

avoid_types_as_parameter_names

そこまで多くの方に出る問題ではないかもしれませんが、既存のクラスと同名のクラス名をGenericsで利用した際に出ました。

// Before
class Some<Error extends SomeError> {
  ...
}

// After
class Some<TError extends SomeError> {
  ...
}

// または

import 'dart:core' hide Error;

class Some<Error extends SomeError> {
  ...
}

Dart

特になし

最後に

もし、他に対応が必要だった内容があればメンションなどで教えていただけると嬉しいです!

誰かのお役に立てば。

Twitterフォローお願いします

「次回以降も記事を読んでみたい!」
「この辺分からなかったから質問したい!」

そんな時は、是非Twitter (@daiki1003)Instagram (@ashdik_flutter)のフォローお願いします♪

Twitterコミュニティ参加お願いします

Twitterコミュニティ「Flutter lovers」を開設しました!
参加お待ちしております😁

☕️ Buy me a coffee

また、記事がとても役に立ったと思う人は
コーヒーを奢っていただけると非常に嬉しいです!
@daiki1003

コメント

タイトルとURLをコピーしました