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 开发者的关键。
  • 最佳实践:优先使用社区维护良好的插件,复杂场景需手动编写原生代码集成。
相关推荐
麒麟ZHAO2 小时前
鸿蒙flutter第三方库适配 - 新闻阅读应用
flutter·华为·harmonyos
麒麟ZHAO2 小时前
鸿蒙flutter第三方库适配 - 服务端驱动UI应用
flutter·ui·华为·harmonyos
空中海3 小时前
5.4 WebSocket 与实时通信
网络·websocket·网络协议·flutter
见山是山-见水是水3 小时前
鸿蒙flutter第三方库适配 - 收藏管理应用
flutter·华为·harmonyos
麒麟ZHAO3 小时前
鸿蒙flutter第三方库适配 - 路由导航应用
flutter·华为·harmonyos
2401_839633913 小时前
鸿蒙flutter第三方库适配 - 时间线应用
flutter·华为·harmonyos
见山是山-见水是水3 小时前
鸿蒙flutter第三方库适配 - 在线文档阅读器
flutter·华为·harmonyos
麒麟ZHAO3 小时前
鸿蒙flutter第三方库适配 - 文件压缩工具
flutter·华为·harmonyos
yeziyfx3 小时前
Flutter中的圆角按钮实现方案
flutter