Skip to content

App crashes when using TalkBack, misbehaves with VoiceOver #184898

Description

@hapasa

Steps to reproduce

Start TalkBack, start the attached main.dart test app, navigate the scrollable screen for a while swiping left and right.
Soon the app will disappear (crash).

According to users, VoiceOver also behaves erratically when the screen starts to scroll, which I suspect is for the same underlying reason.

Expected results

App does not crash, TalkBack and VoiceOver navigation should work reliably.

Actual results

Application crashes when navigating with TalkBack

Code sample

Code sample
import 'dart:ui' show PlatformDispatcher;

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

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

void announceForAccessibility(String message) {
  final views = PlatformDispatcher.instance.views;
  if (views.isEmpty) {
    return;
  }

  SemanticsService.sendAnnouncement(views.first, message, TextDirection.ltr);
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Accessibility Crash Repro',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const AccessibilityCrashReproScreen(),
    );
  }
}

class AccessibilityCrashReproScreen extends StatelessWidget {
  const AccessibilityCrashReproScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Accessibility Crash Repro')),
      body: ListView(
        padding: const EdgeInsets.only(bottom: 24),
        children: const [
          _IntroCard(),
          _SectionHeader('Switch tiles'),
          AccessibleSwitchSettingsTile(
            title: 'Speak words',
            defaultValue: true,
          ),
          AccessibleSwitchSettingsTile(
            title: 'Speak characters',
            defaultValue: true,
          ),
          AccessibleSwitchSettingsTile(
            title: 'Play click on keyboard entry',
            subtitle: 'When speech is off, play a click instead of speaking.',
          ),
          AccessibleSwitchSettingsTile(title: 'Play sound on newline'),
          AccessibleSwitchSettingsTile(
            title: 'Always use screen reader voice',
            subtitle:
                'Keep the native screen reader voice even when content changes.',
            leading: Icon(Icons.record_voice_over),
          ),
          AccessibleSwitchSettingsTile(
            title: 'Undo with L gesture',
            subtitle:
                'Swipe left then up in one motion instead of a multi-finger gesture.',
            leading: Icon(Icons.undo),
          ),
          _SectionHeader('Slider tiles'),
          AccessibleSliderSettingsTile(
            title: 'Speech rate',
            defaultValue: 5,
            min: 1,
            max: 10,
            step: 0.5,
            leading: Icon(Icons.speed),
          ),
          AccessibleSliderSettingsTile(
            title: 'Swipe sensitivity',
            subtitle: 'Higher values require longer swipes.',
            defaultValue: 30,
            min: 25,
            max: 60,
            step: 1,
            leading: Icon(Icons.swipe),
          ),
          _SectionHeader('Radio groups'),
          AccessibleRadioSettingsTile<String>(
            title: 'Input mode',
            selected: 'standard',
            leading: Icon(Icons.input),
            values: {
              'standard': 'Braille on-screen keyboard',
              'one_handed': 'One-handed braille keyboard',
              'external': 'External keyboard',
            },
          ),
          AccessibleRadioSettingsTile<String>(
            title: 'Cloud provider',
            selected: 'google_drive',
            leading: Icon(Icons.cloud_queue),
            values: {
              'google_drive': 'Google Drive',
              'dropbox': 'Dropbox',
              'onedrive': 'OneDrive',
            },
          ),
          _SectionHeader('Extra rows for scrolling'),
          AccessibleSwitchSettingsTile(
            title: 'Spell out suggested words',
            subtitle: 'Announce correction suggestions letter by letter.',
          ),
          AccessibleSwitchSettingsTile(
            title: 'Clear buffer after message send',
          ),
          AccessibleSwitchSettingsTile(
            title: 'Enable cloud sync',
            leading: Icon(Icons.cloud),
          ),
          AccessibleSwitchSettingsTile(
            title: 'Use native screen reader',
            subtitle:
                'Use the system screen reader instead of built-in speech.',
            leading: Icon(Icons.accessibility_new),
          ),
        ],
      ),
    );
  }
}

class _IntroCard extends StatelessWidget {
  const _IntroCard();

