ぽぴなび

知って感動した技術情報・生活情報や買ってよかったものの雑記です。

Flutterのアップグレード対応

Flutterを1.17から1.22 betaにアップグレードする際につまづいたのでメモ。

すごくたくさん警告とかが出て諦めかけていたが、以下の2点だけ対応すれば一応動いた。

Podfileが古いよ問題

Flutter 1.20からPodfileの書き方が変わったらしく、それ以前の書き方だと警告が出る模様。

特に書き換えた覚えがなければ自動で生成されるので、消してしまえばOK。

Firebaseとかパッケージの関係でPodfileを書き換えている場合は、以下を参考に修正する。

Move logic from user project's Podfile to a Ruby script in Flutter tools · Issue #45197 · flutter/flutter · GitHub

参考記事

Warning: Podfile is out of date を解決!|kyklades|note

パッケージのコードでエラー出ちゃう問題

エラーが出たのは以下の2つのパッケージ

  • network_to_file_image
  • extended_text_field

どちらもIssueが上がっているが、対処し切れていない模様。

_MockHttpClientRequest missing abort implementation · Issue #18 · marcglasberg/network_to_file_image · GitHub

The non-abstract class 'ExtendedEditableTextState' is missing implementations for these members: - TextInputClient.showAutocorrectionPromptRect · Issue #64 · fluttercandies/extended_text_field · GitHub

暫定対処方法としては、/flutter/.pub-cache/hosted/pub.dartlang.org/network_to_file_image-2.3.5/lib/配下にあるコードを編集して該当部分を修正する。

今回の2つのパッケージのエラーは、どちらも抽象クラスの関数が実装されていないよというエラーだったので、継承元の抽象クラスを調べて引数の型とかを調べて、空の関数を定義して終わり。

以下はエラーログと見方。(network_to_file_image)

上の_MockHttpClientRequest' is missing implementations for these members: HttpClientRequest.abort_MockHttpClientRequestクラスに継承元のHttpClientRequestabortが定義されていないよと言っている。

下のContext: 'HttpClientRequest.abort' is defined here. void abort([Object? exception, StackTrace? stackTrace]);

    // どのファイルのどのクラスで、なんという関数が定義されていないかがわかる
    // この例では抽象クラスHttpClientRequestのabort関数が定義されていない
    /flutter/.pub-cache/hosted/pub.dartlang.org/network_to_file_image-2.3.1/lib/network_to_file_image.dart:407:7: Error: The non-abstract class
    '_MockHttpClientRequest' is missing implementations for these members:
     - HttpClientRequest.abort
    Try to either
     - provide an implementation,
     - inherit an implementation from a superclass or mixin,
     - mark the class as abstract, or
     - provide a 'noSuchMethod' implementation.

    // 定義しないといけない関数の引き数とかがわかる
    class _MockHttpClientRequest extends HttpClientRequest {
          ^^^^^^^^^^^^^^^^^^^^^^
    org-dartlang-sdk:///third_party/dart/sdk/lib/_http/http.dart:2045:8: Context: 'HttpClientRequest.abort' is defined here.
      void abort([Object? exception, StackTrace? stackTrace]);