nalu-development / nalu

Provides .NET MAUI packages to help with everyday challenges
https://nalu-development.github.io/nalu/
MIT License
66 stars 2 forks source link

[Glide] Load failed for [nalu_navigation_menu.png] #39

Closed mcanyucel closed 1 month ago

mcanyucel commented 3 months ago

Describe the bug

Thank you for this library. I came across it while trying to find a way to dispose the VM's in a Shell navigation and stumbled upon the infamous github thread.

I am trying to make it work, and I (tried to) implement a very basic use case. In the device log of the android emulator, the following errors keep popping up:

[Glide] Load failed for [nalu_navigation_menu.png] with dimensions [-2147483648x-2147483648]
[Glide] class com.bumptech.glide.load.engine.GlideException: Failed to load resource
[Glide] There were 3 root causes:
[Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory))
[Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory))
[Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory))
[Glide]  call GlideException#logRootCauses(String) for more detail
[Glide]   Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, LOCAL
[Glide] There was 1 root cause:
[Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory))
...

and it keeps going for many many lines.

I read that readme file says:

Due to some issues in MAUI, we need to define ImageSource for the menu button and back button displayed in the >navigation bar. Nalu navigation already provides them, but you can override them if you want: ...

This is nowhere a breaking issue, but I wonder if there is a way to solve it without supplying the necessary graphics manually.

Steps to reproduce

Just add the library to a MAUI project.

My shell xaml is as follows:

<?xml version="1.0" encoding="UTF-8" ?>
<nalu:NaluShell
    x:Class="InspectionClient.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:InspectionClient"
    xmlns:pages="clr-namespace:InspectionClient.Pages"
    xmlns:nalu="https://nalu-development.github.com/nalu/navigation"
    Shell.FlyoutBehavior="Disabled">

    <ShellContent nalu:Navigation.PageType="pages:HomePage" Title="Eagle Eye" />

    <ShellSection Title="Bridge Details">
        <ShellContent nalu:Navigation.PageType="pages:BridgeDetailsPage" />
    </ShellSection>

    <ShellSection Title="Image Viewer">
        <ShellContent nalu:Navigation.PageType="pages:ImageViewerPage" />
    </ShellSection>

    <ShellSection Title="New Inspection">
        <ShellContent nalu:Navigation.PageType="pages:NewInspectionPage" />
    </ShellSection>

    <ShellSection Title="Element Inspection Details">
        <ShellContent nalu:Navigation.PageType="pages:NewElementRecordPage" />
    </ShellSection>

</nalu:NaluShell>

The MAUI program is as follows:


public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        return MauiApp.CreateBuilder()
            .UseMauiApp<App>()
            .UseNaluNavigation<App>(RegisterNaluNavigation)
            .UseMauiCommunityToolkit(options =>
            {
                options.SetShouldEnableSnackbarOnWindows(true);
            })
            .UseSkiaSharp(true)
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                fonts.AddFont("materialdesignicons-webfont.ttf", "MaterialDesignIcons");
            })
            .RegisterServices()
            //.RegisterViews()
            //.RegisterViewModels()
            .RegisterPopups()
            .RegisterDebugLogger()
            .Build();

    }

    private static void RegisterNaluNavigation(Nalu.NavigationConfigurator configurator)
    {
        configurator.AddPage<HomeViewModel, HomePage>();
        configurator.AddPage<NewInspectionViewModel, NewInspectionPage>();
        configurator.AddPage<BridgeDetailsViewModel, BridgeDetailsPage>();
        configurator.AddPage<ImageViewerViewModel, ImageViewerPage>();
        configurator.AddPage<NewElementRecordViewModel, NewElementRecordPage>();
    }

    public static MauiAppBuilder RegisterServices(this MauiAppBuilder mauiAppBuilder)
    {
        mauiAppBuilder.Services.AddSingleton<IRemoteFileService, AzureFileService>();
        mauiAppBuilder.Services.AddSingleton<INotificationService, NotificationService>();
        mauiAppBuilder.Services.AddSingleton<ILocalFileService, LocalFileService>();

        mauiAppBuilder.Services.AddSingleton<UnitOfWork>();

        return mauiAppBuilder;
    }

    public static MauiAppBuilder RegisterViewModels(this MauiAppBuilder mauiAppBuilder)
    {
        mauiAppBuilder.Services.AddTransient<HomeViewModel>();
        mauiAppBuilder.Services.AddTransient<BridgeDetailsViewModel>();
        mauiAppBuilder.Services.AddTransient<ImageViewerViewModel>();
        mauiAppBuilder.Services.AddTransient<NewInspectionViewModel>();
        mauiAppBuilder.Services.AddTransient<NewElementRecordViewModel>();

        return mauiAppBuilder;
    }

    public static MauiAppBuilder RegisterViews(this MauiAppBuilder mauiAppBuilder)
    {
        // in a Shell-based app, .net will inject dependencies into detail pages that are registered with the Routing.RegisterRoute method.
        mauiAppBuilder.Services.AddTransient<BridgeDetailsPage>();
        mauiAppBuilder.Services.AddTransient<ImageViewerPage>();
        mauiAppBuilder.Services.AddTransient<NewInspectionPage>();
        mauiAppBuilder.Services.AddTransient<NewElementRecordPage>();
        mauiAppBuilder.Services.AddSingleton<HomePage>();

        return mauiAppBuilder;
    }

    public static MauiAppBuilder RegisterPopups(this MauiAppBuilder mauiAppBuilder)
    {
        mauiAppBuilder.Services.AddTransientPopup<SimpleProgressPopup, SimpleProgressPopupViewModel>();

        return mauiAppBuilder;
    }

    public static MauiAppBuilder RegisterDebugLogger(this MauiAppBuilder mauiAppBuilder)
    {
#if DEBUG
        mauiAppBuilder.Logging.AddDebug();
#endif

        return mauiAppBuilder;
    }
}