  @override
  Widget build(BuildContext context) {
    return Card(
      margin: const EdgeInsets.fromLTRB(16, 16, 16, 8),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Text(
          'This screen is a reduced testcase derived from lib/settings.dart. '
          'It intentionally combines MergeSemantics, Semantics(excludeSemantics: true), '
          'interactive controls, and accessibility announcements inside a scrollable list.',
          style: Theme.of(context).textTheme.bodyMedium,
        ),
      ),
    );
  }
}

class _SectionHeader extends StatelessWidget {
  const _SectionHeader(this.title);

  final String title;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(16, 16, 16, 8),
      child: Text(title, style: Theme.of(context).textTheme.titleMedium),
    );
  }
}

class AccessibleSwitchSettingsTile extends StatefulWidget {
  const AccessibleSwitchSettingsTile({
    super.key,
    required this.title,
    this.subtitle,
    this.leading,
    this.defaultValue = false,
  });

  final bool defaultValue;
  final String title;
  final String? subtitle;
  final Widget? leading;

  @override
  State<AccessibleSwitchSettingsTile> createState() =>
      _AccessibleSwitchSettingsTileState();
}

class _AccessibleSwitchSettingsTileState
    extends State<AccessibleSwitchSettingsTile> {
  late bool _value;

  @override
  void initState() {
    super.initState();
    _value = widget.defaultValue;
  }

  void _handleValueChange(bool value) {
    setState(() {
      _value = value;
    });

    final stateText = value ? 'On' : 'Off';
    announceForAccessibility('${widget.title}, $stateText');
  }

  void _toggleValue() {
    _handleValueChange(!_value);
  }

  @override
  Widget build(BuildContext context) {
    final hint = widget.subtitle;

    return MergeSemantics(
      child: Semantics(
        label: widget.title,
        hint: (hint != null && hint.isNotEmpty) ? hint : null,
        toggled: _value,
        enabled: true,
        onTap: _toggleValue,
        excludeSemantics: true,
        child: ListTile(
          leading: widget.leading,
          title: Text(widget.title),
          subtitle: widget.subtitle != null ? Text(widget.subtitle!) : null,
          trailing: Switch(value: _value, onChanged: _handleValueChange),
          onTap: _toggleValue,
        ),
      ),
    );
  }
}

class AccessibleSliderSettingsTile extends StatefulWidget {
  const AccessibleSliderSettingsTile({
    super.key,
    required this.title,
    this.subtitle,
    this.leading,
    required this.defaultValue,
    required this.min,
    required this.max,
    required this.step,
  });

  final double defaultValue;
  final Widget? leading;
  final double max;
  final double min;
  final double step;
  final String? subtitle;
  final String title;

  @override
  State<AccessibleSliderSettingsTile> createState() =>
      _AccessibleSliderSettingsTileState();
}

