我有一个模型:
import 'dart:convert';
Forecast forecastFromJson(String str) => Forecast.fromJson(json.decode(str));
String forecastToJson(Forecast data) => json.encode(data.toJson());
class Forecast {
List<ListElement> list;
Forecast({
required this.list,
});
factory Forecast.fromJson(Map<String, dynamic> json) => Forecast(
list: List<ListElement>.from(json["list"].map((x) => ListElement.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"list": List<dynamic>.from(list.map((x) => x.toJson())),
};
}
class ListElement {
int dt;
Main main;
DateTime dtTxt;
ListElement({
required this.dt,
required this.main,
required this.dtTxt,
});
factory ListElement.fromJson(Map<String, dynamic> json) => ListElement(
dt: json["dt"],
main: Main.fromJson(json["main"]),
dtTxt: DateTime.parse(json["dt_txt"]),
);
Map<String, dynamic> toJson() => {
"dt": dt,
"main": main.toJson(),
"dt_txt": dtTxt.toIso8601String(),
};
}
class Main {
double temp;
int humidity;
Main({
required this.temp,
required this.humidity,
});
factory Main.fromJson(Map<String, dynamic> json) => Main(
temp: json["temp"]?.toDouble(),
humidity: json["humidity"],
);
Map<String, dynamic> toJson() => {
"temp": temp,
"humidity": humidity,
};
}
有一部分代码输出了一个列表:
return ListView.separated(
padding: const EdgeInsets.all(8),
itemCount: state.forecast.list.length,
separatorBuilder: (BuildContext context, int index) => Divider(),
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text("${state.forecast.list[index].main.temp}", style:TextStyle(fontSize: 22)),
subtitle: Text("${state.forecast.list[index].dtTxt}")
);
}
);
一切都很好。但我需要确保列表的第一个元素是温度最低的元素。
也就是说,默认情况下,列表项按日期排序。我需要它们按温度分类。而且我不需要一个按钮来排序。我需要用户看到一个按温度排序的列表。
**编辑1.**这是与此状态相关的代码。
class ForecastLoadSuccess extends WeatherState {
final Forecast forecast;
ForecastLoadSuccess({required this.forecast});
}
**编辑2.**这是块代码。
on<ForecastRequest>((event, emit) async {
emit(WeatherLoadInProgress());
try {
final forecastResponse =
await _forecastRepository.getForecast(event.cityName);
emit(ForecastLoadSuccess(forecast: forecastResponse));
} catch (e) {
print(e);
emit(WeatherLoadFailure(error: e.toString()));
}
}
);
2条答案
按热度按时间lvjbypge1#
更改此:
收件人:
请注意,您可能希望在分配状态时进行排序,而不是在
fromJson
方法中进行排序(如果数据来自不同的源会发生什么?您将不得不复制代码),但您没有公开这部分代码。编辑
通过查看您的代码,您可以执行以下操作:
sshcrbum2#
你可以这样使用它,它将适用于所有的场景
或者,如果您想为某个特定的状态执行此操作,则将该列表传递给该状态,并在该状态类中对其进行排序,例如