A flutter module receiving and returning parameters between native Android and iOS

flutter_module

  • Exemplo de um módulo flutter recebendo e devolvendo parametros entre sistemas Android (Kotlin) e iOS (Swift) Nativos.

Resultado

Configurando projeto android (Kotlin)

  • Criar um módulo em flutter:
flutter create -t module --org br.com.megamil flutter_module
  • Modifique o build.gradle (app) adicione o trecho abaixo em “buildTypes”:

buildTypes {
    ...
    profile {
        initWith debug
    }
}
  • No mesmo build.gradle (app) adicione o trecho abaixo em “dependencies”

dependencies {
    ...
    debugImplementation 'br.com.megamil.flutter_module:flutter_debug:1.0'
    profileImplementation 'br.com.megamil.flutter_module:flutter_profile:1.0'
    releaseImplementation 'br.com.megamil.flutter_module:flutter_release:1.0'
}
  • Modifique o settings.gradle, adicione os maven como no exemplo abaixo, o endereço para pasta “repo” deve apostar para onde está a biblioteca exportada

dependencyResolutionManagement {
    String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url '../../build/host/outputs/repo'
        }
        maven {
            url "$storageUrl/download.flutter.io"
        }
    }
}
  • Para exportar para android:
flutter build aar

Preparando para chamar o fluxo

  • Adicione no AndroidManifest.xml essa activity

<activity
    android:name="io.flutter.embedding.android.FlutterActivity"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize" />

Configurando projeto ios (Swift)

  • Configurar Podfile Atualize o “flutter_application_path” para o caminho até a pasta “.ios” que está no flutter. No caso aqui está assim: flutter_module/.ios e o ios que vai usar o módulo está aqui dentro também, mas em outra subpasta: flutter_module/examples/ios/UsingFlutterModule por isso volto 3 níveis “../../../”

flutter_application_path = '../../../'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

Também adicione:

install_all_flutter_pods(flutter_application_path)

e o trecho

post_install do |installer|
flutter_post_install(installer) if defined?(flutter_post_install)
end

Exemplo completo:

flutter_application_path = '../../../'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

target 'UsingFlutterModule' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  install_all_flutter_pods(flutter_application_path)
  # Pods for UsingFlutterModule

end

post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
end
  • Para exportar para ios:
flutter build ios-framework

GitHub

View Github