X

Call Kotlin method from Flutter(FlutterからKotlinのコード内のメソッドを呼び出す)

&NewLine;<p>MainActivity&period;kt &lpar;Kotlin&rpar;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"kotlin" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">package &lpar;your&period;app&rpar;&NewLine;&NewLine;import android&period;content&period;res&period;Configuration&NewLine;import android&period;os&period;Bundle&NewLine;import android&period;os&period;PersistableBundle&NewLine;import androidx&period;annotation&period;NonNull&NewLine;import io&period;flutter&period;embedding&period;android&period;FlutterActivity&NewLine;import io&period;flutter&period;embedding&period;engine&period;FlutterEngine&NewLine;import io&period;flutter&period;plugins&period;GeneratedPluginRegistrant&NewLine;&NewLine;import io&period;flutter&period;embedding&period;android&period;FlutterFragment&NewLine;import io&period;flutter&period;plugin&period;common&period;MethodCall&NewLine;import io&period;flutter&period;plugin&period;common&period;MethodChannel&NewLine;&NewLine;import io&period;flutter&period;plugin&period;common&period;MethodChannel&period;MethodCallHandler&NewLine;import io&period;flutter&period;plugin&period;common&period;MethodChannel&period;Result&NewLine;&NewLine;import io&period;flutter&period;plugin&period;platform&period;PlatformViewsController&NewLine;&NewLine;&NewLine;class MainActivity&colon; FlutterActivity&lpar;&rpar; &lbrace;&NewLine; override fun configureFlutterEngine&lpar;&commat;NonNull flutterEngine&colon; FlutterEngine&rpar; &lbrace;&NewLine; GeneratedPluginRegistrant&period;registerWith&lpar;flutterEngine&rpar;&NewLine;&NewLine; MethodChannel&lpar;flutterEngine&period;dartExecutor&comma; CHANNEL&rpar;&period;setMethodCallHandler &lbrace; methodCall&comma; result ->&NewLine; val args &equals; methodCall&period;arguments&NewLine; when &lpar;methodCall&period;method&rpar; &lbrace;&NewLine; "method1" -> &lbrace;&NewLine; val number &equals; 10&NewLine; result&period;success&lpar;number&rpar;&NewLine; &rcub;&NewLine; &rcub;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine; companion object &lbrace;&NewLine; private val CHANNEL &equals; "com&period;your&period;app&period;flutter&sol;method1"&NewLine; &rcub;&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>Dart<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"js" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">static const platform &equals; const MethodChannel&lpar;'com&period;your&period;app&period;flutter&sol;method1'&rpar;&semi;&NewLine;&NewLine;Future&lt&semi;void> &lowbar;Method1&lpar;&rpar; async&lbrace;&NewLine; int &lowbar;number&semi;&NewLine; try &lbrace;&NewLine; final int result &equals; await platform&period;invokeMethod&lpar;'method1'&rpar;&semi;&NewLine; &lowbar;number &equals; result&semi;&NewLine;&NewLine; setState&lpar;&lpar;&rpar; &lbrace;&NewLine; number &equals; &lowbar;number&semi;&NewLine; &rcub;&rpar;&semi;&NewLine;&NewLine; &rcub; on PlatformException catch &lpar;e&rpar;&NewLine; &lbrace;&NewLine; setState&lpar;&lpar;&rpar; &lbrace;&NewLine; number &equals; -1&semi;&NewLine; &rcub;&rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;int number&semi;&NewLine;&NewLine;Widget ShowNumber&lpar;&rpar;&NewLine;&lbrace;&NewLine; Text&lpar;number&period;toString&lpar;&rpar;&rpar;&semi;&NewLine;&rcub;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>&lowbar;Method1&lpar;&rpar; を呼び出すと Kotlin側のmethod1 -&gt&semi; &lbrace;&rcub; が実行され、結果が Flutter側の result に戻ります。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>String testString &equals; &&num;8220&semi;abc&&num;8221&semi;&semi;<br>platform&period;invokeMethod&lpar;&&num;8216&semi;method1&&num;8217&semi;&comma; testString&rpar;&semi; でtestStringを引数にできます。<br>Kotlin側の methodCall&period;arguments で引数を取得できます。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">io&period;flutter&period;app&period;FlutterActivity の FlutterActivity には FlutterEngine が存在しないのでGeneratedPluginRegistrant&period;registerWith&lpar;this&rpar; ではregistできません。またMethodCall の flutterView の代わり&lpar;java では getFlutterView&lpar;&rpar; &rpar;に flutterEngine&period;dartExecutor を使用します。<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p><del>2019-12-05の時点で app&sol;build&period;gradle 内で Cannot resolve symbol &&num;8216&semi;GradleException&&num;8217&semi; が、MainActivity&period;kt で Unresolved reference&colon; NonNull がそれぞれ赤字で表示されます。2019-12-07のAndroid Studio アップデートとFlutter Pluginのアップデートで表示されなくなったようです。<&sol;del><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-embed is-type-link is-provider-setokynet-blog-wordpress-com"><div class&equals;"wp-block-embed&lowbar;&lowbar;wrapper">&NewLine;<a href&equals;"https&colon;&sol;&sol;setokynet&period;wordpress&period;com&sol;2019&sol;12&sol;14&sol;gradleexception-androidx-annotation-nonnull&sol;&quest;preview&lowbar;id&equals;2633&&num;038&semi;preview&lowbar;nonce&equals;a54d265f2f&&num;038&semi;post&lowbar;format&equals;standard&&num;038&semi;&lowbar;thumbnail&lowbar;id&equals;-1&&num;038&semi;preview&equals;true">GradleException&comma; androidx&period;annotation&period;NonNull<&sol;a>&NewLine;<&sol;div><figcaption>Kotlin Complier の Kotlin JVM Version を 1&period;6 から 1&period;8 に変更したところエラーがなくなりました。<&sol;figcaption><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p>こちらのサイトの情報が参考になりました。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p><a href&equals;"https&colon;&sol;&sol;github&period;com&sol;flutter&sol;flutter&sol;issues&sol;41102">https&colon;&sol;&sol;github&period;com&sol;flutter&sol;flutter&sol;issues&sol;41102<&sol;a><br>https&colon;&sol;&sol;qiita&period;com&sol;tasogarei&sol;items&sol;bf3761139d46c43d5896<br>https&colon;&sol;&sol;qiita&period;com&sol;unsoluble&lowbar;sugar&sol;items&sol;ae42b5faf52a491f6470<br>https&colon;&sol;&sol;flutter&period;keicode&period;com&sol;basics&sol;method-channel-java&period;php<&sol;p>&NewLine;

kawano:
Related Post