flutter, app crashes when touch the screen with stlyus button pressed (Samsung tablet)

414 Views Asked by At

Hi I'm new to flutter and sorry for my bad english.

I'm making a drawing app with using Samsung tablet S6, when I touch the screen with the pressed stylus button, app crashes.

I want to handle this problem only with the flutter, not using the method channel.

This is my sample code

sample code

import 'dart:ui';

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

void main () {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      child: Scaffold(
        body: Stack(
          children: [
            Positioned.fill(child: Container(
              color: Colors.yellow,
            )),
            GestureDetector(
              child: Listener(
                behavior: HitTestBehavior.opaque,
                onPointerHover: (s) {
                  if(s.kind == PointerDeviceKind.stylus && s.buttons == kPrimaryStylusButton) {
                    print("Stylus is hovering");
                    // it works well
                  }
                },
                onPointerDown: (s) {
                  if(s.kind == PointerDeviceKind.stylus) {
                    print("Stylus is touched the screen");
                    // works well
                  } else if (s.kind == PointerDeviceKind.stylus && s.buttons == kPrimaryStylusButton) {
                    print("Stylus is touched the screen with pressed button");
                  }
                },
                onPointerMove: (s) {
                  if(s.kind == PointerDeviceKind.stylus) {
                    print("Stylus is moving on the screen");
                    // it works well
                  } else if (s.kind == PointerDeviceKind.stylus && s.buttons == kPrimaryStylusButton) {
                    print("Stylus is moving on the screen with pressed button");
                  }
                },
                onPointerCancel: (s) {
                  print("detached the stylus");
                },
              ),
            ),

          ],
        ),
      ),
    );
  }
}

and it's error message in Logcat

and it said AssertionError with Unexpected masked action

Error Message

E/MessageQueue-JNI(26267): Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI(26267): java.lang.AssertionError: Unexpected masked action
E/MessageQueue-JNI(26267):  at io.flutter.embedding.android.AndroidTouchProcessor.getPointerChangeForAction(AndroidTouchProcessor.java:384)
E/MessageQueue-JNI(26267):  at io.flutter.embedding.android.AndroidTouchProcessor.onTouchEvent(AndroidTouchProcessor.java:124)
E/MessageQueue-JNI(26267):  at io.flutter.embedding.android.AndroidTouchProcessor.onTouchEvent(AndroidTouchProcessor.java:104)
E/MessageQueue-JNI(26267):  at io.flutter.embedding.android.FlutterView.onTouchEvent(FlutterView.java:940)
E/MessageQueue-JNI(26267):  at android.view.View.dispatchTouchEvent(View.java:15076)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3917)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3581)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3538)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3538)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
E/MessageQueue-JNI(26267):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3538)
E/MessageQueue-JNI(26267):  at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:1015)
E/MessageQueue-JNI(26267):  at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1962)
E/MessageQueue-JNI(26267):  at android.app.Activity.dispatchTouchEvent(Activity.java:4265)
E/MessageQueue-JNI(26267):  at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:973)
E/MessageQueue-JNI(26267):  at android.view.View.dispatchPointerEvent(View.java:15335)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7794)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7567)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6901)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6958)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6924)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7122)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6932)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7179)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6905)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6958)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6924)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6932)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6905)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10354)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10202)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10158)
E/MessageQueue-JNI(26267):  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10486)
E/MessageQueue-JNI(26267):  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:259)
E/MessageQueue-JNI(26267):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/MessageQueue-JNI(26267):  at android.os.MessageQueue.next(MessageQueue.java:335)
E/MessageQueue-JNI(26267):  at android.os.Looper.loopOnce(Looper.java:186)
E/MessageQueue-JNI(26267):  at android.os.Looper.loop(Looper.java:313)
E/MessageQueue-JNI(26267):  at android.app.ActivityThread.main(ActivityThread.java:8663)
E/MessageQueue-JNI(26267):  at java.lang.reflect.Method.invoke(Native Method)
E/MessageQueue-JNI(26267):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
E/MessageQueue-JNI(26267):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
D/AndroidRuntime(26267): Shutting down VM
I/flutter (26267): Hovering stylus and button is pressed!
E/AndroidRuntime(26267): FATAL EXCEPTION: main
E/AndroidRuntime(26267): Process: com.example.stylus_test2, PID: 26267
E/AndroidRuntime(26267): java.lang.AssertionError: Unexpected masked action
E/AndroidRuntime(26267):    at io.flutter.embedding.android.AndroidTouchProcessor.getPointerChangeForAction(AndroidTouchProcessor.java:384)
E/AndroidRuntime(26267):    at io.flutter.embedding.android.AndroidTouchProcessor.onTouchEvent(AndroidTouchProcessor.java:124)
E/AndroidRuntime(26267):    at io.flutter.embedding.android.AndroidTouchProcessor.onTouchEvent(AndroidTouchProcessor.java:104)
E/AndroidRuntime(26267):    at io.flutter.embedding.android.FlutterView.onTouchEvent(FlutterView.java:940)
E/AndroidRuntime(26267):    at android.view.View.dispatchTouchEvent(View.java:15076)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3917)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3581)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3538)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3538)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
E/AndroidRuntime(26267):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3538)
E/AndroidRuntime(26267):    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:1015)
E/AndroidRuntime(26267):    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1962)
E/AndroidRuntime(26267):    at android.app.Activity.dispatchTouchEvent(Activity.java:4265)
E/AndroidRuntime(26267):    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:973)
E/AndroidRuntime(26267):    at android.view.View.dispatchPointerEvent(View.java:15335)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7794)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7567)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6901)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6958)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6924)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7122)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6932)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7179)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6905)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6958)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6924)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6932)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6905)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10354)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10202)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10158)
E/AndroidRuntime(26267):    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10486)
E/AndroidRuntime(26267):    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:259)
E/AndroidRuntime(26267):    at android.os.MessageQueue.nativePollOnce(Native Method)
E/AndroidRuntime(26267):    at android.os.MessageQueue.next(MessageQueue.java:335)
E/AndroidRuntime(26267):    at android.os.Looper.loopOnce(Looper.java:186)
E/AndroidRuntime(26267):    at android.os.Looper.loop(Looper.java:313)
E/AndroidRuntime(26267):    at android.app.ActivityThread.main(ActivityThread.java:8663)
E/AndroidRuntime(26267):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(26267):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
E/AndroidRuntime(26267):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
I/Process (26267): Sending signal. PID: 26267 SIG: 9
Lost connection to device.
0

There are 0 best solutions below