2024年10月1日午前10時から午後6時までこのサイトのメンテナンスを行います。一時的にアクセスできなくなります。
カテゴリー: 未分類
サイトの更新
メンテナンスについて(2021-03-28)
メンテナンスについて
Call Kotlin method from Flutter(FlutterからKotlinのコード内のメソッドを呼び出す)
MainActivity.kt (Kotlin)
package (your.app) import android.content.res.Configuration import android.os.Bundle import android.os.PersistableBundle import androidx.annotation.NonNull import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.GeneratedPluginRegistrant import io.flutter.embedding.android.FlutterFragment import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result import io.flutter.plugin.platform.PlatformViewsController class MainActivity: FlutterActivity() { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine) MethodChannel(flutterEngine.dartExecutor, CHANNEL).setMethodCallHandler { methodCall, result -> val args = methodCall.arguments when (methodCall.method) { "method1" -> { val number = 10 result.success(number) } } } } companion object { private val CHANNEL = "com.your.app.flutter/method1" } }
Dart
static const platform = const MethodChannel('com.your.app.flutter/method1'); Future<void> _Method1() async{ int _number; try { final int result = await platform.invokeMethod('method1'); _number = result; setState(() { number = _number; }); } on PlatformException catch (e) { setState(() { number = -1; }); } } int number; Widget ShowNumber() { Text(number.toString()); }
_Method1() を呼び出すと Kotlin側のmethod1 -> {} が実行され、結果が Flutter側の result に戻ります。
String testString = “abc”;
platform.invokeMethod(‘method1’, testString); でtestStringを引数にできます。
Kotlin側の methodCall.arguments で引数を取得できます。
io.flutter.app.FlutterActivity の FlutterActivity には FlutterEngine が存在しないのでGeneratedPluginRegistrant.registerWith(this) ではregistできません。またMethodCall の flutterView の代わり(java では getFlutterView() )に flutterEngine.dartExecutor を使用します。
2019-12-05の時点で app/build.gradle 内で Cannot resolve symbol ‘GradleException’ が、MainActivity.kt で Unresolved reference: NonNull がそれぞれ赤字で表示されます。2019-12-07のAndroid Studio アップデートとFlutter Pluginのアップデートで表示されなくなったようです。
こちらのサイトの情報が参考になりました。
https://github.com/flutter/flutter/issues/41102
https://qiita.com/tasogarei/items/bf3761139d46c43d5896
https://qiita.com/unsoluble_sugar/items/ae42b5faf52a491f6470
https://flutter.keicode.com/basics/method-channel-java.php
Ubuntu で BIOS/UEFI の両方のモードで起動させる
この記事は下書きです
フォーマットしてパーティションを作成します。GPT方式でフォーマットします。512MBytesほどFAT32をEFIパーティションとして確保し、残りをLinux ex4方式で確保します。
Secure Boot を無効にして Ubuntu 18.04 (MBR)をインストールします。「インストールの種類」でそれ以外を選択して任意のパーティションにUbuntuをインストールします。
Ubuntuを起動後、端末からgrub-efi-amd64-binをインストールします。
sudo apt-get install grub-efi-amd64-bin
/usr/lib/grub/x86_64-efi/ のファイルを /EFI/BOOT にコピーします。ここでは先ほどのディスクをsdb、FAT(EFI)をsdb1、Linux ex4パーディションをsdb2とします。
sudo mkdir /efi
sudo mount /dev/sdb1 /efi
sudo mkdir -p efi/EFI/BOOT
sudo cp -r /usr/lib/grub/x86_64-efi efi/EFI/BOOT/
cp BOOTx64.EFI efi/EFI/BOOT
Ubuntuを再起動します。さらにSecure Bootを有効にします。ブートローダーのメニューが乱れるかもしれませんがEnterを押して起動します。
起動後、端末から Boot-Repair をインストールします。
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair
修復を開始する前に /usr/lib/grub/BOOT ディレクトリーは削除されます。cp で別のディレクトリーにコピーしておきます。 /usr/lib/grub.bak が作成されますが万が一のために行っておいてください。
Boot-Repair (ブート修復) を起動して高度なオプションを選択します。GRUBの位置タブのデフォルトで起動するOSをsdb2に設定します。別パーティションに/boot/efiを構成をチェックしてsdb2を選択します。