[Flutter]Flutter×Firebaseで始めるモバイルアプリ開発 (技術の泉シリーズ(NextPublishing))をFlutter 2.0 Null-Safetyで動かしてみた

Flutter

はじめに

Amazonで期間限定キャンペーンで安くなっていた本を買ったのですが、Flutterのバージョンが古かったのでFlutter 2.0 Null-Safetyでも動作するか勉強がてら検証してみました。

またGitHubに公開しているので、参考にしてみてください。

対象の本

今回購入したのは以下の「Flutter×Firebaseで始めるモバイルアプリ開発 (技術の泉シリーズ(NextPublishing)) Kindle版」です。

環境

  • Flutter 2.0.6 Null-Safety

動かなかったポイント

プラグインが古い

pubspec.yamlのバージョンが古かったので、最新のものが使えるようにany記述に変更しました。

dependencies:
  flutter:
    sdk: flutter

  flutter_localizations:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  cloud_firestore: any
  firebase_auth: any
  firebase_core: any
  fluttertoast: any
  share: any

Null-Safety対応されていない

これは当たり前ですがNull-Safety対応されていないので地道に直す必要があります。

例)

                onSaved: (String? value) {
                  if (value != null) {
                    _data.user = value;
                  }
                },

またpubspec.yamlのDartのバージョンも変更が必要です。

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

状態管理でエラー

一部、コードが動作時にエラーになってしまうので対応しました。

class Splash extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    _getUser(context);
    return Scaffold(
...

class Splash extends StatefulWidget {
  const Splash();

  @override
  _SplashState createState() => _SplashState();
}

class _SplashState extends State<Splash> {
  @override
  void initState() {
    super.initState();

    Future(() {
      _getUser(context);
    });
  }

  @override
  Widget build(BuildContext context) {
    return const Scaffold(

Firestoreのルールに誤植がある

Firestoreのルールが間違っています。自分も最初気が付かなくて、1時間位悩みました。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/promise/{file} {
      allow read,create,delete,update: if request.auth.uid == userId;    
    }
  }
}

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/transaction/{file} {
      allow read,create,delete,update: if request.auth.uid == userId;    
    }
  }
}

ローカライズの対応がかなり変わっている

ローカライズプラグインのバージョンの影響で、導入方法がかなり変わっていました

まずプラグインの名前が「Flutter i18n」から「Flutter Intl」に変わっています。

次にpubspec.yamlに以下を記入し

dependencies:
  flutter:
    sdk: flutter

  flutter_localizations:
    sdk: flutter

[Tools]->[Flutter Intl]->[Initialize for the Project]を実行することで、自動生成ファイルが作成されるようになります。

コード自体の変更はあまりないですが、MaterialAppに技術するコードが以下のように変わっています。

... 
     localizationsDelegates: [
        S.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: S.delegate.supportedLocales,
...

.arbファイルの場所もres/valuesフォルダからlib/l10nフォルダに変更になっています。

最後に、日本語を追加する際は[Tools]->[Flutter Intl]->[Add Locale]で簡単に追加できるようになっています。

主な対応は以上です。

今回、対応しなかった項目

あんまり意味なさそうだったので、以下の内容は対応しませんでした。

  • 多言語化(正確には1つだけ対応しました)
  • 起動画面での画像表示(方法知っていたので対応しませんでした)
  • リリース系の設定(リリースするつもりがないので対応しませんでした。)

結果

無事、Flutter 2.0.6 Null-Safetyでも動作しました!

GitHub

自分が公開したコード

nobushiueshi/kashikari
Flutter×Firebaseで始めるモバイルアプリ開発 (技術の泉シリーズ(NextPublishing)) - nobushiueshi/kashikari

オリジナルのコード

chasibu/kasikari_memo
Contribute to chasibu/kasikari_memo development by creating an account on GitHub.

さいごに

Firestoreに苦手意識があったのですが、この本のおかげで軽減された気がします。

ぜひ、みなさんも勉強してみて下さい。

おすすめ参考書

コメント

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