如何解决根据 Flutter 中 Provider 值的变化在屏幕之间导航
我有一个带有 BLE 通信的颤振应用程序。我已将与 BLE 相关的变量和函数放在 Provider 类中。我的屏幕结构如下:
Home -> Modeselect -> normalMode -> normalDataShow
|
-> CustomMode -> CustomModeShow
我们控制的设备也有按钮。因此,无论何时用户按下按钮,BLE 数据都应该被丢弃,应用程序应该进入 Modeselect 屏幕。
因此,例如,如果我们在 normalDataShow 或 CustomMode 屏幕中,并且用户按下按钮,则这些屏幕应该关闭并且应用必须自动返回到 Modeselect。
每次用户按下按钮时,设备都会发送一个数据包。我目前收到这个数据包,可以在 Provider 类中处理它的值变化。
我的问题是:在发生此类事件后,我如何在屏幕之间导航?
我试过了,但一切都搞砸了,_断言失败:第 1995 行 pos 12: '!debugLocked' 发生错误:
@override
Widget build(BuildContext context) {
final _bleProvider = Provider.of<BLEProvider>(context,listen: true);
if (_bleProvider.modeChanged == true) {
_bleProvider.modeChanged = false;
_bleProvider.resetscore();
Navigator.of(context).popAndPushNamed('mode');
return Container();
} else
return ... // The page main scaffold
解决方法
我会采用类似于 Flutter 团队的 BottomNavigationBar example 的方法。
基本上,有一个 Scaffold
可以根据您的提供程序的值更改其属性(主要是 body
)。
例如:
enum Page { a,b,c }
/// This is the private State class that goes with MyStatefulWidget.
class BleApp extends StatelessWidget {
final Map<Page,Widget> _widgets = {
Page.a: Text('a'),Page.b: Text('b'),Page.c: Text('c'),};
@override
Widget build(BuildContext context) {
final _bleProvider = Provider.of<BLEProvider>(context,listen: true);
// Determine what page to show
final page = Page.a;
return Scaffold(
appBar: AppBar(
title: const Text('BLE App'),),body: _widgets[page],);
}
}
这是一个简化的示例,但应该可以帮助您入门。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。