gpt4 book ai didi

flutter - 如何从另一个 Bloc 访问 Bloc 状态中的数据

转载 作者:行者123 更新时间:2023-12-04 13:11:40 28 4
gpt4 key购买 nike

我正在使用 Bloc 模式开发 Flutter 应用程序。认证成功后,UserSate 有 User 对象。在所有其他 Bloc 中,我需要访问 UserState 中的 User 对象。我尝试在其他 Bloc 的构造函数参数上获取 UserBloc 并访问 User 对象。但它表明用户对象为空。有人有更好的解决方案吗?

class SectorHomeBloc extends Bloc<SectorHomeEvent, SectorHomeState> {
final OutletRepository outletRepository;
UserBloc userBloc;
final ProductRepository productRepository;
final ProductSubCategoryRepository productSubCategoryRepository;
final PromotionRepository promotionRepository;
final ProductMainCategoryRepository mainCategoryRepository;

SectorHomeBloc({
@required this.outletRepository,
@required this.userBloc,
@required this.productSubCategoryRepository,
@required this.productRepository,
@required this.promotionRepository,
@required this.mainCategoryRepository,
});
@override
SectorHomeState get initialState => SectorHomeLoadingState();

@override
Stream<SectorHomeState> mapEventToState(SectorHomeEvent event) async* {
try {
print(userBloc.state.toString());
LatLng _location = LatLng(
userBloc.state.user.defaultLocation.coordinate.latitude,
userBloc.state.user.defaultLocation.coordinate.longitude);
String _token = userBloc.state.user.token;

if (event is GetAllDataEvent) {
yield SectorHomeLoadingState();
List<Outlet> _previousOrderedOutlets =
await outletRepository.getPreviousOrderedOutlets(
_token, _location, event.orderType, event.sectorId);

List<Outlet> _featuredOutlets =
await outletRepository.getFeaturedOutlets(
_token, _location, event.orderType, event.sectorId);
List<Outlet> _nearestOutlets = await outletRepository.getOutletsNearYou(
_token, _location, event.orderType, event.sectorId);

List<Product> _newProducts = await productRepository.getNewItems(
_token, _location, event.orderType, event.sectorId);

List<Product> _trendingProducts =
await productRepository.getTrendingItems(
_token, _location, event.orderType, event.sectorId);

List<Promotion> _promotions = await promotionRepository
.getVendorPromotions(_token, event.sectorId);
yield SectorHomeState(
previousOrderedOutlets: _previousOrderedOutlets,
featuredOutlets: _featuredOutlets,
nearByOutlets: _nearestOutlets,
newItems: _newProducts,
trendingItems: _trendingProducts,
promotions: _promotions,
);
}
} on SocketException {
yield SectorHomeLoadingErrorState('could not connect to server');
} catch (e) {
print(e);
yield SectorHomeLoadingErrorState('Error');
}
}
}
mapEventToState 方法中的打印语句 [print(userBloc.state.toString());] 显示了 UserSate 的初始状态。
但是,在执行此代码时 UserState 处于 UserLoggedInState 中。

最佳答案

有一种官方方法可以做到这一点,如文档中所述,名为 Bloc-to-Bloc Communication
这是文档中的示例

class MyBloc extends Bloc {
final OtherBloc otherBloc;
StreamSubscription otherBlocSubscription;

MyBloc(this.otherBloc) {
otherBlocSubscription = otherBloc.listen((state) {
// React to state changes here.
// Add events here to trigger changes in MyBloc.
});
}

@override
Future<void> close() {
otherBlocSubscription.cancel();
return super.close();
}
}

关于flutter - 如何从另一个 Bloc 访问 Bloc 状态中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64482468/

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