无法将参数类型“void Function(String)”分配给参数类型“void Function(String?)?”在下拉按钮中

时间:2021-06-26 10:40:13

标签: android flutter dart drop-down-menu

我正在尝试将 DropdownButton 小部件添加到我的应用中。

这是我的应用程序代码

import 'package:flutter/material.dart';

void main()
{
  runApp(MaterialApp(
    home: Home(),
  ));
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {

  var gadgets = ['Laptop', 'Cell-phone', 'Drone', 'earbuds', 'walkman'];
  var _currentGadgets = 'Gadgets';


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dropdown Button'),
        centerTitle: true,
      ),

      body: Column(
        children: [
         DropdownButton(
           items: gadgets.map((e){
             return DropdownMenuItem(
                 value: e,
                 child: Text(e),
             );
           }).toList(),
           onChanged: (String userchoice){
             setState(() {
               this._currentGadgets = userchoice;
             });
           },
           value: _currentGadgets,
         ),
        ],
      ),

    );
  }
}

当我尝试执行此代码时出现此错误 The argument type 'void Function(String)' can't be assigned to the parameter type 'void Function(String?)?'. 我该如何解决此问题?我是颤振的新手,过去 2 天我一直被困在这段代码中。请帮忙。

1 个答案:

答案 0 :(得分:0)

您得到的错误来自空安全,String? 类型意味着它可以是 Stringnull,但您的参数只接受 {{1} },没有String

为此,您可以通过添加 ! 来“强制”使用“非空”变量。在变量的末尾,但这样做时要小心。

null

您可以在官方文档中了解有关空安全语法和原则的更多信息:https://flutter.dev/docs/null-safety

https://api.flutter.dev/flutter/material/DropdownButton-class.html