{"record":{"id":"de6d61640f061747","repo":"dotnet/maui","slug":"renderer-de6d61","errorCode":null,"errorMessage":"renderer","messagePattern":"renderer","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Compatibility/Core/src/iOS/VisualElementPackager.cs","lineNumber":29,"sourceCode":"#endif\n{\n\t[Obsolete]\n\tpublic class VisualElementPackager : IDisposable\n\t{\n\t\tVisualElement _element;\n\n\t\tbool _isDisposed;\n\n\t\tIElementController ElementController => _element;\n\n\t\tpublic VisualElementPackager(IVisualElementRenderer renderer) : this(renderer, null)\n\t\t{\n\t\t}\n\n\t\tVisualElementPackager(IVisualElementRenderer renderer, VisualElement element, bool isHeadless = false)\n\t\t{\n\t\t\tif (renderer == null)\n\t\t\t\tthrow new ArgumentNullException(nameof(renderer));\n\n\t\t\tRenderer = renderer;\n\t\t\tif (!isHeadless)\n\t\t\t\trenderer.ElementChanged += OnRendererElementChanged;\n\n\t\t\tSetElement(null, element ?? renderer.Element);\n\t\t}\n\n\t\tprotected IVisualElementRenderer Renderer { get; set; }\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tDispose(true);\n\t\t}\n\n\t\tpublic void Load()\n\t\t{\n\t\t\tfor (var i = 0; i < ElementController.LogicalChildren.Count; i++)","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/dotnet/maui/blob/f377ff1c5ee04d334d8a925f50c83a6b7afddf03/src/Compatibility/Core/src/iOS/VisualElementPackager.cs#L11-L47","documentation":"VisualElementPackager manages adding/removing a VisualElement's children as native subviews. Its private constructor requires a non-null renderer (it stores Renderer and subscribes to ElementChanged, line 37-38, and reads renderer.Element at line 39). The public constructor delegates to it, so any VisualElementPackager construction needs a valid renderer.","triggerScenarios":"Calling new VisualElementPackager(null) - occurs in custom layout renderers that create the packager before assigning 'this', or that pass a null renderer reference from a failed lookup.","commonSituations":"Custom layout renderers (LayoutRenderer subclasses) initialising the packager in a field initializer; renderer created via factory that returned null being forwarded.","solutions":["Construct VisualElementPackager inside the renderer constructor body where 'this' is non-null.","Ensure the renderer implements IVisualElementRenderer fully before creating the packager.","Pass the element explicitly if the renderer's Element might differ: new VisualElementPackager(this, element)."],"exampleFix":"// before\nVisualElementPackager _packager = new VisualElementPackager(this);\n\n// after\nVisualElementPackager _packager;\npublic MyLayoutRenderer() { _packager = new VisualElementPackager(this); }","handlingStrategy":"validation","validationCode":"if (renderer == null) throw new ArgumentNullException(nameof(renderer));\nvar packager = new VisualElementPackager(renderer);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Instantiate VisualElementPackager in the renderer constructor body, not in a field initializer.","Ensure 'this' is a valid IVisualElementRenderer before creating the packager."],"tags":["argumentnullexception","ios","packager","layout-renderer","renderer-wiring"],"backgroundTag":null,"analyzedSha":"f377ff1c5ee04d334d8a925f50c83a6b7afddf03","analyzedAt":"2026-08-13T14:26:18.069Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}