【发布时间】:2021-02-05 11:36:35
【问题描述】:
我正在使用 Bloc 模式开发 Flutter 应用程序。认证成功后,UserSate 有 User 对象。在所有其他 Bloc 中,我需要访问 UserState 中的用户对象。我尝试在其他 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 中。
【问题讨论】:
-
实际上您是在尝试从另一个类访问一个类属性对吗?
-
首先在事件'GetAllDataEvent'类中定义用户对象成员变量。并在加载 UserBloc 的状态下通过 calingl 'add(GetAllDataEvent(user: userObj))' 传递用户对象。并通过在 'if (event is GetAllDataEvent)' 中调用 'event.user' 来获取用户对象
-
非常感谢。它的工作。但是还有另一种官方方式可以在集团之间进行交流。顺便说一句,非常感谢
标签: flutter flutter-bloc