You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI启动直接加载含FFImageLoading的HomePage触发空引用异常

MAUI中FFImageLoading.CachedImage空引用异常解决方案

问题现象

  • 加载应用时触发System.NullReferenceException: 'Object reference not set to an instance of an object.',异常堆栈指向FFImageLoading.Maui.CachedImage相关方法
  • 仅特定场景触发:
    • 正常:先显示登录页,登录后跳转HomePage无异常
    • 异常:通过Preferences判断用户已登录,直接在App.xaml.cs中设置MainPage为HomePage时触发(原本是为了避免登录页闪屏)

相关代码

App.xaml.cs中的登录判断逻辑:

try
{
    string login = Preferences.Default.Get("islogin", "false").ToString();
    if (login == "true")
    {
        MainPage = new HomePage(true);
    }
    else if (login == "false")
    {
        MainPage = new LoginPage();
    }
}
catch (Exception e)
{
    Debug.WriteLine("IsLogin::" + e);
}

已在MauiProgram.cs中配置.UseFFImageLoading()

解决方案

方案1:延迟设置MainPage到OnStart方法

MAUI启动初期部分服务未完全初始化,直接在App构造函数加载带FFImageLoading的页面会出问题。可以先设置空白占位页,在OnStart中再切换页面:

public App()
{
    InitializeComponent();
    // 先设置空白页占位,避免闪屏同时等待服务初始化
    MainPage = new ContentPage();
}

protected override void OnStart()
{
    base.OnStart();
    try
    {
        string login = Preferences.Default.Get("islogin", "false");
        // Get方法返回的就是string类型,无需ToString
        MainPage = login == "true" ? new HomePage(true) : new LoginPage();
    }
    catch (Exception e)
    {
        Debug.WriteLine("IsLogin::" + e);
        MainPage = new LoginPage();
    }
}

方案2:检查FFImageLoading初始化顺序

确保MauiProgram.cs中.UseFFImageLoading()配置在.Build()之前,且紧跟.UseMauiApp<App>():

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .UseFFImageLoading() // 必须在Build之前配置
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });

    return builder.Build();
}

方案3:避免CachedImage绑定null值

检查HomePage中CachedImage的配置,添加占位图避免null源导致异常:

<ffimageloading:CachedImage 
    Source="{Binding ImageSource, FallbackValue='placeholder.png'}"
    LoadingPlaceholder="loading.png"
    ErrorPlaceholder="error.png" />

同时在对应的ViewModel中,确保ImageSource属性不会返回null,或者初始化时设置默认值。

内容的提问来源于stack exchange,提问作者Matthew Pans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:13:10