Флаттер, как определить, содержит ли адаптер строку перед добавлением в список

#ios #flutter #dart

Вопрос:

Я добавляю элементы в список, подобный этому. У меня есть файл под названием BuyHistoryModel, подобный этому

 class buyHistoryModel{  String symbol, ticketNumber, orderNumber,datePlaced, dateMatched, timeInForce,   bidPrice, matchPrice,  volume, status;  buyHistoryModel(  {  required this.symbol,  required this.ticketNumber,  required this.orderNumber,  required this.datePlaced,  required this.dateMatched,   required this.timeInForce,  required this.bidPrice,  required this.matchPrice,  required this.volume,  required this.status   }  );  }  

Затем у меня есть конструктор данных, в который я передаю данные, а именно

 //data of buy history import 'package:zse_direct_flutter/models/buyhistory_model.dart';    class BuyHistoryAdapter {  List getBuyHistory() {  return [  buyHistoryModel(  symbol: "FCA.ZW",  ticketNumber: "216188",  orderNumber: "419399",  datePlaced : "2021-10-01 10:19:23",  dateMatched: "02-SEP-21 10.19.12.607098 AM",  timeInForce: "0",  bidPrice: "3.45",  matchPrice: "3.45",  volume: "800",  status: "matched"   ),   buyHistoryModel(  symbol: "ZSE.ZW",  ticketNumber: "",  orderNumber: "419399",  datePlaced : "2021-10-01 10:19:23",  dateMatched: "",  timeInForce: "0",  bidPrice: "3.45",  matchPrice: "",  volume: "800",  status: "cancel"   ),   buyHistoryModel(  symbol: "SIM.ZW",  ticketNumber: "",  orderNumber: "419399",  datePlaced : "2021-10-01 10:19:23",  dateMatched: "",  timeInForce: "0",  bidPrice: "3.45",  matchPrice: "",  volume: "800",  status: "done"   ),   ];  }  }  

Затем в моем основном файле я добавляю элементы адаптера в свой список следующим образом

 BuyHistoryAdapter pdb = new BuyHistoryAdapter();  Listlt;buyHistoryModelgt; tmpList = lt;buyHistoryModelgt;[];    for(int i=0; i lt; pdb.getBuyHistory().length; i  ) {   tmpList.add(pdb.getBuyHistory()[i]);   }  

But if you observe from by adapter file, the statuses are different. And on this page i would like a code that checks whether the status is matched or not. If it is, it adds to the list, if not it does not add to the list. Something like this

 for(int i=0; i lt; pdb.getBuyHistory().length; i  ) {    if(status == "matched"){  tmpList.add(pdb.getBuyHistory()[i]);  }    }  

Это полный код

 Listlt;buyHistoryModelgt; buyHistoryList = []; @override  void initState() {  BuyHistoryAdapter pdb = new BuyHistoryAdapter();  Listlt;buyHistoryModelgt; tmpList = lt;buyHistoryModelgt;[];   for(int i=0; i lt; pdb.getBuyHistory().length; i  ) {  tmpList.add(pdb.getBuyHistory()[i]);  }  setState(() {  buyHistoryList = tmpList;  _filteredList = buyHistoryList;  });  controller.addListener(() {  if(controller.text.isEmpty) {  setState(() {  filter = "";  _filteredList = buyHistoryList;  });  } else {  setState(() {  filter = controller.text;  });  }  });  super.initState();  }  

Как мне это сделать?

Ответ №1:

Почему все ваши переменные являются строками? Разве цены не должны быть двойными, даты и время, а статус-перечислением? В любом случае, это не то, о чем вы спрашивали. Самый простой ответ на ваш вопрос-это использование .where() метода. Поэтому избавьтесь от цикла for и на его месте сделайте следующее:

 BuyHistoryAdapter pdb = new BuyHistoryAdapter(); var originalList = pdb.getBuyHistory(); var matchedList = originalList.where((model) =gt; model.status == 'matched').toList();  

Комментарии:

1. Теперь я отредактировал и показал полный код. Реализация ваших решений приводит к ошибке в buyHistoryList = соответствующий список (значение типа, повторяемое, не может быть присвоено значению типа Listlt;buyHistoryModelgt; buyHistoryList = [];

2. Вы правы, я забыл добавить звонок в тоЛист, вы можете проверить, работает ли он сейчас?