gpt4 book ai didi

flutter - ScanStreamTransformer 上的 NULL 累加器

转载 作者:IT王子 更新时间:2023-10-29 07:22:26 25 4
gpt4 key购买 nike

我正在实现一个需要递归调用才能获取所有数据的 API。我已经实现了一个具有 recursive transformer 的 Bloc 组件。但是,转换器似乎一直在递归调用中返回空累加器。

comments_bloc.dart

class CommentsBloc {
final _repository = Repository();
final _commentsFetcher = PublishSubject<int>();
final _commentsOutput = BehaviorSubject<Map<int, Future<ItemModel>>>();

// Stream Getters
Observable<Map<int, Future<ItemModel>>> get itemWithComments =>
_commentsOutput.stream;

// Sink getters
Function(int) get fetchItemWithComments => _commentsFetcher.sink.add;

CommentsBloc() {
_commentsFetcher.stream
.transform(_commentsTransformer())
.pipe(_commentsOutput);
}

_commentsTransformer() {
return ScanStreamTransformer<int, Map<int, Future<ItemModel>>>(
(cache, int id, index) {
cache[id] = _repository.fetchItem(id);
cache[id].then((ItemModel item) {
item.kids.forEach((kidId) => fetchItemWithComments(kidId));
});
},
<int, Future<ItemModel>>{},
);
}

dispose() {
_commentsFetcher.close();
_commentsOutput.close();
}
}

app.dart

return MaterialPageRoute(
builder: (BuildContext context) {
final itemId = int.parse(settings.name.replaceFirst('/', ''));
final commentsBloc = CommentsProvider.of(context);

commentsBloc.fetchItemWithComments(itemId);

return NewsDetail(itemId: itemId);
},
);

错误

E/flutter (17142): [ERROR:flutter/shell/common/shell.cc(178)] Dart Error: Unhandled exception:
E/flutter (17142): NoSuchMethodError: The method '[]=' was called on null.
E/flutter (17142): Receiver: null
E/flutter (17142): Tried calling: []=(19307509, Instance of 'Future<ItemModel>')
E/flutter (17142): #0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:1112:29)
E/flutter (17142): #1 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (17142): #2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

_commentsTransformer 仅执行在 cache[id] = _repository.fetchItem(id) 上抛出错误的第一个实例;
;

最佳答案

显然 cachenull。这是因为您没有在转换器的累加器函数中返回 cache。您需要返回它,因为它不是箭头函数。

  _commentsTransformer() {
return ScanStreamTransformer<int, Map<int, Future<ItemModel>>>(
(cache, int id, index) {
cache[id] = _repository.fetchItem(id);
cache[id].then((ItemModel item) {
item.kids.forEach((kidId) => fetchItemWithComments(kidId));
});
return cache; // <-- code fix here.
},
<int, Future<ItemModel>>{},
);
}

关于flutter - ScanStreamTransformer 上的 NULL 累加器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com