【问题标题】:InitialValue isn't working properly in Multi-Select package FlutterInitialValue 在 Multi-Select 包 Flutter 中无法正常工作
【发布时间】:2021-08-14 05:41:42
【问题描述】:

所以我在这个package 中使用MultiSelectBottomSheetField。我在他们的 github 上发布了一个问题,但它似乎相当不活跃,所以我来这里寻求帮助。

我在使用它的 initialValue 参数时遇到了一些问题。所以目前,我将数据作为字符串保存在 Firestore 中,但它的格式是列表。我试图做的是从firestore获取字符串数据->转换为具有相应类的列表->然后在上述包/小部件中显示为初始值。但是发生的事情是初始值没有显示,即使该值不为空。

所以对于上下文,这就是我如何从 firestore 字符串更改为列表:

  List<Skill?> skillList = [];
  void changeSkillToList(String? stringList) {
    int indexOfOpenBracket = stringList!.indexOf("[");
    int indexOfLastBracket = stringList.lastIndexOf("]");
    var noBracketString =
        stringList.substring(indexOfOpenBracket + 1, indexOfLastBracket);
    var list = noBracketString.split(", ");
    for (var i = 0; i < list.length; i++) {
      skillList.add(Skill(id: 1, name: list[i].toString()));
    }
  }

这就是我使用 acc 小部件的方式:

 final _skillItems =
    skill.map((skill) => MultiSelectItem<Skill>(skill, skill.name)).toList();

MultiSelectBottomSheetField<Skill?>(
selectedColor: Color(0xFF5DB075),
selectedItemsTextStyle:
    TextStyle(color: Colors.white),
initialChildSize: 0.4,
decoration: BoxDecoration(),
listType: MultiSelectListType.CHIP,
initialValue: skillList,
searchable: true,
items: _skillItems,
buttonText: Text("Select your skills...",
    style: GoogleFonts.inter(
        color: Color(0xFFBDBDBD),
        fontSize: 16)),
onConfirm: (values) {
  context
      .read(pharmacistSignUpProvider.notifier)
      .changeSkillList(values);
},
chipDisplay: MultiSelectChipDisplay(
  items: context
      .read(pharmacistSignUpProvider.notifier)
      .skillList
      ?.map((e) =>
          MultiSelectItem(e, e.toString()))
      .toList(),
  chipColor: Color(0xFF5DB075),
  onTap: (value) {
    context
        .read(
            pharmacistSignUpProvider.notifier)
        .skillList
        ?.remove(value);
    return context
        .read(
            pharmacistSignUpProvider.notifier)
        .skillList;
  },
  textStyle: TextStyle(color: Colors.white),
),
),

这是我的 initState:

  List<Skill?> skillList = [];
  @override
  void initState() {
    skillList = changeSkillToList(context
        .read(pharmacistMainProvider.notifier)
        .userDataMap?["knownSkills"]);
    print(skillList);
    super.initState();
  }

如果有人可以帮助我,将不胜感激。如果大家有任何问题,请告诉我

谢谢!!

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    我遇到了一些问题,我通过在您的案例技能中将 == 运算符添加到我的实体来解决它

      @override
      bool operator ==(Object other) {
        return other is Skill && this.id == other.id;
      }
    

    在您的技能课程中

    【讨论】:

      猜你喜欢
      • 2023-01-04
      • 2021-08-22
      • 2021-05-17
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多