meili_flutter 0.7.0
meili_flutter: ^0.7.0 copied to clipboard
Meili Flutter plugin
Meili Flutter Plugin #
The Meili Flutter Plugin allows you to integrate the Meili car rental experience into your Flutter applications on both iOS and Android.
Overview #
meili_flutter is a federated Flutter plugin that wraps the native Meili UX SDKs:
- Android native SDK: hosted as a Maven artifact on GitHub Packages at
meili-travel-tech/ux-native-android-sdk(requires auth). - iOS native SDK: distributed as a CocoaPod (
MeiliSDK) via a private spec repo atmeili-travel-tech/meili-ios-pods(requires SSH/HTTPS access).
Prerequisites #
| Requirement | Why |
|---|---|
Flutter SDK >=3.4.0 |
Minimum required by the plugin. |
| Android Studio / Xcode CLI tools | Needed for native builds. |
CocoaPods (gem install cocoapods) |
iOS dependency manager. |
GitHub Personal Access Token with read:packages scope |
Downloads the Android AAR from GitHub Packages. |
Membership in the meili-travel-tech GitHub org |
Both the iOS spec repo and Android Maven artifacts are under this org. Contact Meili to get access. |
1. Dart / pubspec setup #
dependencies:
meili_flutter: 0.3.1-beta.1
flutter pub get
This resolves the federated sub-packages automatically — you do not need to add meili_flutter_android or meili_flutter_ios manually.
2. Android setup #
2.1 Declare the Maven repository #
The Android SDK is served from a public Maven repository over GitHub Pages, so no credentials are required. Add it to your project-level android/build.gradle.kts:
allprojects {
repositories {
google()
mavenCentral()
maven { url = uri("https://meili-travel-tech.github.io/ux-native-android/") }
}
}
2.2 android/app/build.gradle.kts — NDK, minSdk + desugaring #
android {
ndkVersion = "27.0.12077973"
defaultConfig {
minSdk = 24
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
}
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}
ndkVersionmust be pinned exactly — usingflutter.ndkVersionmay cause a linker error.minSdk = 24is the floor required by the Meili Android SDK.- Core library desugaring is required. The Meili Android SDK's date and calendar logic uses
java.time, which is only native from API 26, so every consuming app must enable it. Without it the build fails withDependency 'meili.travel:ux-native-android-sdk' requires core library desugaring to be enabled.
Android 7 to 9 (API 24 to 28): supply a TLS 1.3 provider
Meili's endpoints accept TLS 1.3 only, and Android only added TLS 1.3 in Android 10 (API 29). On
Android 7, 8 and 9 the SDK cannot connect and the funnel opens on a blank screen, with
SSLHandshakeException: Handshake failed in logcat. If your minSdk is 29 or higher, skip this.
Add Conscrypt and register it as the first security provider in an Application subclass:
dependencies {
implementation("org.conscrypt:conscrypt-android:2.5.3")
}
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
Security.insertProviderAt(Conscrypt.newProvider(), 1)
}
}
and point <application android:name=".MainApplication"> at it in AndroidManifest.xml. The
example app does exactly this. Conscrypt adds about 2 MB on arm64 and works without Google Play
services; Play services' ProviderInstaller is an alternative for devices that have them.
2.3 android/settings.gradle.kts — Kotlin Compose plugin #
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.7.3" apply false
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" apply false // add this
}
2.4 MainActivity.kt #
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity : FlutterFragmentActivity()
If you leave
FlutterActivityhere you will get anIllegalStateExceptionat runtime when opening the Meili view.
3. iOS setup #
3.1 ios/Podfile #
platform :ios, '16.0'
source 'https://cdn.cocoapods.org/'
source 'git@github.com:meili-travel-tech/meili-ios-pods.git'
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
# ... rest of the standard Flutter Podfile unchanged
If you use a multi-account SSH setup, replace
git@github.com:with your Host alias e.g.git@github.com-meili:.
3.2 iOS deployment target #
Set IPHONEOS_DEPLOYMENT_TARGET = 16.0 in three places in ios/Runner.xcodeproj/project.pbxproj (Debug, Release, Profile), or via Xcode under Runner target → General → Minimum Deployments → iOS.
3.3 ios/Flutter/AppFrameworkInfo.plist #
<key>MinimumOSVersion</key>
<string>16.0</string>
3.4 Install pods #
cd ios && pod install --repo-update && cd ..
--repo-update is needed the first time to clone the private spec repo. Plain pod install is sufficient on subsequent runs.
4. Usage #
Full-screen modal (iOS and Android) #
This is the only supported way to present the booking flow. It opens as a modal over the current screen and works identically on both platforms.
import 'package:meili_flutter/meili_flutter.dart';
await Meili.openMeiliView(MeiliParams(
ptid: 'your-ptid',
env: 'prod',
flow: FlowType.direct,
));
Booking Manager #
await Meili.openMeiliView(MeiliParams(
ptid: 'your-ptid',
env: 'prod',
flow: FlowType.bookingManager,
additionalParams: AdditionalParams(
confirmationId: '1234ABCD',
lastName: 'Doe',
),
));
5. Troubleshooting #
| Symptom | Likely cause | Fix |
|---|---|---|
Could not find ... .aar during Gradle |
Maven repo URL missing, or the version isn't published yet | Check the build.gradle.kts repo block points to the public Pages URL and that the version exists. |
Unable to find a specification for MeiliSDK |
Missing source line in Podfile |
Add the private spec repo URL. |
pod install hangs on first run |
First-time SSH clone of spec repo | Confirm SSH key: ssh -T git@github.com. |
IllegalStateException ... requires FragmentActivity |
MainActivity still extends FlutterActivity |
Change to FlutterFragmentActivity. |
| NDK strip / linker errors | NDK version mismatch | Pin ndkVersion = "27.0.12077973". |
| Env vars set in terminal but not in Android Studio | macOS GUI apps don't load ~/.zshrc |
Move env vars to ~/.zshenv, relaunch Android Studio. |
Platform Support #
| Platform | Supported |
|---|---|
| Android | ✅ |
| iOS | ✅ |
Contributing #
Open issues or pull requests at github.com/meili-travel-tech/flutter_meili.