【发布时间】:2021-12-06 07:27:13
【问题描述】:
-
我有一个固定列表,即在
init()中初始化的 fixGuestList。轻按一下按钮,就会出现来宾列表。在点击客人时,所选客人将被添加到固定列表,即 fixGuestList。所以基本上我将一个列表中的元素添加到固定列表中。 -
如果 fixGuestList 已经包含 guestList 中存在的元素。我想弹出一个已添加的snackBar() 来宾,否则将元素添加到修复列表。
-
仅在列表未初始化时才有效。如果我保留列表并在
init()上,我将元素分配给固定列表。并尝试添加重复的客人,小吃店不会弹出它会将重复的客人添加到列表中。例如;我从来宾列表中添加了来宾“A”。然后我重新启动应用程序,然后再次添加来宾“A”,即使 fixedGuestList 包含“A”(我在打印语句“A”存在)中添加了“A”,如果我添加“A”并执行不重新启动并重试尝试添加 'A' 会弹出快餐栏。 -
Getx 用作 StateManagement,GetStorage 用于 Persisit 数据。两个列表的值都是映射。
代码如下:
class GuestController extends GetxController {
final _userDataController = Get.find<UserDataController>();
List fixGuestList = List.filled(3, null, growable: false);
List? guestList = _userDataController.userDataModel.value.totalGuest! // This list is filled via API
// returns and empty index for fixGuestList
int _returnIndex() {
if (fixGuestList[0] == null) {
return 0;
} else if (fixGuestList[1] == null) {
return 1;
} else if (fixGuestList[2] == null) {
return 2;
}
return 3;
}
// Add function
void addToLane({required int index, required BuildContext context}) {
if (fixGuestList.contains(guestList![index])) {
ScaffoldMessenger.of(context).showSnackBar(_snackBar);
} else {
fixGuestList[_returnIndex()] = guestList![index];
storageBox.write('FixGuestList', fixGuestList);
}
update();
}
//
void onInitAssign() async {
final _boxValue = storageBox.read('FixGuestList');
if (_boxValue == null) {
List fixGuestList = List.filled(3, null, growable: false);
} else {
fixGuestList = _boxValue;
}
update();
}
// OnInit Function
@override
void onInit() {
onInitAssign();
super.onInit();
}
}
API 类:
class FirbaseAPI extends GetxController {
@override
void onInit() {
userDataModel.bindStream(stream());
super.onInit();
}
// Stream User Model
Rx<UserDataModel> userDataModel = UserDataModel().obs;
// Stream
Stream<UserDataModel> stream() {
return FirebaseFirestore.instance
.collection('users')
.doc('userA')
.snapshots()
.map((ds) {
var mapData = ds.data();
UserDataModel extractedModel = UserDataModel.fromMap(mapData);
return extractedModel;
});
}
}
模型类:
class UserDataModel {
String? clubName;
List? totalGuest;
UserDataModel({
this.clubName,
this.totalGuest,
});
factory UserDataModel.fromMap(dynamic fieldData) {
return UserDataModel(
totalGuest: fieldData['totalGuest'],
);
}
}
【问题讨论】:
标签: flutter dart flutter-getx