2
votes

I am trying to implement EventChannel in my flutter app by am receiving the following error:

══╡ EXCEPTION CAUGHT BY SERVICES LIBRARY ╞══════════════════════════════════════════════════════════

The following PlatformException was thrown while activating platform stream on channel com.checkin.beacon.entered.beacons:

PlatformException(error, Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter args, null)

Here is my code:

Flutter side:

static const _enteredBeaconsEvent = const EventChannel("com.checkin.beacon.entered.beacons");

static void initialize () {
    _enteredBeaconsEvent.receiveBroadcastStream().listen((data) {
      print("data= $data");
    });
}

On Android Native (Kotlin), code is:

override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)

        EventChannel(flutterEngine.dartExecutor.binaryMessenger, "com.checkin.beacon.entered.beacons").setStreamHandler(object : EventChannel.StreamHandler {
            override fun onListen(args: Any, events: EventSink) {
                Log.d(TAG, "adding listener")

                events.success(true)
            }

            override fun onCancel(args: Any) {
                Log.d(TAG, "cancelling listener")
            }
        })
    }

I have searched alot but am unable to locate the problem.

1

1 Answers

3
votes

By default all variables and parameters in Kotlin are non-null. If you want to pass a null parameter to the method you should add ? to its type, for example:

override fun onListen(args: Any?, events: EventSink?) {...}

So, your final code will look like: override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine)

    EventChannel(flutterEngine.dartExecutor.binaryMessenger, "com.checkin.beacon.entered.beacons").setStreamHandler(object : EventChannel.StreamHandler {
        override fun onListen(args: Any?, events: EventSink?) {
            Log.d(TAG, "adding listener")

            events.success(true)
        }

        override fun onCancel(args: Any?) {
            Log.d(TAG, "cancelling listener")
        }
    })
}