Flutter 原生能力集成指南

Flutter 原生能力集成指南

一、拍照与相册选取
  1. 推荐方案

    • 简单拍照/选图 :使用 image_picker 插件(调用系统相机或相册)。
    • 自定义相机界面 :使用 camera 插件(嵌入相机预览到 Flutter Widget)。
  2. 原生端配置

    • iOSios/Runner/Info.plist):

      xml 复制代码
      <key>NSCameraUsageDescription</key>
      <string>App需要您的同意,才能访问相机进行拍照</string>
      <key>NSPhotoLibraryUsageDescription</key>
      <string>App需要您的同意,才能访问相册选择图片</string>
      <key>NSMicrophoneUsageDescription</key>
      <string>App需要您的同意,才能访问麦克风录制视频</string>
    • Androidandroid/app/src/main/AndroidManifest.xml):

      xml 复制代码
      <!-- 相机权限 -->
      <uses-permission android:name="android.permission.CAMERA" />
      <!-- 存储权限(Android 11 及以下) -->
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

二、蓝牙能力(低功耗蓝牙 BLE)
  1. 推荐方案

    • 使用 flutter_blue_plus 插件(支持设备扫描、连接、特征值读写)。
  2. 原生端配置

    • iOSios/Runner/Info.plist):

      xml 复制代码
      <key>NSBluetoothAlwaysUsageDescription</key>
      <string>App需要使用蓝牙来连接您的智能设备</string>
      <key>NSBluetoothPeripheralUsageDescription</key>
      <string>App需要使用蓝牙来连接您的智能设备</string>
      <!-- 后台蓝牙连接 -->
      <key>UIBackgroundModes</key>
      <array>
          <string>bluetooth-central</string>
      </array>
    • Androidandroid/app/src/main/AndroidManifest.xml):

      xml 复制代码
      <!-- Android 11 及以下 -->
      <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
      <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      <!-- Android 12 及以上 -->
      <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
      <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

三、手动实现原生能力(Platform Channel)

若需集成冷门硬件(如串口设备、工业打印机):

  1. Flutter(Dart)端

    dart 复制代码
    const platform = MethodChannel('com.example.app/my_custom_hardware');
    final String result = await platform.invokeMethod('openHardware');
  2. Android(Kotlin)端MainActivity.kt):

    kotlin 复制代码
    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.app/my_custom_hardware").setMethodCallHandler { call, result ->
        if (call.method == "openHardware") {
            val success = myNativeHardwareCode() // 调用原生API
            result.success("Hardware Opened")
        } else {
            result.notImplemented()
        }
    }
  3. iOS(Swift)端AppDelegate.swift):

    swift 复制代码
    let channel = FlutterMethodChannel(name: "com.example.app/my_custom_hardware", binaryMessenger: controller.binaryMessenger)
    channel.setMethodCallHandler { call, result in
        if call.method == "openHardware" {
            // 调用iOS原生API
            result("Hardware Opened")
        } else {
            result(FlutterMethodNotImplemented)
        }
    }

四、其他依赖原生能力的场景
类别 功能 推荐插件
硬件与传感器 地理位置 geolocator, location
陀螺仪/加速度计 sensors_plus
生物识别(FaceID/TouchID) local_auth
NFC 读写 nfc_manager
系统级服务 推送通知 firebase_messaging
后台任务 workmanager
内购支付 in_app_purchase
深度链接(Deep Link) uni_links, go_router
多媒体 音视频播放 video_player, chewie
录音 record, flutter_sound

总结
  • 开发占比:80% Dart/Flutter UI 开发 + 20% 原生平台配置(权限、依赖、证书)。
  • 核心能力 :掌握 Platform Channel 是进阶高级 Flutter 开发者的关键。
  • 最佳实践:优先使用社区维护良好的插件,复杂场景需手动编写原生代码集成。
相关推荐
GitLqr17 小时前
iOS 27 强制要求 UISceneDelegate:UIKit 和 Flutter 开发者该如何应对?
flutter·ios·全栈
蜡台1 天前
Flutter HTTP 请求完整详解
网络协议·flutter·http·dart
9765033351 天前
iOS 上架/审核 4.3a Cocos 2026最新方案解读
flutter·ios·swift·cocos2d·ios开发
FungLeo1 天前
Flutter 接入 Alice 调试浮窗:一个顶层 final 抢跑,把 release 网络整没了
网络·flutter
恋猫de小郭2 天前
Flutter hit,一个可以灵活控制溢出点击的第三方包
android·前端·flutter
蜡台3 天前
Flutter Container 与装饰完整讲解
android·javascript·flutter·dart
杉氧3 天前
跨平台持久化:Flutter 本地数据库的多线程安全与架构设计实践
android·前端·flutter
yuanlaile3 天前
Flutter 开发鸿蒙 App 踩坑总结,一套完整实战学习方案分享
flutter·harmonyos·flutter开发鸿蒙·flutter开发鸿蒙实战·flutter ai实战·鸿蒙 ai实战
1001101_QIA4 天前
flutter打包流程
flutter
GitLqr4 天前
Flutter FocusNode 实战指南:玩转键盘焦点与用户输入体验
android·flutter·ios