博主信息
Sky
博文
291
粉丝
0
评论
0
访问量
7272
积分:0
P豆:617

android - FlutterActivity MethodChannel和FlutterView

2021年10月20日 20:33:53阅读数:13博客 / Sky

大约4个月前,我编写了Flutter应用程序。现在,我想做一个小小的更改,但是我不能再编译应用程序了,因为GeneratedPluginRegistrant.registerWith(this)不再起作用了,我没有更改Kotlin代码,只更改了Dart代码。

“GeneratedPluginRegistrant.registerWith( this )”中的“此”向我显示此错误:

Type mismatch.    
Required: FlutterEngine!    
Found: MainActivity

MainActivity类:

import android.os.Bundle
import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.view.FlutterMain

class MainActivity : FlutterActivity() {

 override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)

   GeneratedPluginRegistrant.registerWith(this) // here is the error: Type mismatch. Required: FlutterEngine! Found: MainActivity

   MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
     if (call.method == "helloFromNativeCode") {
       val greetings = helloFromNativeCode()
       result.success(greetings)
     }
   }
 }

 private fun helloFromNativeCode(): String {
   return "Hello from Native Android Code"
 }

 companion object {
   private const val CHANNEL = "flutter.native/helper"
 }
}

如果使用:

import io.flutter.embedding.android.FlutterActivity

代替

import io.flutter.app.FlutterActivity

我可以用

override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
       GeneratedPluginRegistrant.registerWith(flutterEngine);
   }

但遇到以下问题:

MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
     if (call.method == "helloFromNativeCode") {
       val greetings = helloFromNativeCode()
       result.success(greetings)
     }
   }

因为我在 flutterView 上遇到买二手平台错误:

Unresolved reference: flutterView

代码如下所示:

import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.view.FlutterMain

class MainActivity : FlutterActivity() {
   override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
       GeneratedPluginRegistrant.registerWith(flutterEngine);
   }

 override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)

   MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result -> // here is the error
     if (call.method == "helloFromNativeCode") {
       val greetings = helloFromNativeCode()
       result.success(greetings)
     }
   }
 }

 private fun helloFromNativeCode(): String {
   return "Hello from Native Android Code"
 }

 companion object {
   private const val CHANNEL = "flutter.native/helper"
 }
}

我希望有一个人可以帮助我。

最佳答案

代替flutterView,请使用flutterEngine.getDartExecutor()。

关于android - FlutterActivity MethodChannel和FlutterView,我们在Stack Overflow上找到一个类似的问题: stackoverflow.com/questions/59323505/

import 'package:flutter/material.dart';import 'package:flutter/services.dart';import 'package:flutter_package_demo/theme/themes.dart';class UserPage extends StatefulWidget {
 const UserPage({Key key}) : super(key: key);

 @override
 _UserPageState createState() => _UserPageState();}const String CHANNEL =
   "www.luckly.work"; //这儿要与        MethodChannel(flutterView, CHANNEL)中CHANNEL名称一致const String invokeMethod =
   "breeze"; //这儿要与       call.method == invokeMethod中invokeMethod名称一致var channel = const MethodChannel(CHANNEL);class _UserPageState extends State<UserPage> {
 String _result = "";

 @override
 Widget build(BuildContext context) {
   final theme = Theme.of(context);
   return Scaffold(
     appBar: AppBar(
       title: Text(
         "个人",
         style: TextStyle(
           color: theme.accentColor,
         ),
       ),
     ),
     body: Container(
       child: Column(
         children: [
           Text(
             "个人",
             style: TextStyle(
               color: theme.accentColor,
             ),
           ),
           FlatButton(
             onPressed: () {
               setState(() {});
               currentTheme.toggleTheme();
             },
             child: Text(
               "多主题",
               style: TextStyle(
                 color: theme.accentColor,
               ),
             ),
           ),
           Center(
             child: RaisedButton(
               onPressed: () async {
                 var result = await channel.invokeMethod(invokeMethod);
                 setState(() {
                   _result = result;
                 });

                 print(result);
               },
               child: new Text(_result),
             ),
           )
         ],
       ),
     ),
   );
 }}
package com.example.flutter_package_demo//import io.flutter.app.FlutterActivityimport android.os.Bundleimport io.flutter.app.FlutterActivityimport io.flutter.plugin.common.MethodChannelimport io.flutter.plugins.GeneratedPluginRegistrant//import io.flutter.embedding.android.FlutterActivity//import io.flutter.view.FlutterMainclass MainActivity : FlutterActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)//        GeneratedPluginRegistrant.registerWith(this) // here is the error: Type mismatch. Required: FlutterEngine! Found: MainActivity

       MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
           if (call.method == InvokeMethod) {
               val greetings = successNativeCode()
               result.success(greetings)
           }
       }
   }

   private fun successNativeCode(): String {
       return "我是android原生跑过来的数据"
   }

   companion object {
       private const val CHANNEL = "www.luckly.work"
       private const val InvokeMethod = "breeze"
   }}

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论