Ошибка: несоответствие типов: предполагаемый тип — Map<String, String>? но Map<String, String> ожидался при использовании MethodChannel во Flutter/Kotlin

Я реализую MethodChannel для передачи значения со стороны Flutter в собственный код Kotlin Android. Я следовал этим двум урокам, и они делают то же самое, что и я:

Моя реализация MethodChannel в main.dart [Flutter] выглядит следующим образом:

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, Строка>? но ожидалось Map<String, String>

Эта ошибка возникает для следующей строки кода:

var arguments = call.arguments() as Map<String,String>

Как я могу решить эту проблему?

Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Компилятор Kotlin не может предположить, что call.arguments() возвращает ненулевое значение, поэтому правильный тип — Map<String,String>?, что означает, что вы должны привести его к этому. Следующую строку также необходимо изменить, чтобы иметь дело с потенциально нулевым значением аргумента:

var arguments = call.arguments() as Map<String,String>?
var LITTLECPUMaxFreq = arguments?.get("LITTLECPUMaxFreq")?.toString() ?: "1766400"

Спасибо, приятель. Я застрял с этой проблемой с полудня. Очень ценю помощь! :)

Somdip Dey 21.11.2022 00:47

Другие вопросы по теме