我们正在测试从一个带有摄像头的简单的颤振应用程序中调用本地代码。
但是,一个错误发生在我们调用availableCameras()时,这与我们的本机集成代码无关。
MissingPluginException (MissingPluginException(No implementation found for method availableCameras on channel plugins.flutter.io/camera_android))
DartPluginRegistrant.ensureInitialized();
WidgetsFlutterBinding.ensureInitialized();
var cameras = await availableCameras();
我们降低了相机的版本,但没有改进。当然,我们每次都做flutter clean
和flutter pub get
,并且重新启动Visual和Android。
pubspec.yaml
dependencies:
flutter:
sdk: flutter
camera: ^0.10.0+4
# camera: 0.9.7+1
path_provider: ^2.0.11
path: ^1.8.2
# dependency_overrides:
# camera_android: 0.9.7+1
# camera_avfoundation: 0.9.7+1
我们正在测试它来调用本机代码。这个问题在我们试过之前并没有发生。所以我们认为这是一个可能的原因。我们怀疑一个重复的频道名称,并改变它包括我们的域名,但这并没有改善的东西。
class AppInfo {
static const MethodChannel _channel = MethodChannel('appInfo');
static Future<String?> get appVersion async {
final String? version = await _channel.invokeMethod('getAppVersion');
return version;
}
}
MainActivity.kt
package com.xxx.xxxx
import android.content.pm.PackageManager
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import kotlinx.coroutines.ExperimentalCoroutinesApi
class MainActivity : FlutterActivity() {
private val CHANNEL = "appInfo"
@OptIn(ExperimentalCoroutinesApi::class)
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
CHANNEL
).setMethodCallHandler { call, result ->
if (call.method == "getAppVersion") {
try {
val pInfo =
applicationContext.packageManager.getPackageInfo(context.packageName, 0)
var version = pInfo.versionName
result.success("${pInfo.versionName}");
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
result.notImplemented()
}
} else {
result.notImplemented()
}
}
}
}
iOS版本没有这个问题。
AppDelegate.swift
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
let helloMethodChannel = FlutterMethodChannel(name: "appInfo",binaryMessenger: controller as! FlutterBinaryMessenger)
helloMethodChannel.setMethodCallHandler({
(call:FlutterMethodCall,result:FlutterResult) -> Void in
switch call.method{
case "getAppVersion":
result(Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString") as? String)
default:
result("iOS" + UIDevice.current.systemVersion)
}
})
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
我们还能尝试什么?
颤振医生-v
[✓] Flutter (Channel stable, 3.3.6, on macOS 12.6 21G115 darwin-x64, locale en-JP)
• Flutter version 3.3.6 on channel stable at /Users/ganessa/fvm/versions/stable
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 6928314d50 (7 days ago), 2022-10-25 16:34:41 -0400
• Engine revision 3ad69d7be3
• Dart version 2.18.2
• DevTools version 2.15.0
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
• Android SDK at /Users/ganessa/src/android-sdks
• Platform android-33, build-tools 33.0.0
• Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 13F100
• CocoaPods version 1.11.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2021.2)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
[✓] VS Code (version 1.72.2)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.52.0
[✓] Connected device (4 available)
• SHV43 (mobile) • XXXXXXXXXXXXXXX • android-arm64 • Android 9 (API 28)
• iPhone SE2 MS (mobile) • XXXXXXXX-XXXXXXXXXXXXXXXX • ios • iOS 15.6.1 19G82
• macOS (desktop) • macos • darwin-x64 • macOS 12.6 21G115 darwin-x64
• Chrome (web) • chrome • web-javascript • Google Chrome 107.0.5304.87
[✓] HTTP Host Availability
• All required HTTP hosts are available
• No issues found!
发布于 2022-11-03 02:47:37
我无意中删除了GeneratedPluginRegistrant.registerWith(flutterEngine)
。我们把它添加到configureFlutterEngine()
中,我们的应用程序就像预期的那样工作。
相机包的版本也与此无关。
发布于 2022-11-03 03:30:24
转到Manifest文件,为相机示例添加正确的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
别忘了加
android:requestLegacyExternalStorage="true"
https://stackoverflow.com/questions/74285917
复制相似问题