Skip to content

Shell crashes when tapping on flyout menu item after items replaced #28078

@Dreamescaper

Description

@Dreamescaper

Description

In my Log In page implementation, if user is not logged in - I populate Shell with LogInPage only.
And when user is logged in - I replace Items with actual items.

Unfortunately, this scenario leads to crash on Android.

(It works fine if user is already logged in)

Steps to Reproduce

Shell implementation
namespace ShellBugRepro
{
    public class AppShell : Shell
    {
        public AppShell()
        {
            Items.Add(new LogInPage(this));
        }

        public void LoggedIn()
        {
            Items.Clear();

            Items.Add(new Page1());
            Items.Add(new Page2());
        }
    }

    public class LogInPage : ContentPage
    {
        public LogInPage(AppShell shell)
        {
            Title = "LogIn Page";

            var button = new Button { Text = "Click Me to Log In!" };
            button.Clicked += (_, _) => shell.LoggedIn();

            Content = new VerticalStackLayout
            {
                Children = { button }
            };
        }
    }


    public class Page1 : ContentPage
    {
        public Page1()
        {
            Title = "Page 1";
            Content = new VerticalStackLayout
            {
                Children = { new Label { Text = "Just a first page, nothing fancy." } }
            };
        }
    }

    public class Page2 : ContentPage
    {
        public Page2()
        {
            Title = "Page 2";
            Content = new VerticalStackLayout
            {
                Children = { new Label { Text = "Just a second page, nothing fancy." } }
            };
        }
    }
}
  1. Open repro project.
  2. Click on Click Me button.
  3. Click on Flyout menu button.

ER:
Flyout is opened.

AR:
Java.Lang.IllegalArgumentException: 'No drawer view found with gravity LEFT'

Link to public reproduction project repository

https://github.com/Dreamescaper/maui-repro-28078

Version with bug

9.0.40 SR4

Is this a regression from previous behavior?

Not sure, did not test other versions

Affected platforms

Android

Affected platform versions

Android 15

Relevant log output

[EGL_emulation] app_time_stats: avg=3112.41ms min=4.89ms max=21510.78ms count=7
Thread started: <Thread Pool> #12
Thread started: <Thread Pool> #13
[WindowOnBackDispatcher] OnBackInvokedCallback is not enabled for the application.
[WindowOnBackDispatcher] Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
Thread started: <Thread Pool> #14
[TabLayout] MODE_SCROLLABLE + GRAVITY_FILL is not supported, GRAVITY_START will be used instead
Thread started: <Thread Pool> #15
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] Process: com.companyname.shellbugrepro, PID: 9792
[AndroidRuntime] java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
[AndroidRuntime] 	at androidx.drawerlayout.widget.DrawerLayout.openDrawer(DrawerLayout.java:1793)
[AndroidRuntime] 	at androidx.drawerlayout.widget.DrawerLayout.openDrawer(DrawerLayout.java:1779)
[AndroidRuntime] 	at androidx.appcompat.app.ActionBarDrawerToggle.toggle(ActionBarDrawerToggle.java:286)
[AndroidRuntime] 	at androidx.appcompat.app.ActionBarDrawerToggle$1.onClick(ActionBarDrawerToggle.java:201)
[AndroidRuntime] 	at android.view.View.performClick(View.java:8028)
[AndroidRuntime] 	at android.view.View.performClickInternal(View.java:8005)
[AndroidRuntime] 	at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
[AndroidRuntime] 	at android.view.View$PerformClick.run(View.java:31229)
[AndroidRuntime] 	at android.os.Handler.handleCallback(Handler.java:959)
[AndroidRuntime] 	at android.os.Handler.dispatchMessage(Handler.java:100)
[AndroidRuntime] 	at android.os.Looper.loopOnce(Looper.java:232)
[AndroidRuntime] 	at android.os.Looper.loop(Looper.java:317)
[AndroidRuntime] 	at android.app.ActivityThread.main(ActivityThread.java:8705)
[AndroidRuntime] 	at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
[AndroidRuntime] 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
[EGL_emulation] app_time_stats: avg=58.95ms min=2.94ms max=1368.37ms count=31
**Java.Lang.IllegalArgumentException:** 'No drawer view found with gravity LEFT'

