/// K 线单根蜡烛数据(不可变) /// 实现 == / hashCode 让 Riverpod .select() 能正确判断列表数据是否变化。 class KlineBar { final DateTime time; final double open; final double high; final double low; final double close; final double volume; const KlineBar({ required this.time, required this.open, required this.high, required this.low, required this.close, required this.volume, }); bool get isBull => close >= open; @override bool operator ==(Object other) => identical(this, other) || other is KlineBar && time == other.time && open == other.open && high == other.high && low == other.low && close == other.close && volume == other.volume; @override int get hashCode => Object.hash(time, open, high, low, close, volume); }