【发布时间】: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