gpt4 book ai didi

Flutter:如果存在则获取提供者,否则返回 null 而不是异常

转载 作者:行者123 更新时间:2023-12-04 14:59:01 24 4
gpt4 key购买 nike

当我们使用 BlocProvider.of<OrderBloc>(context)访问 Bloc 对象,如果没有 OrderBloc 则返回异常存在于当前上下文的祖先小部件上。返回异常如下:

No ancestor could be found starting from the context that was passed to BlocProvider.of<OrderBloc>().
但是我要退货 null而不是异常时没有 OrderBloc存在于祖先小部件上。考虑以下场景:
var orderBloc = BlocProvider.of<OrderBloc>(context);

return Container(child: orderBloc == null
? Text('-')
: BlocBuilder<OrderBloc, OrderState>(
bloc: orderBloc,
builder: (context, state) {
// build something if orderBloc exists.
},

),
);

最佳答案

你可以像这样用 try/catch 包裹那一行:

var orderBloc;
try {
orderBloc = BlocProvider.of<OrderBloc>(context);
} catch (e) {}

return Container(child: orderBloc == null
? Text('-')
: BlocBuilder<OrderBloc, OrderState>(
bloc: orderBloc,
builder: (context, state) {
// build something if orderBloc exists.
},
),
);
编辑:
如果你想减少样板文件:
extension ReadOrNull on BuildContext {
T? readOrNull<T>() {
try {
return read<T>();
} on ProviderNotFoundException catch (_) {
return null;
}
}
}
那么你的代码将是:
var orderBloc = context.readOrNull<OrderBloc>();

return Container(child: orderBloc == null
? Text('-')
: BlocBuilder<OrderBloc, OrderState>(
bloc: orderBloc,
builder: (context, state) {
// build something if orderBloc exists.
},
),
);

关于Flutter:如果存在则获取提供者,否则返回 null 而不是异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67332788/

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