MethodChannel em Flutter. Como acessar o código nativo (Android/IOS) no flutter usando MethodChannel.
Tempo de leitura: 2 minutes
Usei MethodChannel para acessar o código nativo do Android.
Siga passo a passo:
Passo #1: Crie um projeto Flutter e escreva o código no arquivo main.dart.
Veja o código abaixo, existe _methodChannel é um objeto de MethodChannel com o nome de MethodChannel, lembre-se que o mesmo nome de MethodChannel deve estar no código nativo.
Future<void> _getDocuments() async { MethodChannel _methodChannel = MethodChannel('flutter/MethodChannelDemo'); List<dynamic> documentList=[""]; try { documentList = await _methodChannel.invokeMethod( "Documents"); } on PlatformException catch(e){ print("exceptiong"); } documentList.forEach((document) { print("Document: $document"); // pesquise no Logcat "Document" }); }
Passo 2: Escreva o código em Android Native em Kotlin.
- Usei várias vezes o MethodChannel e obtive duas diferenças.
- Nota: – se você estiver usando “override fun configureFlutterEngine”, então usou “flutterEngine.dartExecutor” no parâmetro MethodChannel de BinaryMessenger. ou se estiver usando “override fun onCreate”, use “flutterView” no parâmetro MethodChannel de BinaryMessenger.
package com.anidhisoftware.methodchannel_demo import android.os.Environment import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel import io.flutter.plugins.GeneratedPluginRegistrant import java.io.File import java.lang.reflect.Method import java.util.* import kotlin.collections.ArrayList class MainActivity: FlutterActivity() { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine); MethodChannel(flutterEngine.dartExecutor,"flutter/MethodChannelDemo").setMethodCallHandler{ call,result -> if (call.method=="Documents"){ val folder = File(Environment.getExternalStorageDirectory().path + "/Download") val allFiles: Array<File> = folder.listFiles() val list = Arrays.asList(allFiles) var imgs = ArrayList<String>() if (list.size >= 1) { for (i in 0..list[0].size - 1) { imgs.add(list[0][i].toString()) } } if (imgs.size <= 0) { result.error("Empty", "No Documents.", null); } else { result.success(imgs); } } } } }
- Tipos de dados Flutter. Você pode retornar os tipos de dados abaixo do código nativo.
Passo 3: Se você precisar de alguma funcionalidade que exija permissão do usuário, escreva a permissão no arquivo manifest.xml e a permissão de tempo de execução no flutter. Como aqui estamos acessando arquivos da pasta Download, preciso de permissão de leitura.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Para ver o código, veja no meu Github: (Git)