只要用户预订行程,然后将其作为列表检索,就尝试将一些项目存储在共享首选项中。 我尝试了这种方法,但即使我预订了不止一次旅行,结果也只返回一件商品。从我得到的数据来看,很明显我的代码无法存储项目列表。我认为每当添加新项目时,前一个项目就会被删除。我真的需要一种方法来解决这个问题。 这是我尝试过的。
class TripController extends GetxController{
final TripRepository tripRepository;
TripController({required this.tripRepository});
DateTime bookedDate = DateTime.now();
DateTime bookedTime = DateTime.now();
DateFormat df = DateFormat("yyyy-MM-dd");
DateFormat tf = DateFormat("HH:mm");
Map<int, TokenModel> _items = {};
Map<int, TokenModel> get items =>_items;
List<TokenModel> storageItems = [];
String _token = "";
String get token => _token;
Future<BookingResponse> bookATrip(BuildContext context, BookTripModel bookTripModel)async{
_isLoading = true;
update();
Response response = await tripRepository.bookATrip(bookTripModel);
late BookingResponse bookingResponse;
try{
if(response.statusCode==201){
bookingResponse = BookingResponse(response.body["message"],response.body["token"]);
_token = bookingResponse.token;
// this is the addToken method called
addToken(token, storageItems.length+1);
}else{
showCustomSnackBar(response.body["message"],title: "Error");
bookingResponse = BookingResponse(response.body["message"], "No Token");
}
}catch(e){
print("The error message is: "+e.toString());
}
update();
return bookingResponse;
}
void addToken(String tripToken,int itemId){
_items.putIfAbsent(itemId, () {
return TokenModel(
id: itemId,
time: tf.format(bookedTime),
date: df.format(bookedDate),
token: tripToken
);
});
tripRepository.addToTokenList(getTokens);
update();
}
List<TokenModel> get getTokens{
return _items.entries.map((e) {
return e.value;
}).toList();
}
List<TokenModel> getTripTokens(){
setTokens = tripRepository.getTokens();
return storageItems;
}
set setTokens(List<TokenModel> items){
storageItems = items;
for(int i=0;i<storageItems.length;i++){
_items.putIfAbsent(storageItems[i].id!, () => storageItems[i]);
}
}
class TripRepository extends GetxService{
final ApiClient apiClient;
final SharedPreferences sharedPreferences;
TripRepository({required this.apiClient,required this.sharedPreferences});
List<String> tokenList = [];
void addToTokenList(List<TokenModel> list){
tokenList = [];
list.forEach((element) {
return tokenList.add(jsonEncode(element));
});
sharedPreferences.setStringList(AppUrlConstant.TOKEN_LIST, tokenList);
}
List<TokenModel> getTokens(){
List<String> tokens = [];
if(sharedPreferences.containsKey(AppUrlConstant.TOKEN_LIST)){
tokens = sharedPreferences.getStringList(AppUrlConstant.TOKEN_LIST)!;
print(tokens.toString());
}
List<TokenModel> tokenListRetrieved = [];
tokens.forEach((element) {
return tokenListRetrieved.add(TokenModel.fromJson(jsonDecode(element)));
});
return tokenListRetrieved;
}
}