flutter - 当 Provider 不为空时,Flutter 监听一个值并导航到另一个屏幕
问题描述
在这里,我有一个 QR 视图来扫描我的屏幕中的 qr 码,并且当我得到结果时我正在使用我想要的提供程序,因此 barCodeResult 不为空来导航到我尝试使用添加侦听器的结果屏幕,但我认为这很糟糕练习它可以工作,但有时我会收到一个错误说 context.read "Null Check Operator was called on Null"
实现这一目标的最佳方法是什么?
而且我在我的提供程序文件中声明了控制器,但我想处理它但是当我尝试这样做时,我也得到了同样的错误
这是我的 QRView 屏幕代码
class QRViewPage extends StatefulWidget {
const QRViewPage({Key? key}) : super(key: key);
@override
_QRViewPageState createState() => _QRViewPageState();
}
class _QRViewPageState extends State<QRViewPage> {
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
@override
void reassemble() {
super.reassemble();
if (Platform.isAndroid) {
context.read<QRProvider>().controller?.pauseCamera();
} else if (Platform.isIOS) {
context.read<QRProvider>().controller?.resumeCamera();
}
}
@override
Widget build(BuildContext context) {
final _qrProvider = context.watch<QRProvider>()
..addListener(() {
try {
if (context.read<QRProvider>().barCodeResult != null) {
context.read<QRProvider>().controller?.pauseCamera();
navigateTo(context, const ResultPage());
} else {
print('Null value !!!!');
}
} catch (error) {
print(error);
}
});
return Scaffold(
body: Stack(
alignment: AlignmentDirectional.bottomCenter,
children: [
QRView(
key: qrKey,
onQRViewCreated: _qrProvider.onQRViewCreated,
overlay: QrScannerOverlayShape(
borderColor: kPrimaryColor,
),
),
Padding(
padding: const EdgeInsets.only(bottom: 50),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ControllerButton(
icon: Icons.flip_camera_ios,
onTap: () async {
await _qrProvider.flipCamera();
},
),
const SizedBox(width: 20),
ControllerButton(
icon: Icons.flash_off,
onTap: () async {
await _qrProvider.toggleFlash();
},
),
],
),
)
],
),
);
}
}
以及 QRView 小部件的 onCreated 方法
onQRViewCreated(qr.QRViewController qrController) {
_controller = qrController;
_controller?.scannedDataStream.listen((scanData) {
_barCodeResult = scanData;
notifyListeners();
});
}
解决方案
推荐阅读
- c# - X509Store.Open 上的访问被拒绝
- appium-desktop - 如何在 Windows(WPF、桌面)中使用 Appium 将焦点设置在控件上?
- server - 如何在 Pycharm 上远程激活虚拟环境?
- python - 可以在 Python 中存储和打印 subprocess.run() 的输出吗?
- reactjs - 如何解决“termsOfUse 必须是布尔类型,但最终值为:“on”。使用 Ionic、React、Yup 和解析器
- javascript - 为什么我在更新时收到 nedb 错误“您不能混合修饰符和普通字段”
- javascript - 从父组件React JS在map函数中调用子组件时如何更新子组件的状态
- angular - 获取 HttpClient 生成的 url
- google-apps-script - 谷歌脚本:获取电报消息并写入单元格
- reactjs - 使用 react-spring,AnimatedFoo = animated(Foo) 不起作用——或者如何为组件设置动画?