Expected behaviour

No errors in the output window.

albyrock87 commented 3 months ago

@mcanyucel may you create a simple repo to reproduce this error? I know you posted all the code above, but I'm thinking there might be issues with the csproj. I'm available on Discord if you want to chat further,

mcanyucel commented 3 months ago

Hey! Thanks for the quick response. I created an empty solution and implemented the basics. You can access it over https://github.com/mcanyucel/nalu-sample . This still results in the same error in the debug output on the main page. Thanks for the discord offer, I might drop by if I encounter something more code-breaking :P

[Glide] Load failed for [nalu_navigation_menu.png] with dimensions [-2147483648x-2147483648] [Glide] class com.bumptech.glide.load.engine.GlideException: Failed to load resource [Glide] There were 3 root causes: [Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory)) [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, LOCAL [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class java.io.FileNotFoundException: /nalu_navigation_menu.png: open failed: ENOENT (No such file or directory) [Glide] Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class android.os.ParcelFileDescriptor, LOCAL [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class android.content.res.AssetFileDescriptor, LOCAL [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] Root cause (1 of 3) [Glide] java.io.FileNotFoundException: /nalu_navigation_menu.png: open failed: ENOENT (No such file or directory) [Glide] at libcore.io.IoBridge.open(IoBridge.java:574) [Glide] at java.io.FileInputStream.(FileInputStream.java:160) [Glide] at java.io.FileInputStream.(FileInputStream.java:115) [Glide] at android.content.ContentResolver.openInputStream(ContentResolver.java:1526) [Glide] at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResourceFromUri(StreamLocalUriFetcher.java:74) [Glide] at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:13) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) [Glide] at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) [Glide] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [Glide] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424) [Glide] at java.lang.Thread.run(Thread.java:1012) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383) [Glide] Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) [Glide] at libcore.io.Linux.open(Native Method) [Glide] at libcore.io.ForwardingOs.open(ForwardingOs.java:563) [Glide] at libcore.io.BlockGuardOs.open(BlockGuardOs.java:274) [Glide] at libcore.io.ForwardingOs.open(ForwardingOs.java:563) [Glide] at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8063) [Glide] at libcore.io.IoBridge.open(IoBridge.java:560) [Glide] ... 18 more [Glide] Root cause (2 of 3) [Glide] java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:351) [Glide] at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:230) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1853) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1773) [Glide] at com.bumptech.glide.load.data.FileDescriptorLocalUriFetcher.loadResource(FileDescriptorLocalUriFetcher.java:20) [Glide] at com.bumptech.glide.load.data.FileDescriptorLocalUriFetcher.loadResource(FileDescriptorLocalUriFetcher.java:12) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:416) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailedInternal(SourceGenerator.java:223) [Glide] at com.bumptech.glide.load.engine.SourceGenerator$1.onLoadFailed(SourceGenerator.java:108) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:167) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) [Glide] at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) [Glide] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [Glide] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424) [Glide] at java.lang.Thread.run(Thread.java:1012) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383) [Glide] Root cause (3 of 3) [Glide] java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:351) [Glide] at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:230) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1853) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1773) [Glide] at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:20) [Glide] at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:11) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:416) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailedInternal(SourceGenerator.java:223) [Glide] at com.bumptech.glide.load.engine.SourceGenerator$1.onLoadFailed(SourceGenerator.java:108) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:167) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:416) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailedInternal(SourceGenerator.java:223) [Glide] at com.bumptech.glide.load.engine.SourceGenerator$1.onLoadFailed(SourceGenerator.java:108) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:167) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) [Glide] at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) [Glide] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [Glide] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424) [Glide] at java.lang.Thread.run(Thread.java:1012) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383) [Glide] Load failed for [crc6488302ad6e9e4df1a.ImageLoaderResultCallback@2879d4a] with dimensions [-2147483648x-2147483648] [Glide] class com.bumptech.glide.load.engine.GlideException: Failed to load resource