class _AccessibleSliderSettingsTileState
    extends State<AccessibleSliderSettingsTile> {
  late double _value;

  @override
  void initState() {
    super.initState();
    _value = widget.defaultValue.clamp(widget.min, widget.max);
  }

  String _formatValue(double value) => value.toStringAsFixed(1);

  String _semanticValueText(double value) =>
      _formatValue(value).replaceAll('.', ' point ');

  void _onChanged(double newValue) {
    final snapped = (newValue / widget.step).round() * widget.step;
    final clamped = snapped.clamp(widget.min, widget.max);
    setState(() {
      _value = clamped;
    });
  }

  void _increase() {
    _onChanged((_value + widget.step).clamp(widget.min, widget.max));
  }

  void _decrease() {
    _onChanged((_value - widget.step).clamp(widget.min, widget.max));
  }

  @override
  Widget build(BuildContext context) {
    final divisions = ((widget.max - widget.min) / widget.step).round();

    return MergeSemantics(
      child: Semantics(
        label: widget.title,
        value: _semanticValueText(_value),
        hint: widget.subtitle,
        slider: true,
        enabled: true,
        onIncrease: _increase,
        onDecrease: _decrease,
        increasedValue: _semanticValueText(
          (_value + widget.step).clamp(widget.min, widget.max),
        ),
        decreasedValue: _semanticValueText(
          (_value - widget.step).clamp(widget.min, widget.max),
        ),
        excludeSemantics: true,
        child: ExcludeSemantics(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              ListTile(
                leading: widget.leading,
                title: Text(widget.title),
                subtitle: Text(_formatValue(_value)),
              ),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 16),
                child: Slider(
                  value: _value,
                  min: widget.min,
                  max: widget.max,
                  divisions: divisions,
                  label: _formatValue(_value),
                  semanticFormatterCallback: _semanticValueText,
                  onChanged: _onChanged,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class AccessibleRadioSettingsTile<T> extends StatefulWidget {
  const AccessibleRadioSettingsTile({
    super.key,
    required this.title,
    required this.values,
    required this.selected,
    this.leading,
  });

  final Widget? leading;
  final T selected;
  final String title;
  final Map<T, String> values;

  @override
  State<AccessibleRadioSettingsTile<T>> createState() =>
      _AccessibleRadioSettingsTileState<T>();
}

class _AccessibleRadioSettingsTileState<T>
    extends State<AccessibleRadioSettingsTile<T>> {
  late T _selected;

  @override
  void initState() {
    super.initState();
    _selected = widget.selected;
  }

  void _select(T value) {
    setState(() {
      _selected = value;
    });

    final label = widget.values[value] ?? value.toString();
    announceForAccessibility('$label, selected');
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Padding(
          padding: const EdgeInsets.fromLTRB(16, 12, 16, 4),
          child: Row(
            children: [
              if (widget.leading != null) ...[
                widget.leading!,
                const SizedBox(width: 16),
              ],
              Text(
                widget.title,
                style: Theme.of(context).textTheme.titleMedium,
              ),
            ],
          ),
        ),
        RadioGroup<T>(
          groupValue: _selected,
          onChanged: (value) {
            if (value != null) {
              _select(value);
            }
          },
          child: Column(
            children: [
              for (final entry in widget.values.entries)
                MergeSemantics(
                  child: ListTile(
                    contentPadding: const EdgeInsets.symmetric(horizontal: 16),
                    title: Text(entry.value),
                    leading: Radio<T>(value: entry.key),
                    onTap: () => _select(entry.key),
                  ),
                ),
            ],
          ),
        ),
      ],
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs, somewhat abridged as this was over 64kb, which seems to be the max allowed.
✓ Built build/app/outputs/flutter-apk/app-debug.apk
Installing build/app/outputs/flutter-apk/app-debug.apk...
D/FlutterJNI( 6443): Beginning load of flutter...
D/FlutterJNI( 6443): flutter (null) was loaded normally!
I/flutter ( 6443): [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(62)] Using the Impeller rendering backend (Vulkan).
D/FlutterRenderer( 6443): Width is zero. 0,0
D/FlutterRenderer( 6443): Width is zero. 0,0
D/FlutterJNI( 6443): Sending viewport metrics to the engine.
D/FlutterJNI( 6443): Sending viewport metrics to the engine.
D/VRI[MainActivity]( 6443):  debugCancelDraw some OnPreDrawListener onPreDraw return false,cancelDraw=true,count=50,android.view.ViewRootImpl@b3758ee
Debug service listening on ws://127.0.0.1:43775/97TR8itQI8g=/ws
Syncing files to device DN2103...
W/libc    ( 6443): Access denied finding property "persist.vendor.debug.gpud.enable"
D/BLASTBufferQueue( 6443): [SurfaceView[com.example.flutterbug1/com.example.flutterbug1.MainActivity]#1](f:0,a:1) acquireNextBufferLocked size=1080x2268 mFrameNumber=1 applyTransaction=true mTimestamp=217466635971038(auto) mPendingTransactions.size=0 graphicBufferId=27672474288138 transform=0
I/Choreographer( 6443): Skipped 121 frames!  The application may be doing too much work on its main thread.
I/Quality ( 6443): Skipped: false 121 cost 1356.6748 refreshRate 11199800 bit true processName com.example.flutterbug1
I/Quality ( 6443): Skipped: false 1 cost 13.165861 refreshRate 11111111 bit true processName com.example.flutterbug1
D/FlutterJNI( 6443): Sending viewport metrics to the engine.
D/VRI[MainActivity]( 6443): registerCallbacksForSync syncBuffer=false
D/BLASTBufferQueue( 6443): [VRI[MainActivity]#0](f:0,a:1) acquireNextBufferLocked size=1080x2400 mFrameNumber=1 applyTransaction=true mTimestamp=217466777915422(auto) mPendingTransactions.size=0 graphicBufferId=27672474288143 transform=0
D/VRI[MainActivity]( 6443): Received frameCommittedCallback lastAttemptedDrawFrameNum=1 didProduceBuffer=true syncBuffer=false
W/Parcel  ( 6443): Expecting binder but got null!
D/VRI[MainActivity]( 6443):  debugCancelDraw  cancelDraw=false,count = 126,android.view.ViewRootImpl@b3758ee
D/VRI[MainActivity]( 6443): draw finished.
D/VRI[MainActivity]( 6443): onFocusEvent true
D/FlutterJNI( 6443): Sending viewport metrics to the engine.
D/ViewRootImplExtImpl( 6443): onDisplayChanged 0 for VRI android.view.ViewRootImpl@b3758ee
D/ProfileInstaller( 6443): Installing profile for com.example.flutterbug1
I/ple.flutterbug1( 6443): Background concurrent copying GC freed 14MB AllocSpace bytes, 7(136KB) LOS objects, 49% free, 2589KB/5178KB, paused 263us,61us total 178.820ms
W/FinalizerDaemon( 6443): type=1400 audit(0.0:25023): avc: denied { getopt } for path="/dev/socket/usap_pool_primary" scontext=u:r:untrusted_app:s0:c184,c257,c512,c768 tcontext=u:r:zygote:s0 tclass=unix_stream_socket permissive=0 app=com.example.flutterbug1
V/AutofillManager( 6443): requestHideFillUi(null): anchor = null
D/OplusInputMethodManagerInternal( 6443): get inputMethodManager extension: com.android.internal.view.IInputMethodManager$Stub$Proxy@d02309d
I/Quality ( 6443): Skipped: false 7 cost 123.142 refreshRate 16666667 bit true processName com.example.flutterbug1
E/InputEventReceiver( 6443): Exception dispatching input event.
F/ple.flutterbug1( 6443): java_vm_ext.cc:620] JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception java.lang.NullPointerException: Attempt to read from null array
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.opengl.Matrix.invertM(float[], int, float[], int) (Matrix.java:140)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void io.flutter.view.AccessibilityBridge$SemanticsNode.ensureInverseTransform() (AccessibilityBridge.java:2834)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at io.flutter.view.AccessibilityBridge$SemanticsNode io.flutter.view.AccessibilityBridge$SemanticsNode.hitTest(float[], boolean) (AccessibilityBridge.java:2864)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at io.flutter.view.AccessibilityBridge$SemanticsNode io.flutter.view.AccessibilityBridge$SemanticsNode.hitTest(float[], boolean) (AccessibilityBridge.java:2866)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at io.flutter.view.AccessibilityBridge$SemanticsNode io.flutter.view.AccessibilityBridge$SemanticsNode.access$4800(io.flutter.view.AccessibilityBridge$SemanticsNode, float[], boolean) (AccessibilityBridge.java:2457)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean io.flutter.view.AccessibilityBridge.onAccessibilityHoverEvent(android.view.MotionEvent, boolean) (AccessibilityBridge.java:1725)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean io.flutter.view.AccessibilityBridge.onAccessibilityHoverEvent(android.view.MotionEvent) (AccessibilityBridge.java:1697)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean io.flutter.embedding.android.FlutterView.onHoverEvent(android.view.MotionEvent) (FlutterView.java:1006)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.View.dispatchHoverEvent(android.view.MotionEvent) (View.java:15318)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchHoverEvent(android.view.MotionEvent) (ViewGroup.java:2308)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.View.dispatchGenericMotionEvent(android.view.MotionEvent) (View.java:15235)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchTransformedGenericPointerEvent(android.view.MotionEvent, android.view.View) (ViewGroup.java:2628)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchHoverEvent(android.view.MotionEvent) (ViewGroup.java:2217)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.View.dispatchGenericMotionEvent(android.view.MotionEvent) (View.java:15235)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchTransformedGenericPointerEvent(android.view.MotionEvent, android.view.View) (ViewGroup.java:2628)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchHoverEvent(android.view.MotionEvent) (ViewGroup.java:2217)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.View.dispatchGenericMotionEvent(android.view.MotionEvent) (View.java:15235)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchTransformedGenericPointerEvent(android.view.MotionEvent, android.view.View) (ViewGroup.java:2628)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.ViewGroup.dispatchHoverEvent(android.view.MotionEvent) (ViewGroup.java:2217)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.View.dispatchGenericMotionEvent(android.view.MotionEvent) (View.java:15235)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean com.android.internal.policy.DecorView.superDispatchGenericMotionEvent(android.view.MotionEvent) (DecorView.java:577)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean com.android.internal.policy.PhoneWindow.superDispatchGenericMotionEvent(android.view.MotionEvent) (PhoneWindow.java:1928)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.app.Activity.dispatchGenericMotionEvent(android.view.MotionEvent) (Activity.java:4378)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean com.android.internal.policy.DecorView.dispatchGenericMotionEvent(android.view.MotionEvent) (DecorView.java:531)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.view.View.dispatchPointerEvent(android.view.MotionEvent) (View.java:15386)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at int android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6931)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at int android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6702)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.deliver(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6149)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.onDeliverToNext(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6211)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.forward(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6172)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$AsyncInputStage.forward(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6346)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.apply(android.view.ViewRootImpl$QueuedInputEvent, int) (ViewRootImpl.java:6180)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$AsyncInputStage.apply(android.view.ViewRootImpl$QueuedInputEvent, int) (ViewRootImpl.java:6403)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.deliver(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6153)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.onDeliverToNext(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6211)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.forward(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6172)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.apply(android.view.ViewRootImpl$QueuedInputEvent, int) (ViewRootImpl.java:6180)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$InputStage.deliver(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:6153)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl.deliverInputEvent(android.view.ViewRootImpl$QueuedInputEvent) (ViewRootImpl.java:9312)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl.doProcessInputEvents() (ViewRootImpl.java:9263)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl.enqueueInputEvent(android.view.InputEvent, android.view.InputEventReceiver, int, boolean) (ViewRootImpl.java:9212)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(android.view.InputEvent) (ViewRootImpl.java:9463)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.view.InputEventReceiver.dispatchInputEvent(int, android.view.InputEvent) (InputEventReceiver.java:276)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:339)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:186)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.os.Looper.loop() (Looper.java:351)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8377)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:584)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1013)
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]     in call to CallVoidMethodV
F/ple.flutterbug1( 6443): java_vm_ext.cc:620]     from void android.os.MessageQueue.nativePollOnce(long, int)
F/ple.flutterbug1( 6443): runtime.cc:714] Runtime aborting...
F/ple.flutterbug1( 6443): runtime.cc:714] Dumping all threads without mutator lock held
F/ple.flutterbug1( 6443): runtime.cc:714] All threads:
F/ple.flutterbug1( 6443): runtime.cc:714] DALVIK THREADS (24):
F/ple.flutterbug1( 6443): runtime.cc:714] "main" prio=10 tid=1 Runnable
F/ple.flutterbug1( 6443): runtime.cc:714]   | group="" sCount=0 ucsCount=0 flags=0 obj=0x0 self=0xb40000785e010800
F/ple.flutterbug1( 6443): runtime.cc:714]   | sysTid=6443 nice=-10 cgrp=default sched=0/0 handle=0x7901dd2500
F/ple.flutterbug1( 6443): runtime.cc:714]   | state=R schedstat=( 5782268703 538592981 5437 ) utm=490 stm=87 core=6 HZ=100
F/ple.flutterbug1( 6443): runtime.cc:714]   | stack=0x7fce4df000-0x7fce4e1000 stackSize=8188KB
F/ple.flutterbug1( 6443): runtime.cc:714]   | held mutexes= "abort lock" "mutator lock"(shared held)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #00 pc 0041ff28  /apex/com.android.art/lib64/libart.so (art::DumpNativeStack+112) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
F/ple.flutterbug1( 6443): runtime.cc:714]   - waiting on an unknown object
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:458)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:318)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
F/ple.flutterbug1( 6443): runtime.cc:714]   at java.lang.Thread.run(Thread.java:1564)
F/ple.flutterbug1( 6443): runtime.cc:714]
F/ple.flutterbug1( 6443): runtime.cc:714] "1.raster" prio=8 tid=24 Native
F/ple.flutterbug1( 6443): runtime.cc:714]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x0 self=0xb4000077dd61c000
F/ple.flutterbug1( 6443): runtime.cc:714]   | sysTid=6108 nice=-5 cgrp=default sched=0/0 handle=0x77d72e9cb0
F/ple.flutterbug1( 6443): runtime.cc:714]   | state=S schedstat=( 286507478 87996924 649 ) utm=19 stm=9 core=6 HZ=100
F/ple.flutterbug1( 6443): runtime.cc:714]   | stack=0x77d70ea000-0x77d70ec000 stackSize=2047KB
F/ple.flutterbug1( 6443): runtime.cc:714]   | held mutexes=
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #00 pc 000d6a38  /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+8) (BuildId: cd953571180b7f5f8ae5570dad29595f)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #01 pc 00017ffc  /system/lib64/libutils.so (android::Looper::pollInner+188) (BuildId: 6038dbf95f76d91eaf842148f10f89ea)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #02 pc 00017ee0  /system/lib64/libutils.so (android::Looper::pollOnce+112) (BuildId: 6038dbf95f76d91eaf842148f10f89ea)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #03 pc 000185e4  /system/lib64/libandroid.so (ALooper_pollOnce+100) (BuildId: c43fbfbda655b3226830f755b6772771)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #04 pc 01a4b0b4  /data/app/~~A9bENsp2dOjABrDS8FRWNg==/com.example.flutterbug1-0J4MVj8ZyLBGU5Y4xIijeA==/base.apk (offset 1134000) (???) (BuildId: f0822664963e2f1f73d5ba465f374db7bfed127f)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #05 pc 01a44f54  /data/app/~~A9bENsp2dOjABrDS8FRWNg==/com.example.flutterbug1-0J4MVj8ZyLBGU5Y4xIijeA==/base.apk (offset 1134000) (???) (BuildId: f0822664963e2f1f73d5ba465f374db7bfed127f)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #06 pc 01a48f58  /data/app/~~A9bENsp2dOjABrDS8FRWNg==/com.example.flutterbug1-0J4MVj8ZyLBGU5Y4xIijeA==/base.apk (offset 1134000) (???) (BuildId: f0822664963e2f1f73d5ba465f374db7bfed127f)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #07 pc 01a48dc8  /data/app/~~A9bENsp2dOjABrDS8FRWNg==/com.example.flutterbug1-0J4MVj8ZyLBGU5Y4xIijeA==/base.apk (offset 1134000) (???) (BuildId: f0822664963e2f1f73d5ba465f374db7bfed127f)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #08 pc 000eb720  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start+208) (BuildId: cd953571180b7f5f8ae5570dad29595f)
F/ple.flutterbug1( 6443): runtime.cc:714]   native: #09 pc 0007e2d0  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: cd953571180b7f5f8ae5570dad29595f)
F/ple.flutterbug1( 6443): runtime.cc:714]   (no managed stack frames)
F/ple.flutterbug1( 6443): runtime.cc:714]
(ViewRootImpl.java:9212)
  at void android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(android.view.InputEvent) (ViewRootImpl.java:9463)
  at void android.view.InputEventReceiver.dispatchInputEvent(int, android.view.InputEvent) (InputEventReceiver.java:276)
  at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
  at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:339)
  at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:186)
  at void android.os.Looper.loop() (Looper.java:351)
  at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8377)
  at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:584)
  at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1013)
    in call to CallVoidMethodV
    from void android.os.MessageQueue.nativePollOnce(long, int)'
    x0  0000000000000000  x1  000000000000192b  x2  0000000000000006  x3  0000007fcecd83d0
    x4  686e71636d601f63  x5  686e71636d601f63  x6  686e71636d601f63  x7  7f7f7f7f7f7f7f7f
    x8  00000000000000f0  x9  00000078ed0ffd60  x10 0000000000000001  x11 00000078ed165060
    x12 0000007fcecd7120  x13 0000000000000c93  x14 0000007fcecd71d0  x15 000000004cec4ec5
    x16 00000078ed1d48e0  x17 00000078ed1ae2f0  x18 000000790144a000  x19 00000000000000ac
    x20 00000000000000b2  x21 000000000000192b  x22 000000000000192b  x23 00000000ffffffff
    x24 000000785c40e000  x25 0000007900990000  x26 0000007fcecd85e0  x27 00000078fade84d0
    x28 00000078fade8510  x29 0000007fcecd8450
    lr  00000078ed155a74  sp  0000007fcecd83b0  pc  00000078ed155aa4  pst 0000000000001000
