我使用 Flutter 本地通知进行调度,当我使用 MethodChannel 实例时出现异常。
主要功能:
const MethodChannel platform = MethodChannel('dexterx.dev/apptrail');
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await _configureLocalTimeZone();
runApp(MyApp());
}
_configureLocalTimeZone 函数是:
Future<void> _configureLocalTimeZone() async {
tz.initializeTimeZones();
final String timeZoneName = await platform.invokeMethod('getTimeZoneName');
tz.setLocalLocation(tz.getLocation(timeZoneName));
}
例外是:
Exception has occurred.
MissingPluginException (MissingPluginException(No implementation found for method getTimeZoneName on channel dexterx.dev/trail))
答案 0 :(得分:1)
flutter_local_notifications
的示例代码具有原生实现部分
你可以参考
https://github.com/MaikuB/flutter_local_notifications/blob/ac730a0298edd8335cde07a09a396c46cc8c9292/flutter_local_notifications/example/android/app/src/main/kotlin/com/dexterous/flutter_local_notifications_example/MainActivity.kt#L23
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "dexterx.dev/flutter_local_notifications_example").setMethodCallHandler { call, result ->
if ("drawableToUri" == call.method) {
val resourceId = this@MainActivity.resources.getIdentifier(call.arguments as String, "drawable", this@MainActivity.packageName)
result.success(resourceToUriString(this@MainActivity.applicationContext, resourceId))
}
if ("getAlarmUri" == call.method) {
result.success(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString())
}
if ("getTimeZoneName" == call.method) {
result.success(TimeZone.getDefault().id)
}
}
}
答案 1 :(得分:1)
您尚未在本机端实现该方法。因此,当您从 Flutter 一侧调用该方法时,在搜索时在本机代码中找不到它,因此引发了异常。