mcanyucel commented 3 months ago

The device is Tablet M-DPI 10.1in with Android 14 - API34 x86_64 arch and 512 MB ram.

The error Load failed for [nalu_navigation_menu.png] with dimensions [-2147483648x-2147483648] is interesting; the requested dimension looks like infinite, like the content has not been rendered yet. At first I thought maybe that is the issue but inner exceptions java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) most likely means a file issue.

albyrock87 commented 3 months ago

@mcanyucel as I imagined there was a simple mistake due to a flaw in the README.md.

You have to install Nalu.Maui.Navigation directly in your app csproj otherwise included resources (images) would not be included correctly.

I hope this commit makes things more clear: https://github.com/nalu-development/nalu/commit/0d0db660ab840654f80c48920895db02295e6979

Let me know if I can close this issue. Thanks.

mcanyucel commented 3 months ago

oh. thanks a lot! I will add the Nalu.Maui.Navigation.

Do I need to install Nalu.Maui.Core ?

mcanyucel commented 3 months ago

image

mcanyucel commented 3 months ago

I have updated the sample project above but the errors still exist. Is there any additional steps to do? I just added using nuget package manager UI.

albyrock87 commented 3 months ago

@mcanyucel import only the navigation package, it should work

albyrock87 commented 3 months ago

Hey @mcanyucel so here's the thing: you're right, there is a problem even including Nalu.Maui.Navigation. I'm providing default menu and back images through this msbuild configuration. Now it appears from logs that Glide is not able to find the image, and in fact it's not there. This looks nasty to solve: I have no clue on how to fix this packaging issue - unless this is a MAUI-Android build issue. As you can see images are embedded in the NuGet package together with targets file.

image

I'll try to find a solution, but in the mean time I think the app should work fine despite that error. You can provide your own images as explained here. And I also think you can provide null! on both methods to fallback to standard platform images.

But I suggest you to provide your own images to get around some MAUI bugs - unless they fixed them in one of the latest service releases (I'm using some icon fonts on my production app).

I'll get back to you once this is fixed, but in the mean time you should be good to go.

mcanyucel commented 3 months ago

You're right; supplying your own images works as it should:

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        return MauiApp.CreateBuilder()
            .UseMauiApp<App>()
            .UseNaluNavigation<App>(RegisterNaluNavigation)
            .UseMauiCommunityToolkit(options =>
            {
                options.SetShouldEnableSnackbarOnWindows(true);
            })
            .UseSkiaSharp(true)
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                fonts.AddFont("materialdesignicons-webfont.ttf", "MaterialDesignIcons");
            })
            .RegisterServices()
            //.RegisterViews()
            //.RegisterViewModels()
            .RegisterPopups()
            .RegisterDebugLogger()
            .Build();

    }

    private static void RegisterNaluNavigation(Nalu.NavigationConfigurator configurator)
    {
        configurator.AddPage<HomeViewModel, HomePage>();
        configurator.AddPage<NewInspectionViewModel, NewInspectionPage>();
        configurator.AddPage<BridgeDetailsViewModel, BridgeDetailsPage>();
        configurator.AddPage<ImageViewerViewModel, ImageViewerPage>();
        configurator.AddPage<NewElementRecordViewModel, NewElementRecordPage>();

        configurator.WithMenuImage(ImageSource.FromFile("uniconsbars.png"));
        configurator.WithBackImage(ImageSource.FromFile("evaiconsarrowbackoutline.png"));
    }
...
}
mcanyucel commented 3 months ago

fyi, passing null! as argument also works to prevent the Glide error.

  configurator.WithMenuImage(ImageSource.FromFile(null!));
  configurator.WithBackImage(ImageSource.FromFile(null!));
albyrock87 commented 1 month ago

With the introduction on Nalu 8.0.0 icons are not included in the package by default (means null! from the previous comment).

See the details in the release notes.