<p dir="auto">We're parsing <a href="https://github.com/flutter/website/blob/master/_data/catalog/widgets.json"><code class="notranslate">widgets.json</code></a> to take advantage of the widget categories in the inspector.  In the process of adding some validation, I noticed that the following widgets show up more than once (and with different categorizations):</p>
<ul dir="auto">
<li><code class="notranslate">GridView</code></li>
<li><code class="notranslate">ListView</code></li>
<li><code class="notranslate">Transform</code></li>
</ul>
<p dir="auto">Here are the raw bits:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="  {
    &quot;name&quot;: &quot;GridView&quot;,
    &quot;description&quot;: &quot;A grid list consists of a repeated pattern of cells arrayed in a vertical and horizontal layout. The GridView widget implements this component.&quot;,
    &quot;categories&quot;: [],
    &quot;subcategories&quot;: [
      &quot;Information displays&quot;
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/GridView-class.html&quot;,
    &quot;image&quot;: &quot;&lt;img alt='' src='https://material-design.storage.googleapis.com/publish/material_v_9/0B7WCemMG6e0VandQYXpNMG9aQUk/components_grid_lists.png'&gt;&quot;
  },

  {
    &quot;name&quot;: &quot;GridView&quot;,
    &quot;description&quot;: &quot;A scrollable, 2D array of widgets.&quot;,
    &quot;categories&quot;: [
    ],
    &quot;subcategories&quot;: [
      &quot;Multi-child layout widgets&quot;
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/GridView-class.html&quot;,
    &quot;image&quot;: &quot;&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;&quot;
  },
  {
    &quot;name&quot;: &quot;GridView&quot;,
    &quot;description&quot;: &quot;A scrollable, 2D array of widgets. The most commonly used grid layouts are GridView.count, which creates a layout with a fixed number of tiles in the cross axis, and GridView.extent, which creates a layout with tiles that have a maximum cross-axis extent. A custom SliverGridDelegate can produce an aribtrary 2D arrangement of children, including arrangements that are unaligned or overlapping.&quot;,
    &quot;categories&quot;: [
      &quot;Scrolling&quot;
    ],
    &quot;subcategories&quot;: [
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/GridView-class.html&quot;,
    &quot;image&quot;: &quot;&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;&quot;
  },

  {
    &quot;name&quot;: &quot;ListView&quot;,
    &quot;sample&quot;: &quot;ListView_index&quot;,
    &quot;description&quot;: &quot;A scrollable, linear list of widgets. ListView is the most commonly used scrolling widget. It displays its children one after another in the scroll direction. In the cross axis, the children are required to fill the ListView.&quot;,
    &quot;categories&quot;: [
    ],
    &quot;subcategories&quot;: [
      &quot;Multi-child layout widgets&quot;
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/ListView-class.html&quot;,
    &quot;image&quot;: &quot;&lt;svg viewBox='0 0 100 100'&gt;&lt;filter id='inset-shadow-block' x='-50%' y='-50%' width='200%' height='200%'&gt;&lt;feComponentTransfer in='SourceAlpha'&gt;&lt;feFuncA type='table' tableValues='1 0' /&gt;&lt;/feComponentTransfer&gt;&lt;feGaussianBlur stdDeviation='2' result='Blur'/&gt;&lt;feFlood flood-color='#666666' result='color'/&gt;&lt;feComposite in2='Blur' operator='in'/&gt;&lt;feComposite in2='SourceAlpha' operator='in' /&gt;&lt;feMerge&gt;&lt;feMergeNode /&gt;&lt;/feMerge&gt;&lt;/filter&gt;&lt;rect x='0' y='0' width='100' height='100' fill='#3949ab'/&gt;&lt;rect x='30' y='10' width='40' height='80' fill='#ffffff'/&gt;&lt;rect x='35' y='10' width='30' height='15' fill='#4dd0e1'/&gt;&lt;rect x='35' y='30' width='30' height='20' fill='#4dd0e1'/&gt;&lt;rect x='35' y='55' width='30' height='5' fill='#4dd0e1'/&gt;&lt;rect x='35' y='65' width='30' height='15' fill='#4dd0e1'/&gt;&lt;rect x='35' y='85' width='30' height='5' fill='#4dd0e1'/&gt;&lt;rect x='30' y='10' width='40' height='80' fill='#ffffff' filter='url(#inset-shadow-block)'/&gt;&lt;/svg&gt;&quot;
 {
    &quot;name&quot;: &quot;ListView&quot;,
    &quot;description&quot;: &quot;A scrollable, linear list of widgets. ListView is the most commonly used scrolling widget. It displays its children one after another in the scroll direction. In the cross axis, the children are required to fill the ListView.&quot;,
    &quot;categories&quot;: [
      &quot;Scrolling&quot;
    ],
    &quot;subcategories&quot;: [
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/ListView-class.html&quot;,
    &quot;image&quot;: &quot;&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;&quot;
  },
  {
    &quot;name&quot;: &quot;Transform&quot;,
    &quot;description&quot;: &quot;A widget that applies a transformation before painting its child.&quot;,
    &quot;categories&quot;: [
    ],
    &quot;subcategories&quot;: [
      &quot;Single-child layout widgets&quot;
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/Transform-class.html&quot;,
    &quot;image&quot;: &quot;&lt;svg viewBox='0 0 100 100'&gt;&lt;rect x='0' y='0' width='100' height='100' fill='#3949ab'/&gt;&lt;rect x='17.5' y='42.5' width='50' height='30' fill='#ffffff'/&gt;&lt;rect x='20' y='45' width='45' height='25' fill='#3b75ad'/&gt;&lt;rect x='20' y='45' width='45' height='25' fill='#4dd0e1' transform='translate(15 -5) rotate(-23) skewX(-10)'/&gt;&lt;/svg&gt;&quot;
  },
  {
    &quot;name&quot;: &quot;Transform&quot;,
    &quot;description&quot;: &quot;A widget that applies a transformation before painting its child.&quot;,
    &quot;categories&quot;: [
      &quot;Painting and effects&quot;
    ],
    &quot;subcategories&quot;: [
    ],
    &quot;link&quot;: &quot;https://docs.flutter.io/flutter/widgets/Transform-class.html&quot;,
    &quot;image&quot;: &quot;&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;&quot;
  },
"><pre class="notranslate"><code class="notranslate">  {
    "name": "GridView",
    "description": "A grid list consists of a repeated pattern of cells arrayed in a vertical and horizontal layout. The GridView widget implements this component.",
    "categories": [],
    "subcategories": [
      "Information displays"
    ],
    "link": "https://docs.flutter.io/flutter/widgets/GridView-class.html",
    "image": "&lt;img alt='' src='https://material-design.storage.googleapis.com/publish/material_v_9/0B7WCemMG6e0VandQYXpNMG9aQUk/components_grid_lists.png'&gt;"
  },

  {
    "name": "GridView",
    "description": "A scrollable, 2D array of widgets.",
    "categories": [
    ],
    "subcategories": [
      "Multi-child layout widgets"
    ],
    "link": "https://docs.flutter.io/flutter/widgets/GridView-class.html",
    "image": "&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;"
  },
  {
    "name": "GridView",
    "description": "A scrollable, 2D array of widgets. The most commonly used grid layouts are GridView.count, which creates a layout with a fixed number of tiles in the cross axis, and GridView.extent, which creates a layout with tiles that have a maximum cross-axis extent. A custom SliverGridDelegate can produce an aribtrary 2D arrangement of children, including arrangements that are unaligned or overlapping.",
    "categories": [
      "Scrolling"
    ],
    "subcategories": [
    ],
    "link": "https://docs.flutter.io/flutter/widgets/GridView-class.html",
    "image": "&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;"
  },

  {
    "name": "ListView",
    "sample": "ListView_index",
    "description": "A scrollable, linear list of widgets. ListView is the most commonly used scrolling widget. It displays its children one after another in the scroll direction. In the cross axis, the children are required to fill the ListView.",
    "categories": [
    ],
    "subcategories": [
      "Multi-child layout widgets"
    ],
    "link": "https://docs.flutter.io/flutter/widgets/ListView-class.html",
    "image": "&lt;svg viewBox='0 0 100 100'&gt;&lt;filter id='inset-shadow-block' x='-50%' y='-50%' width='200%' height='200%'&gt;&lt;feComponentTransfer in='SourceAlpha'&gt;&lt;feFuncA type='table' tableValues='1 0' /&gt;&lt;/feComponentTransfer&gt;&lt;feGaussianBlur stdDeviation='2' result='Blur'/&gt;&lt;feFlood flood-color='#666666' result='color'/&gt;&lt;feComposite in2='Blur' operator='in'/&gt;&lt;feComposite in2='SourceAlpha' operator='in' /&gt;&lt;feMerge&gt;&lt;feMergeNode /&gt;&lt;/feMerge&gt;&lt;/filter&gt;&lt;rect x='0' y='0' width='100' height='100' fill='#3949ab'/&gt;&lt;rect x='30' y='10' width='40' height='80' fill='#ffffff'/&gt;&lt;rect x='35' y='10' width='30' height='15' fill='#4dd0e1'/&gt;&lt;rect x='35' y='30' width='30' height='20' fill='#4dd0e1'/&gt;&lt;rect x='35' y='55' width='30' height='5' fill='#4dd0e1'/&gt;&lt;rect x='35' y='65' width='30' height='15' fill='#4dd0e1'/&gt;&lt;rect x='35' y='85' width='30' height='5' fill='#4dd0e1'/&gt;&lt;rect x='30' y='10' width='40' height='80' fill='#ffffff' filter='url(#inset-shadow-block)'/&gt;&lt;/svg&gt;"
 {
    "name": "ListView",
    "description": "A scrollable, linear list of widgets. ListView is the most commonly used scrolling widget. It displays its children one after another in the scroll direction. In the cross axis, the children are required to fill the ListView.",
    "categories": [
      "Scrolling"
    ],
    "subcategories": [
    ],
    "link": "https://docs.flutter.io/flutter/widgets/ListView-class.html",
    "image": "&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;"
  },
  {
    "name": "Transform",
    "description": "A widget that applies a transformation before painting its child.",
    "categories": [
    ],
    "subcategories": [
      "Single-child layout widgets"
    ],
    "link": "https://docs.flutter.io/flutter/widgets/Transform-class.html",
    "image": "&lt;svg viewBox='0 0 100 100'&gt;&lt;rect x='0' y='0' width='100' height='100' fill='#3949ab'/&gt;&lt;rect x='17.5' y='42.5' width='50' height='30' fill='#ffffff'/&gt;&lt;rect x='20' y='45' width='45' height='25' fill='#3b75ad'/&gt;&lt;rect x='20' y='45' width='45' height='25' fill='#4dd0e1' transform='translate(15 -5) rotate(-23) skewX(-10)'/&gt;&lt;/svg&gt;"
  },
  {
    "name": "Transform",
    "description": "A widget that applies a transformation before painting its child.",
    "categories": [
      "Painting and effects"
    ],
    "subcategories": [
    ],
    "link": "https://docs.flutter.io/flutter/widgets/Transform-class.html",
    "image": "&lt;img alt='' src='/images/catalog-widget-placeholder.png'&gt;"
  },

</code></pre></div>
<p dir="auto">I'm happy to update the JSON but I'm not sure which categorizations should win. <g-emoji class="g-emoji" alias="smile" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png">😄</g-emoji></p>
<p dir="auto">cc <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HansMuller/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HansMuller">@HansMuller</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Hixie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hixie">@Hixie</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sethladd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sethladd">@sethladd</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maryx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maryx">@maryx</a></p>
<p dir="auto">Steps to reproduce:</p>
<ol dir="auto">
<li>Launch gallery (profile or debug) using <code class="notranslate">flutter run</code>.</li>
<li>Go to the URL the console tells you about.</li>
<li>Try to do anything useful with the observatory.</li>
</ol>