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
相关产品推荐
相关产品推荐

