switchMap 不会取消先前的 http 请求。并且当调用streamcontroller close 时,内部流不会取消。帮帮我,谢谢
class AssetManagementViewModel implements ViewModel {
// Inputs
void refresh() => _refresh.add(null);
// Outputs
late final Stream<List<Asset>> assets;
final _refresh = StreamController<void>.broadcast();
AssetManagementViewModel({required this.api}) {
_getAssets() => api
.getAssets(null)
.map((event) => event.map((json) => Asset.fromJson(json)).toList());
assets = _getAssets().asBroadcastStream().concatWith([
_refresh.stream.switchMap((value) {
return _getAssets(); // 2.don‘t cancel
}).shareReplay(maxSize: 1)
]);
}
final AssetManagementAPI api;
@override
void dispose() {
_refresh.close(); // 1.when call
}
}
这是API流生成器,我找不到更好的方法
Stream<List> getAssets(params) {
print("will send getAssets request");
final controller = StreamController<List>();
rootBundle.loadString("lib/resource/assetData.json").then((value) {
final list = jsonDecode(value);
Future.delayed(Duration(seconds: 3)).then((value) {
print("response getAssets request");
controller.add(list);
controller.close();
});
});
controller.onCancel = () {
print("cancel getAssets request");
// dioToken.cancel ...
};
return controller.stream;
}