【问题标题】:Flutter dropdown list from .json来自 .json 的颤振下拉列表
【发布时间】:2021-01-15 10:04:00
【问题描述】:

我是 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

谢谢:)

【问题讨论】:

  • 有效吗?如果不是,具体的问题是什么?
  • 您好@Sara,请您运行此代码,如果您遇到任何问题,请提出问题。
  • @mfkw1 嗨,我添加了有关我的问题的更多详细信息。谢谢!
  • 请包括准确的错误信息。您应该始终选择相关信息并尽可能清楚地陈述您的问题。
  • 完成了,我希望它会更好。不好意思,第一次发帖。

标签: android-studio flutter dart


【解决方案1】:

使用 autocomplete_textfield: ^1.6.4 包它会比下拉小部件更好的选择 https://medium.com/flutter-community/implementing-auto-complete-search-list-a8dd192bd5f6

【讨论】:

  • 您好,尽管没有错误,但我的代码无法正常工作。你能帮忙吗?
  • 按照链接中给出的步骤,您可以使其正常工作。
  • 我试过了,它没有显示任何东西......而且没有错误:/我在这里发了另一个帖子,也许你可以明白为什么:stackoverflow.com/questions/65741190/…
  • 不,还没弄明白
【解决方案2】:

所以,就像您的错误消息所说,您没有为您的DropdownButton 提供onChanged 参数。

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

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,如果没有请阅读documentation

【讨论】:

  • 感谢您的回复!我使用了自动完成文本字段,但它根本没有显示,尽管没有错误...我会试试你的方法!
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 2019-03-15
  • 1970-01-01
  • 2021-11-25
  • 2021-07-22
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
相关资源
最近更新 更多