【问题标题】:type '(PlatformException) => void' is not a subtype of type '(Object) => FutureOr<dynamic> Fluttertype '(PlatformException) => void' 不是类型 '(Object) => FutureOr<dynamic> Flutter 的子类型
【发布时间】:2018-09-22 09:48:12
【问题描述】:

我在 Flutter 中使用事件通道将信标数据从 Native SDK 返回到 Flutter。这在最近的 Flutter 升级之前工作正常。现在,我收到以下错误。

type '(PlatformException) =&gt; void' is not a subtype of type '(Object) =&gt; FutureOr&lt;dynamic&gt;

使用以下堆栈跟踪:

#0      _registerErrorHandler (dart:async/async_error.dart:22:60)
#1      _BufferingStreamSubscription.onError (dart:async/stream_impl.dart:146:16)
#2      new _BufferingStreamSubscription (dart:async/stream_impl.dart:113:10)
#3      new _ControllerSubscription (dart:async/stream_controller.dart)
#4      new _BroadcastSubscription (dart:async/broadcast_stream_controller.dart)
#5      _BroadcastStreamController._subscribe (dart:async/broadcast_stream_controller.dart:212:46)
#6      _ControllerStream._createSubscription (dart:async/stream_controller.dart:817:19)
#7      _StreamImpl.listen (dart:async/stream_impl.dart:466:9)
#8      _MyHomePageState.initPlatformState.<anonymous closure>.<anonymous closure> (file:///Users/chaythanyanair/Documents/Qburst/Learn/flutter_poc/lib/main.dart:95:43)
#9      _RootZone.runUnary (dart:async/zone.dart:1381:54)
#10     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#11     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:633:45)
#12     Future._propagateToListeners (dart:async/future_impl.dart:662:32)
#13     Future._complete (dart:async/future_impl.dart:467:7)
#14     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#15     MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart)
<asynchronous suspension>
#16     _MyHomePageState.initPlatformState.<anonymous closure> (file:///Users/chaythanyanair/Documents/Qburst/Learn/flutter_poc/lib/main.dart:89:24)
<asynchronous suspension>
#17     _RootZone.runUnary (dart:async/zone.dart:1381:54)
#18     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#19     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:633:45)
#20     Future._propagateToListeners (dart:async/future_impl.dart:662:32)
#21     Future._complete (dart:async/future_impl.dart:467:7)
#22     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#23     User_Profile.getUser (package:flutter_poc/Models/User.dart)
<asynchronous suspension>
#24     _MyHomePageState.initPlatformState (file:///Users/chaythanyanair/Documents/Qburst/Learn/flutter_poc/lib/main.dart:69:24)
<asynchronous suspension>
#25     _MyHomePageState.initState (file:///Users/chaythanyanair/Documents/Qburst/Learn/flutter_poc/lib/main.dart:52:5)
#26     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3734:58)
#27     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#29     Element.updateChild 

这是我的 EventChannel 实现:

static const platform = const MethodChannel('samples.flutter.io/initialiseRanging');
static const stream =
  const EventChannel('samples.flutter.io/ranging');
try {
        await platform.invokeMethod('initialiseRanging').then((result){
          print(result);
          setState(() {
            _currentValue = result;
          });

          stream.receiveBroadcastStream().listen(_onEvent, onError: _onError);
        });

  } on PlatformException catch (e) {
        print( "{e.message}");
  }

这就是_onEvent_onError 函数的实现方式。

void _onEvent(Object event) {
    setState(() {
      _currentValue = event.toString();
    });
    print(event);
}

void _onError(PlatformException error) {
    print(error);
}

知道为什么会发生这种情况吗?

【问题讨论】:

  • 你用的是什么 Flutter 版本?尝试切换到dev频道
  • 我已经在dev频道。仍然是问题所在。
  • _onError() 长什么样子?
  • 它是什么样子的?
  • 我已经更新了代码。

标签: dart flutter


【解决方案1】:
void _onError(PlatformException error) {

应该是

void _onError(Object error) {

即使您只对PlatformException 感兴趣,或者即使这是迄今为止发生的唯一例外,也不意味着不可能有其他例外。预期的处理函数需要匹配参数类型,而不仅仅是你预期的异常。

【讨论】:

  • 很高兴听到。 .
  • 如果您不向 _onError 传递任何参数,也会遇到同样的问题。这帮助很大!
猜你喜欢
  • 2022-10-17
  • 2020-11-15
  • 1970-01-01
  • 2021-08-02
  • 2021-01-13
  • 2022-07-21
  • 2022-11-02
  • 2021-01-22
  • 2020-11-26
相关资源
最近更新 更多