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.