[EGL_emulation] app_time_stats: avg=16.43ms min=12.01ms max=24.33ms count=60
[EGL_emulation] app_time_stats: avg=16.41ms min=11.47ms max=18.85ms count=61
[EGL_emulation] app_time_stats: avg=15.83ms min=7.94ms max=20.43ms count=60
[EGL_emulation] app_time_stats: avg=16.08ms min=5.64ms max=21.86ms count=61
[EGL_emulation] app_time_stats: avg=3.66ms min=2.22ms max=30.18ms count=60
[EGL_emulation] app_time_stats: avg=3.00ms min=2.02ms max=4.23ms count=61
[monodroid-assembly] Shared library 'liblog' not loaded, p/invoke '__android_log_print' may fail
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Java.Lang.IllegalArgumentException: No drawer view found with gravity LEFT
[MonoDroid] 
[MonoDroid]   --- End of managed Java.Lang.IllegalArgumentException stack trace ---
[MonoDroid] java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
[MonoDroid] 	at androidx.drawerlayout.widget.DrawerLayout.openDrawer(DrawerLayout.java:1793)
[MonoDroid] 	at androidx.drawerlayout.widget.DrawerLayout.openDrawer(DrawerLayout.java:1779)
[MonoDroid] 	at androidx.appcompat.app.ActionBarDrawerToggle.toggle(ActionBarDrawerToggle.java:286)
[MonoDroid] 	at androidx.appcompat.app.ActionBarDrawerToggle$1.onClick(ActionBarDrawerToggle.java:201)
[MonoDroid] 	at android.view.View.performClick(View.java:8028)
[MonoDroid] 	at android.view.View.performClickInternal(View.java:8005)
[MonoDroid] 	at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
[MonoDroid] 	at android.view.View$PerformClick.run(View.java:31229)
[MonoDroid] 	at android.os.Handler.handleCallback(Handler.java:959)
[MonoDroid] 	at android.os.Handler.dispatchMessage(Handler.java:100)
[MonoDroid] 	at android.os.Looper.loopOnce(Looper.java:232)
[MonoDroid] 	at android.os.Looper.loop(Looper.java:317)
[MonoDroid] 	at android.app.ActivityThread.main(ActivityThread.java:8705)
[MonoDroid] 	at java.lang.reflect.Method.invoke(Native Method)
[MonoDroid] 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
[MonoDroid] 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
[MonoDroid] 
[MonoDroid]   --- End of managed Java.Lang.IllegalArgumentException stack trace ---
[MonoDroid] java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
[MonoDroid] 	at androidx.drawerlayout.widget.DrawerLayout.openDrawer(DrawerLayout.java:1793)
[MonoDroid] 	at androidx.drawerlayout.widget.DrawerLayout.openDrawer(DrawerLayout.java:1779)
[MonoDroid] 	at androidx.appcompat.app.ActionBarDrawerToggle.toggle(ActionBarDrawerToggle.java:286)
[MonoDroid] 	at androidx.appcompat.app.ActionBarDrawerToggle$1.onClick(ActionBarDrawerToggle.java:201)
[MonoDroid] 	at android.view.View.performClick(View.java:8028)
[MonoDroid] 	at android.view.View.performClickInternal(View.java:8005)
[MonoDroid] 	at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
[MonoDroid] 	at android.view.View$PerformClick.run(View.java:31229)
[MonoDroid] 	at android.os.Handler.handleCallback(Handler.java:959)
[MonoDroid] 	at android.os.Handler.dispatchMessage(Handler.java:100)
[MonoDroid] 	at android.os.Looper.loopOnce(Looper.java:232)
[MonoDroid] 	at android.os.Looper.loop(Looper.java:317)
[MonoDroid] 	at android.app.ActivityThread.main(ActivityThread.java:8705)
[MonoDroid] 	at java.lang.reflect.Method.invoke(Native Method)
[MonoDroid] 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
[MonoDroid] 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
[MonoDroid] 

Recording

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-controls-shellShell Navigation, Routes, Tabs, Flyoutpartner/syncfusionIssues / PR's with Syncfusion collaborationplatform/androids/triagedIssue has been revieweds/verifiedVerified / Reproducible Issue ready for Engineering Triaget/bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions