gpt4 book ai didi

android - 我在使用 flutter 时遇到了 generatedPluginRegistrant.registerWith 方法和 MethodChannel 对象的问题

转载 作者:行者123 更新时间:2023-12-01 18:00:59 30 4
gpt4 key购买 nike

我正在尝试这里的示例 https://flutter.dev/docs/development/platform-integration/platform-channels#step-1-create-a-new-app-project

但是如果我输入完全相同的代码,它就不起作用。 (我使用的是 Kotlin)

当我尝试

GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, CHANNEL)

错误提示

类型不匹配:推断类型为 MainActivity,但预期为 FlutterEngine

未解析的引用:flutterView

所以我尝试了下面

GeneratedPluginRegistrant.registerWith(FlutterEngine(this))
MethodChannel(FlutterView(this), CHANNEL)

它使错误消失,但另一个问题出现

[错误:flutter/lib/ui/ui_dart_state.cc(157)]未处理的异常:MissingPluginException(在 channel samples.flutter.io/battery上找不到方法 getBatteryLevel 的实现)

虽然 getBatteryLevel() 方法存在

    private fun getBatteryLevel(): Int {
val batteryLevel: Int
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP){
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
} else {
val intent = ContextWrapper(applicationContext).registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
batteryLevel = intent!!.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100 / intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
}
return batteryLevel
}

我也尝试过 getFlutterView(),但不起作用。

这就是我想知道的一点。

  1. GenevedPluginRegistrant 和 MethodChannel 的错误解决了吗?我的意思是,这是正确的修复方法吗?如果没有,输入什么作为参数?
  2. 我不知道出现 MissingPluginException 错误后该怎么办。我应该构建插件吗?或者有办法解决这个问题吗?

这是完整的代码和错误

ma​​in.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);

final String title;

@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

static const platform = const MethodChannel('samples.flutter.io/battery');
String _batteryLevel = 'Unknown battery level. ';

Future<void> _getBatteryLevel() async {
String batteryLevel;
try {
final int result = await platform.invokeMethod('getBatteryLevel');
batteryLevel = 'Battery level at $result % .';
} on PlatformException catch (e) {
batteryLevel = "Failed to get battery level: '${e.message}'.";
}

setState(() {
_batteryLevel = batteryLevel;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Get Battery Level'),
onPressed: _getBatteryLevel,
),
Text(
_batteryLevel,
),
],
),
),
);
}
}

MainActivity.kt

package com.example.native_test


import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.content.IntentFilter
import android.os.BatteryManager
import android.os.Bundle
import io.flutter.Log
import io.flutter.embedding.android.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.view.FlutterView
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES



class MainActivity: FlutterActivity() {

//private val CHANNEL = "plugins.flutter.io/battery"
private val CHANNEL = "samples.flutter.io/battery"
//private val CHANNEL = "com.example.batterylevel/battery"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.i("user_debug", "MainActivity: onCreate")

GeneratedPluginRegistrant.registerWith(FlutterEngine(this))
MethodChannel(FlutterView(this), CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getBatteryLevel") {
val batteryLevel : Int = getBatteryLevel()

if (batteryLevel != -1) {
result.success(batteryLevel)
} else {
result.error("UNAVAILABLE", "Battery level not available.", null)
}
} else {
Log.e("user_debug", "getBatteryLevel is not method of called")
result.notImplemented()
}
}
}

private fun getBatteryLevel(): Int {
val batteryLevel: Int
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP){
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
} else {
val intent = ContextWrapper(applicationContext).registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
batteryLevel = intent!!.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100 / intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
}
return batteryLevel
}
}
Launching lib/main.dart on Android SDK built for x86 in debug mode...
Running Gradle task 'assembleDebug'...
E/flutter (23141): [ERROR:flutter/shell/common/shell.cc(197)] Dart Error: Unhandled exception:
E/flutter (23141): NoSuchMethodError: No top-level getter '' declared.
E/flutter (23141): Receiver: top-level
E/flutter (23141): Tried calling:
E/flutter (23141): #0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:202:5)
E/flutter (23141): [ERROR:flutter/runtime/dart_isolate.cc(461)] Could not resolve main entrypoint function.
E/flutter (23141): [ERROR:flutter/shell/common/engine.cc(205)] Could not run the isolate.
E/flutter (23141): [ERROR:flutter/shell/common/engine.cc(137)] Engine not prepare and launch isolate.
E/flutter (23141): [ERROR:flutter/shell/common/shell.cc(197)] Dart Error: Unhandled exception:
E/flutter (23141): NoSuchMethodError: No top-level getter '' declared.
E/flutter (23141): Receiver: top-level
E/flutter (23141): Tried calling:
E/flutter (23141): #0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:202:5)
E/flutter (23141): [ERROR:flutter/runtime/dart_isolate.cc(461)] Could not resolve main entrypoint function.
E/flutter (23141): [ERROR:flutter/shell/common/engine.cc(205)] Could not run the isolate.
E/flutter (23141): [ERROR:flutter/shell/common/engine.cc(137)] Engine not prepare and launch isolate.


...


E/flutter (23861): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method getBatteryLevel on channel samples.flutter.dev/battery)
E/flutter (23861): #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:319:7)
E/flutter (23861): <asynchronous suspension>
E/flutter (23861): #1 _MyHomePageState._getBatteryLevel (package:native_test/main.dart:55:41)
E/flutter (23861): #2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter (23861): #3 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter (23861): #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (23861): #5 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter (23861): #6 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter (23861): #7 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:199:7)
E/flutter (23861): #8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:467:9)
E/flutter (23861): #9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter (23861): #10 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:117:9)
E/flutter (23861): #11 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter (23861): #12 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:115:18)
E/flutter (23861): #13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:7)
E/flutter (23861): #14 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter (23861): #15 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter (23861): #16 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter (23861): #17 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter (23861): #18 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter (23861): #19 _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter (23861): #20 _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter (23861): #21 _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter (23861): #22 _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter (23861): #23 _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter (23861):
E/flutter (23861): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method getBatteryLevel on channel samples.flutter.dev/battery)


...


E/flutter ( 770): #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:319:7)
E/flutter ( 770): <asynchronous suspension>
E/flutter ( 770): #1 _MyHomePageState._getBatteryLevel (package:native_test/main.dart:56:41)
E/flutter ( 770): #2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter ( 770): #3 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter ( 770): #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 770): #5 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter ( 770): #6 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter ( 770): #7 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:199:7)
E/flutter ( 770): #8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:467:9)
E/flutter ( 770): #9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter ( 770): #10 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:117:9)
E/flutter ( 770): #11 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter ( 770): #12 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:115:18)
E/flutter ( 770): #13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:7)
E/flutter ( 770): #14 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter ( 770): #15 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter ( 770): #16 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter ( 770): #17 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter ( 770): #18 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter ( 770): #19 _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter ( 770): #20 _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter ( 770): #21 _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter ( 770): #22 _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter ( 770): #23 _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter ( 770):
✓ Built build/app/outputs/apk/debug/app-debug.apk.
Installing build/app/outputs/apk/app.apk...
Syncing files to device Android SDK built for x86...

最佳答案

添加<meta-data android:name="flutterEmbedding" android:value="2"/>到 AndroidManifest.xml。

关于android - 我在使用 flutter 时遇到了 generatedPluginRegistrant.registerWith 方法和 MethodChannel 对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59344254/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com