android - FlutterActivity MethodChannel和FlutterView
2021/8/25 13:06:18
本文主要是介绍android - FlutterActivity MethodChannel和FlutterView,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
android - FlutterActivity MethodChannel和FlutterView
因此,大约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.FlutterActivity import android.os.Bundle import io.flutter.app.FlutterActivity import io.flutter.plugin.common.MethodChannel import io.flutter.plugins.GeneratedPluginRegistrant //import io.flutter.embedding.android.FlutterActivity //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 == 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" } }
这篇关于android - FlutterActivity MethodChannel和FlutterView的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework