首页 > 解决方案 > 来自 .json 的颤振下拉列表

问题描述

我是 Flutter 开发的新手。

我想从 .json 文件(大学列表)中检索数据,并允许用户键入第一个字母,以便他们可以在颤振下拉选项中找到他们的大学。

我想从 .json 文件中检索的数据是“nom_court”。

我的初始代码是一个文本字段,它运行良好:

  TextFormField buildUniFormField() {
    return TextFormField(
      keyboardType: TextInputType.uni,
      onSaved: (newValue) => uni = newValue,
      onChanged: (value) {
        if (value.isNotEmpty) {
          removeError(error: kEmailNullError);
        } else if (emailValidatorRegExp.hasMatch(value)) {
          removeError(error: kInvalidEmailError);
        }
        return null;
      },
      validator: (value) {
        if (value.isEmpty) {
          addError(error: kEmailNullError);
          return "";
        } else if (!emailValidatorRegExp.hasMatch(value)) {
          addError(error: kInvalidEmailError);
          return "";
        }
        return null;
      },
      decoration: InputDecoration(
        labelText: "University",
        hintText: "Enter your university name",
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon: CustomSurffixIcon(svgIcon: "assets/icons/uni.svg"),

我现在正在尝试使用下拉列表,使用 .json 文件,并将其直接放在小部件代码中:

         @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        children: [
          buildEmailFormField(),
          SizedBox(height: getProportionateScreenHeight(30)),
          buildUniFormField(),
          DropdownButton<String>(
              items:list.map((Map val){
                return DropdownMenuItem<String>(
                 value: val["Uniname"],
                 child: new Text(val["nom_court"]),
          );).toList(),},

它不起作用,我在“下拉按钮”上有一个错误,说“未定义参数 Onchanged

谢谢 :)

标签: android-studioflutterdart

解决方案


所以,就像你的错误信息说的那样,你没有onChanged为你的DropdownButton.

您应该为当前下拉值创建一个状态,并setStateonChanged回调()中为当前下拉值创建一个状态,并setStateonChanged回调中:

class MyWidgetState extends State<MyWidget> {
  String dropdownValue = // here specify the initial value for DropdownButton

  Widget build(...) {
    //...
    DropdownButton(
      value: dropdownValue,
      onChanged: (value) => setState(() => dropdownValue = value),
      items: list.map(...),
    ),
  }
}

我假设您已经在使用 StatefulWidget,如果没有,请阅读文档


推荐阅读