'The argument type 'List<DropdownMenuItem<dynamic>>' can't be assigned to the parameter type 'List<DropdownMenuItem<String>>?

Currently, I am working on a Flutter tutorial which was developed on previous versions. The error occurred once we updated to the latest version of Dart and Flutter, probably due to null safety.

import 'package:bitcoin_ticker/coin_data.dart';
import 'package:flutter/material.dart';

class PriceScreen extends StatefulWidget {
  @override
  _PriceScreenState createState() => _PriceScreenState();
}

class _PriceScreenState extends State<PriceScreen> {
  
  String? selectedCurrency = 'USD';

  List<DropdownMenuItem> getDropdownItems(){
    List<DropdownMenuItem<String>> dropdownItems = [];

    for (String currency in currenciesList){
      var newItem = DropdownMenuItem(
        child: Text(currency), 
        value: currency,
      );
      dropdownItems.add(newItem);
    }

    return dropdownItems;
  }
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('🤑 Coin Ticker'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          
          Container(
            height: 150.0,
            alignment: Alignment.center,
            padding: EdgeInsets.only(bottom: 30.0),
            color: Colors.lightBlue,
            child: DropdownButton<String>(
              value: selectedCurrency,
              items: getDropdownItems(),    // This is where I'm getting an error
            onChanged: (value){
              setState(() {
                selectedCurrency = value;
              });;
            }),
          ),
        ],
      ),
    );
  }
}

I am a beginner to flutter and Dart so any help is appreciated.



Solution 1:[1]

Just remove <String> from DropdownButton<String>

child: DropdownButton(
              value: selectedCurrency,
              items: getDropdownItems(),    // This is where I'm getting an error
            onChanged: (value){
              setState(() {
                selectedCurrency = value;
              });;
            }),

Solution 2:[2]

You should change this line

List<DropdownMenuItem> getDropdownItems(){

to this

List<DropdownMenuItem<String>> getDropdownItems(){

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 LekPKD
Solution 2 manhtuan21