#flutter #dart
#флаттер #дротик
Вопрос:
Я пытаюсь декодировать данные json и фильтровать их на основе ввода пользователя в textformfield.
Мой класс модели
class States{
String name;
String abbreviation;
States({this.name, this.abbreviation});
factory States.fromJson(Map<String,dynamic> json){
return States(
name: json['name'],
abbreviation: json['abbreviation']
);
}
}
загрузка моего файла ресурсов json,
Future loadData() async {
return await rootBundle.loadString('assets/json/states.json');}
мои данные json выглядят следующим образом,
[
{
"name": "Alabama",
"abbreviation": "AL"
},
{
"name": "Alaska",
"abbreviation": "AK"
},]
функция, в которой я пытаюсь ее отфильтровать,
Future<void> search(String text) async {
String jsonString = await loadData();
var data = jsonDecode(jsonString);
List<States> states = data.map<States>((value) {
return States.fromJson(value);
}).toList();
if (textEditingController.text == null ||
textEditingController.text.isEmpty) {
streamController.add(null);
return;
} else {
streamController.sink.add(states
.where((element) =>
element.name.toLowerCase().startsWith(text.toLowerCase()))
.toList());
}
}
Как я пытаюсь это показать,
Container(
child: StreamBuilder(
stream: stream,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return all(context);
} else if (snapshot.connectionState == "waiting") {
return CircularProgressIndicator();
} else {
return ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${snapshot.data[index]}'), //<--- here
);
});
}
},
),
)
он отображается как Instace «Состояний» в текстовом виджете.
Комментарии:
1. @pskink спасибо за комментарий, я делаю это в функции search () моя проблема в том, что когда я использую предложение where, оно показывает экземпляр «состояний», но выполняет фильтрацию, но показывает, что это моя проблема.
2. @pskink о, чувак, спасибо, это сработало. можете ли вы сказать мне, что здесь не так? и я следил за статьей и запросом стека, и мне никогда не приходило в голову, что это будет проблемой, которую я ломал голову со вчерашнего дня. еще раз спасибо
Ответ №1:
Ответ был прост, как сказал @pskink, мне просто нужно было это сделать
Текст (снимок.данные [индекс].имя)
вместо этого
Текст (‘${снимок.данные [индекс]}’)