1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NullSafety対応後の環境で過去プロジェクトのアプリを動作させる

Last updated at Posted at 2024-02-11

NullSafety後の環境で過去のプロジェクトを動作させる

Flutter周りは今現在も頻繁にバージョンアップが行われており、最新環境で過去のプロジェクトをcloneしたときに動作しないことがある。
今回上記の問題に直面しながらも動作まで漕ぎ着けたので、行った対応をメモベースでまとめてみた。

pubspec.yamlで読み込んでいるライブラリのバージョンを更新する

pubspecでnull safety以前のsdkを指定している場合、pub getを行ったときに下記のようなエラーが出るため、sdkのバージョンをnull safety対応後のバージョンに指定する。

// エラー文
Resolving dependencies...
The lower bound of "sdk: '>=2.1.0 <3.0.0'" must be 2.12.0'
or higher to enable null safety.

The current Dart SDK (3.2.6) only supports null safety.

For details, see https://dart.dev/null-safety
exit code 65
environment:
-  sdk: ">=2.1.0 <3.0.0"
+  sdk: ">=3.2.6 <4.0.0"

廃止になったウィジェットが使われていたら修正する

// エラー文
The method 'FlatButton' isn't defined for the type '_StoryPageState'.
Try correcting the name to the name of an existing method, or defining a method named 'FlatButton'.

例えばFlatButtonなどのウィジェットは現在のバージョンでは廃止されているため、このような古いウィジェットが残っていたらビルドできない。
代替出来るウィジェットに修正する。(FlatButtonだったらElevatedButtonなどに書き換える)

Androidの場合

Build時に下記のWarningが出る場合は、 https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects の指示に従って修正する。
下記で具体的に変更を行った箇所をまとめた。

// Warning
──────────────────────────────────────────────────────────────────────────────
Your Flutter application is created using an older version of the Android
embedding. It is being deprecated in favor of Android embedding v2. To migrate
your project, follow the steps at:

https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects

MainActivity.java(もしくは.kt)の修正

\android\app\src\main\java\co\appbrewery\xxx(プロジェクト名)\MainActivity.java(もしくは.kt)を修正

// MainActivity.java
-import android.os.Bundle;
-import io.flutter.app.FlutterActivity;
+import io.flutter.embedding.android.FlutterActivity;
-import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
-  @Override
-  protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    GeneratedPluginRegistrant.registerWith(this);
-  }
 }

AndroidManifest.xmlの修正

android/app/src/main/AndroidManifest.xmlを修正

// AndroidManifest.xml
<application
-    android:name="io.flutter.app.FlutterApplication"
+    android:name="${applicationName}"

...

- <meta-data
-    android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
-    android:value="true" />

...

</activity>
    </application>
+    <meta-data
+        android:name="flutterEmbedding"
+        android:value="2" />
</manifest>

gradleのバージョンを変更

\android\gradle\wrapper\gradle-wrapper.propertiesを修正

// gradle-wrapper.properties
- distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip

\android\build.gradleを修正

// build.gradle
    dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.3'
+        classpath 'com.android.tools.build:gradle:7.3.0'
    }

compileSdkVersionの変更

\android\app\build.gradle(上記とは別ファイル)で、必要に応じてcompileSdkVersionを上げる。

// build.gradle
android {
-    compileSdkVersion 29
+    compileSdkVersion 31
    ...
    }

他でインポートしているモジュール次第でminSdkVersionを上げる必要もあるかも

build.gradleを変更したときにIDE上で下記のポップアップが出るので、yesを選択する

  • A build file was modified. Do you want to synchronize the Java classpath/configuration?
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?