title: I can't understand @required annotation in this code of Dart
body: <p>The code is part of this class</p>
  
  <pre><code>   class Category extends StatelessWidget {
  
        final String name;
        final ColorSwatch color;
        final IconData iconLocation;
  </code></pre>
  
  <p>And the use of required is this:</p>
  
  <pre><code>    const Category({
      Key key,
      @required this.name,
      @required this.color,
      @required this.iconLocation,
    })  : assert(name != null),
          assert(color != null),
          assert(iconLocation != null),
          super(key: key);
  </code></pre>
  
  <p>The use of Key key also confuses me.</p>