backtrace:
      #00 pc 000000000007caa4  /apex/com.android.runtime/lib64/bionic/libc.so (abort+180) (BuildId: cd953571180b7f5f8ae5570dad29595f)
      #01 pc 00000000008fdf80  /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+1004) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #02 pc 000000000001654c  /apex/com.android.art/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_0::__invoke(char const*)+80) (BuildId: 4d7605789d21176764345a0353194396)
      #03 pc 0000000000015a4c  /apex/com.android.art/lib64/libbase.so (android::base::LogMessage::~LogMessage()+548) (BuildId: 4d7605789d21176764345a0353194396)
      #04 pc 0000000000300468  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1568) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #05 pc 00000000005a7aac  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+104) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #06 pc 0000000000326248  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...) (.__uniq.99033978352804627313491551960229047428)+140) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #07 pc 0000000000326a5c  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::(anonymous namespace)::JniValueType*) (.__uniq.99033978352804627313491551960229047428)+2028) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #08 pc 0000000000322b10  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType) (.__uniq.99033978352804627313491551960229047428)+248) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #09 pc 0000000000322840  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) (.__uniq.99033978352804627313491551960229047428.llvm.12386659457840031734)+72) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #10 pc 00000000000bf748  /system/lib64/libandroid_runtime.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+120) (BuildId: 80fef4d16824c00740a3c0484769118f)
      #11 pc 000000000012ddf0  /system/lib64/libandroid_runtime.so (android::NativeInputEventReceiver::consumeEvents(_JNIEnv*, bool, long, bool*)+560) (BuildId: 80fef4d16824c00740a3c0484769118f)
      #12 pc 000000000012da98  /system/lib64/libandroid_runtime.so (android::NativeInputEventReceiver::handleEvent(int, int, void*)+264) (BuildId: 80fef4d16824c00740a3c0484769118f)
      #13 pc 000000000001836c  /system/lib64/libutils.so (android::Looper::pollInner(int)+1068) (BuildId: 6038dbf95f76d91eaf842148f10f89ea)
      #14 pc 0000000000017ee0  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: 6038dbf95f76d91eaf842148f10f89ea)
      #15 pc 00000000001650ec  /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44) (BuildId: 80fef4d16824c00740a3c0484769118f)
      #16 pc 00000000024032dc  /memfd:jit-cache (deleted) (art_jni_trampoline+140)
      #17 pc 000000000206e224  /memfd:jit-cache (deleted) (android.os.MessageQueue.next+356)
      #18 pc 000000000206d1e0  /memfd:jit-cache (deleted) (android.os.Looper.loopOnce+176)
      #19 pc 00000000002ab260  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+640) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #20 pc 0000000000585ca0  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+1984) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #21 pc 00000000004910e8  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>(art::interpreter::SwitchImplContext*)+468) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #22 pc 00000000003d1718  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #23 pc 00000000001f14d0  /system/framework/framework.jar (android.os.Looper.loop+0)
      #24 pc 00000000003d22e4  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+448) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #25 pc 0000000000586350  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+3696) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #26 pc 00000000004910e8  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>(art::interpreter::SwitchImplContext*)+468) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #27 pc 00000000003d1718  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #28 pc 00000000001c8288  /system/framework/framework.jar (android.app.ActivityThread.main+0)
      #29 pc 00000000003d136c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.1949915194566060767)+364) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #30 pc 00000000003d0aa0  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+1020) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #31 pc 00000000002c2438  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #32 pc 00000000002ab260  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+640) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #33 pc 00000000002a12b4  /apex/com.android.art/lib64/libart.so (_jobject* art::InvokeMethod<(art::PointerSize)8>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+552) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #34 pc 00000000005ac130  /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*) (.__uniq.165753521025965369065708152063621506277)+32) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #35 pc 00000000002c2300  /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+144) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #36 pc 00000000002aaf94  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #37 pc 0000000000585f60  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+2688) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #38 pc 00000000004914e0  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>(art::interpreter::SwitchImplContext*)+1484) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #39 pc 00000000003d1718  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #40 pc 0000000000413fb0  /system/framework/framework.jar (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+0)
      #41 pc 00000000003d136c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.1949915194566060767)+364) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #42 pc 00000000003d0aa0  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+1020) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #43 pc 00000000002c2438  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #44 pc 0000000000f4eb64  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (com.android.internal.os.ZygoteInit.main+4436)
      #45 pc 00000000002ab260  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+640) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #46 pc 00000000002a9e60  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+876) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #47 pc 000000000060b158  /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+184) (BuildId: a1fcb66a9fb3fa9071e8a42dcf9cd5ea)
      #48 pc 00000000000c0cc8  /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+104) (BuildId: 80fef4d16824c00740a3c0484769118f)
      #49 pc 00000000000cd204  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+948) (BuildId: 80fef4d16824c00740a3c0484769118f)
      #50 pc 0000000000002560  /system/bin/app_process64 (main+1280) (BuildId: 670eea337e5a073c5116a1d0a78df132)
      #51 pc 0000000000074dd0  /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+96) (BuildId: cd953571180b7f5f8ae5570dad29595f)
