dotnet/maui · error · ArgumentNullException

renderer

Error message

renderer

What it means

EventTracker constructor throws ArgumentNullException(nameof(renderer)) when the IVisualElementRenderer is null. EventTracker attaches gesture-recognizer collection-changed handling to a renderer's element; without a renderer there is no element to track, so construction is rejected immediately.

Source

Thrown at src/Compatibility/Core/src/iOS/EventTracker.cs:49

		readonly NotifyCollectionChangedEventHandler _collectionChangedHandler;

		readonly Dictionary<IGestureRecognizer, NativeGestureRecognizer> _gestureRecognizers = new Dictionary<IGestureRecognizer, NativeGestureRecognizer>();

		readonly IVisualElementRenderer _renderer;

		bool _disposed;
		NativeView _handler;

		double _previousScale = 1.0;
#if __MOBILE__
		UITouchEventArgs _shouldReceiveTouch;
		DragAndDropDelegate _dragAndDropDelegate;
#endif

		public EventTracker(IVisualElementRenderer renderer)
		{
			if (renderer == null)
				throw new ArgumentNullException(nameof(renderer));

			_collectionChangedHandler = ModelGestureRecognizersOnCollectionChanged;

			_renderer = renderer;
			_renderer.ElementChanged += OnElementChanged;
		}

		ObservableCollection<IGestureRecognizer> ElementGestureRecognizers
		{
			get
			{
				return ((_renderer?.Element as IGestureController)
							?.CompositeGestureRecognizers as ObservableCollection<IGestureRecognizer>);
			}
		}

		internal void Disconnect()
		{

View on GitHub (pinned to f377ff1c5e)

Solutions

  1. Create EventTracker only after the renderer is fully initialized and assigned.
  2. Verify the renderer is non-null before constructing EventTracker.
  3. Move EventTracker initialization to OnElementChanged / the ElementChanged event.

Example fix

// before
_tracker = new EventTracker(null);
// after
if (renderer == null)
    throw new InvalidOperationException("Renderer not ready.");
_tracker = new EventTracker(renderer);
Defensive patterns

Strategy: validation

Validate before calling

if (renderer == null)
    throw new InvalidOperationException("Renderer is not ready; cannot create EventTracker.");
var tracker = new EventTracker(renderer);

Type guard

static bool IsRendererReady(IVisualElementRenderer r) => r?.Element != null;

Prevention

When it happens

Trigger: Constructing EventTracker with a null renderer; typically only inside custom renderers that build an EventTracker before Platform.GetRenderer returns a value.

Common situations: A custom renderer instantiating EventTracker during constructor execution before the renderer is fully initialized; passing renderer from a GetRenderer call that returned null because the element was not registered.

Related errors


AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13). Data as JSON: /api/errors/c793be0c583c4bc4. Report an issue: GitHub.