我正在實作 MethodChannel 以將值從 Flutter 端傳遞到 Kotlin Android 本機代碼。我遵循了這兩個教程,它們的操作與我復制的完全相同:https ://youtu.be/j0cy_Z6IG_c & https://youtu.be/XwwsI8vAHtk
我在 main.dart [Flutter] 中的 MethodChannel 實作如下:
class _MyHomePageState extends State<MyHomePage> {
static const frequencyChannel =
MethodChannel('com.somdipdey.eoptomizer/frequency');
...
...
Future setFrequencyLevelCPU0Max() async {
var sendMapMaxCPUFreq = <String, String>{
"LITTLECPUMaxFreq": _LITTLECPUFreq.text.toString()
};
final String frequencyLevelCPU0Max = await frequencyChannel.invokeMethod(
'setFrequencyLevelCPU0Max', sendMapMaxCPUFreq);
}
}
在 Kotlin 端,在 MainActivity.kt 中 MethodChannel 實作的代碼如下:
class MainActivity: FlutterActivity() {
private val OPTIMIZATION_CHANNEL = "com.somdipdey.eoptomizer/frequency"
private lateinit var channel: MethodChannel
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, OPTIMIZATION_CHANNEL)
channel.setMethodCallHandler { call, result ->
if (call.method == "setFrequencyLevelCPU0Max" || call.method == "setFrequencyLevelCPU0Min" || call.method == "setFrequencyLevelCPU4Min") {
var arguments = call.arguments() as Map<String,String>
var LITTLECPUMaxFreq = arguments["LITTLECPUMaxFreq"].toString() ?: "1766400"
setFrequencyLevelCPU0Max(LITTLECPUMaxFreq)
result.success("Optimizing frequencies on CPU0")
}
}
}
}
當我嘗試構建/運行專案時,我在 Kotlin 端收到以下錯誤:
MainActivity.kt: (27, 38): 型別不匹配:推斷型別是 Map<String, String>?但 Map<String, String> 是預期的
以下代碼行發生此錯誤:
var arguments = call.arguments() as Map<String,String>
我該如何解決這個問題?
uj5u.com熱心網友回復:
Kotlin 編譯器不能假定call.arguments()回傳非空值,因此正確的型別Map<String,String>?意味著您必須將其轉換為該值。下一行也需要更改以處理可能為空的引數值:
var arguments = call.arguments() as Map<String,String>?
var LITTLECPUMaxFreq = arguments?.get("LITTLECPUMaxFreq")?.toString() ?: "1766400"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537192.html
標籤:安卓扑科特林颤动方法通道
上一篇:如何將按鈕放在影像下方?撲
下一篇:收到空運算子的警告訊息
