Null Safety な Dart/Flutter パッケージを pub.dev に公開する

2 min read読了の目安(約1800字

公開しました。

https://pub.dev/packages/iso_calendar/versions/1.0.0-nullsafety.0

Dart/Flutter のパッケージの Null Safety 化が進んでおり、ささやかな機能ながら自分が公開しているパッケージも対応しておこうと思い実施した作業の記録です。

  1. Flutter を channel beta に切り返る
  2. pubspec.yaml に記載の SDK のバージョンを ">=2.12.0-0 <3.0.0" にする
  3. 依存パッケージがあれば nullsafety バージョンを pubspec.yaml で指定する
  4. fluter analyze でエラーが出ないことを確認する
  5. バージョンを x.x.x-nullsafety.x にして flutter pub publish する

なお詳細な手順および情報は下記に詳しいです。

https://dart.dev/null-safety/migration-guide

https://medium.com/flutter/announcing-dart-null-safety-beta-4491da22077a

Flutter version の切り替え

Null Safe が利用できるのは beta チャンネルのバージョンです。下記のコマンドで切り替え。

flutter channel beta
flutter upgrade

pubspec.yaml に記載している sdk のバージョンを修正します。

environment:
  sdk: ">=2.12.0-0 <3.0.0"

依存パッケージのバージョン修正

何らかのパッケージに依存している場合、 pubspec.yaml のバージョン指定を nullsafety 版にします。

今回は meta を利用していたので、修正。

dependencies:
  meta: ^1.3.0-nullsafety.6

コードの修正

既存コードが Null Safe に違反していないかどうかは flutter analyze を利用すれば検知できるので、あれば対応します。

違反してないだろう、と思っていたらしてました。

class IsoCalendar {
  IsoCalendar._({
    // 初期値を明示するように怒られる
     this.year,
     this.weekNumber,
     this.dateTime,
  });
  // ...
}

@requiredrequired にすることでエラーに対応できます。今回は外部に出ないところだったので named parameters をやめて positional parameters に変更して対処してしまいました。

class IsoCalendar {
  IsoCalendar._(
    this.year,
    this.weekNumber,
    this.dateTime,
  );
  // ...
}

プレリリースバージョンとして公開する

パッケージのバージョンをプレリリースバージョンとして公開します。バージョニングは x.x.x-nullsafety.x の規則性で行うのがよいようです。

version: 1.0.0-nullsafety.0

移行期のために nullsafety じゃない版もメンテできるようにしておきます。僕の場合は ひとまず nullsafety ブランチに切り分けておきました。

ここまでできたら publish できます。

flutter pub publish

成功すると Null Safety バッジ(?)が貰えます。

以上。