Lost connection to device.

Flutter Doctor output

Doctor output
└─ $ flutter doctor -v
[✓] Flutter (Channel stable, 3.41.6, on Ubuntu 24.04.4 LTS 6.8.0-107-generic, locale en_US.UTF-8) [42ms]
    • Flutter version 3.41.6 on channel stable at /home/harri/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision db50e20168 (2 weeks ago), 2026-03-25 16:21:00 -0700
    • Engine revision 425cfb54d0
    • Dart version 3.11.4
    • DevTools version 2.54.2
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop,
      enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file,
      enable-lldb-debugging, enable-uiscene-migration

[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [1,398ms]
    • Android SDK at /home/harri/Android/Sdk
    • Emulator version 36.5.10.0 (build_id 15081367) (CL:N/A)
    • Platform android-36, build-tools 36.1.0
    • Java binary at: /home/harri/android-studio/jbr/bin/java
      This is the JDK bundled with the latest Android Studio installation on this machine.
      To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 21.0.10+-14961533-b1163.108)
    • All Android licenses accepted.

[✓] Chrome - develop for the web [10ms]
    • Chrome at google-chrome

[✓] Linux toolchain - develop for Linux desktop [546ms]
    • Ubuntu clang version 18.1.3 (1ubuntu1)
    • cmake version 3.28.3
    • ninja version 1.11.1
    • pkg-config version 1.8.1
    • OpenGL core renderer: NVIDIA GeForce RTX 4060 Ti/PCIe/SSE2 (X11)
    • OpenGL core version: 4.6.0 NVIDIA 580.126.09 (X11)
    • OpenGL core shading language version: 4.60 NVIDIA (X11)
    • OpenGL ES renderer: NVIDIA GeForce RTX 4060 Ti/PCIe/SSE2 (X11)
    • OpenGL ES version: OpenGL ES 3.2 NVIDIA 580.126.09 (X11)
    • OpenGL ES shading language version: OpenGL ES GLSL ES 3.20 (X11)
    • GL_EXT_framebuffer_blit: yes (X11)
    • GL_EXT_texture_format_BGRA8888: yes (X11)

[✓] Connected device (3 available) [196ms]
    • DN2103 (mobile) • IZEE7HKZYLUW9HHM • android-arm64  • Android 13 (API 33)
    • Linux (desktop) • linux            • linux-x64      • Ubuntu 24.04.4 LTS 6.8.0-107-generic
    • Chrome (web)    • chrome           • web-javascript • Google Chrome 145.0.7632.45

[✓] Network resources [654ms]
    • All expected network resources are available.

• No issues found!

Metadata

Metadata

Assignees

Labels

P1High-priority issues at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)c: crashStack traces logged to the consolehas reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-androidAndroid applications specificallyplatform-iosiOS applications specificallyteam-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)triaged-accessibilityTriaged by Framework Accessibility team

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions