anchor.diff:    final Widget disabledHint;
   
     /// Called when the user selects an item.
  +  ///
  +  /// If the [onChanged] callback is null or the list of [items] is null
  +  /// then the dropdown button will be disabled, i.e. its arrow will be
  +  /// displayed in grey and it will not respond to input. A disabled button
  +  /// will display the [disabledHint] widget if it is non-null.
     final ValueChanged<T> onChanged;
   
     /// The z-coordinate at which to place the menu when open.
     ///
  -  /// The following elevations have defined shadows: 1, 2, 3, 4, 6, 8, 9, 12, 16, 24
  +  /// The following elevations have defined shadows: 1, 2, 3, 4, 6, 8, 9, 12,
  +  /// 16, and 24. See [kElevationToShadow].
     ///
     /// Defaults to 8, the appropriate elevation for dropdown buttons.
     final int elevation;
  
positive.code:     this.isDense = false,
      this.isExpanded = false,
    }) : assert(items == null || value == null || items.where((DropdownMenuItem<T> item) => item.value == value).length == 1),
        super(key: key);
  
    /// The list of possible items to select among.
    final List<DropdownMenuItem<T>> items;
  
    /// The currently selected item, or null if no item has been selected. If
    /// value is null then the menu is popped up as if the first item was
    /// selected.
    final T value;
  
    /// Displayed if [value] is null.
  
negative.code: /// shows the currently selected item as well as an arrow that opens a menu for
  /// selecting another item.
  ///
  /// The type `T` is the type of the [value] that each dropdown item represents.
  /// All the entries in a given menu must represent values with consistent types.
  /// Typically, an enum is used. Each [DropdownMenuItem] in [items] must be
  /// specialized with that same type argument.
  ///
  /// The [onChanged] callback should update a state variable that defines the
  /// dropdown's value. It should also call [State.setState] to rebuild the
  /// dropdown with the new value.
  ///
  /// {@tool snippet --template=stateful_widget}
  ///
  /// This sample shows a `DropdownButton` whose value is one of
  /// "One", "Two", "Free", or "Four".
  ///
  /// ```dart preamble
  /// String dropdownValue = 'One';
  /// ```
  ///
  /// ```dart
  /// Widget build(BuildContext context) {
  ///   return Scaffold(
  ///     body: Center(
  ///       child: DropdownButton<String>(
  ///         value: dropdownValue,
  ///         onChanged: (String newValue) {
  ///           setState(() {
  ///             dropdownValue = newValue;
  ///           });
  ///         },
  ///         items: <String>['One', 'Two', 'Free', 'Four']
  ///           .map<DropdownMenuItem<String>>((String value) {
  ///             return DropdownMenuItem<String>(
  ///               value: value,
  ///               child: Text(value),
  ///             );
  ///           })
  ///           .toList(),
  ///       ),
  ///     ),
  ///   );
  /// }
  /// ```
  /// {@end-tool}
  ///
  /// If the [onChanged] callback is null or the list of [items] is null
  /// then the dropdown button will be disabled, i.e. its arrow will be
  /// displayed in grey and it will not respond to input. A disabled button
  /// will display the [disabledHint] widget if it is non-null.
  ///
  /// Requires one of its ancestors to be a [Material] widget.
  ///
  