dotnet/maui · error · ArgumentNullException
renderer
Error message
renderer
What it means
CustomWebViewNavigationDelegate is the WKWebView navigation delegate created per WkWebViewRenderer. It stores the renderer to forward navigation events back to the WebView/IWebViewController (lines 261-262). A null renderer would NPE on every callback, so the constructor rejects null.
Source
Thrown at src/Compatibility/Core/src/iOS/Renderers/WkWebViewRenderer.cs:704
{
cookieBuilder.Append($"; HttpOnly");
}
cookieBuilder.Append("';");
}
return cookieBuilder.ToString();
}
class CustomWebViewNavigationDelegate : WKNavigationDelegate
{
readonly WkWebViewRenderer _renderer;
WebNavigationEvent _lastEvent;
public CustomWebViewNavigationDelegate(WkWebViewRenderer renderer)
{
if (renderer == null)
throw new ArgumentNullException("renderer");
_renderer = renderer;
}
WebView WebView => _renderer.WebView;
IWebViewController WebViewController => WebView;
[PortHandler]
public override void DidFailNavigation(WKWebView webView, WKNavigation navigation, NSError error)
{
var url = GetCurrentUrl();
WebViewController.SendNavigated(
new WebNavigatedEventArgs(_lastEvent, new UrlWebViewSource { Url = url }, url, WebNavigationResult.Failure)
);
_renderer.UpdateCanGoBackForward();
}
[PortHandler]View on GitHub (pinned to f377ff1c5e)
Solutions
- If overriding delegate creation, construct the delegate with 'this' (the fully-constructed renderer), not a null.
- Do not create CustomWebViewNavigationDelegate before the renderer is assigned.
- Use the default WkWebViewRenderer delegate wiring unless you have a specific reason to override.
Example fix
// before protected override WKNavigationDelegate CreateNavDelegate() => new CustomWebViewNavigationDelegate(_notSet); // after protected override WKNavigationDelegate CreateNavDelegate() => new CustomWebViewNavigationDelegate(this);
Defensive patterns
Strategy: validation
Validate before calling
if (renderer == null) throw new ArgumentNullException(nameof(renderer)); var del = new CustomWebViewNavigationDelegate(renderer);
Prevention
- Create the navigation delegate with a fully-constructed renderer ('this').
- Do not override delegate creation with partial-state renderers.
When it happens
Trigger: Constructing new CustomWebViewNavigationDelegate(null), which only happens inside the renderer code if the owning WkWebViewRenderer is null - generally an internal lifecycle issue rather than a caller mistake.
Common situations: Subclassing WkWebViewRenderer and overriding delegate creation while the renderer is partially constructed; custom WebView renderers that mis-wire the delegate.
Related errors
AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13).
Data as JSON: /api/errors/ca7832a4d641eb29.
Report an issue: GitHub.