Firebase 如何使用颤振从错误对话框导航
我用的是Firebase和Flatter。 在我以内容列表的形式检索文档之后,我不知道如何处理屏幕。代码在StreamBuilder中。 我想首先显示对话框,然后按下对话框OK按钮,导航到下一个屏幕Firebase 如何使用颤振从错误对话框导航,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我用的是Firebase和Flatter。 在我以内容列表的形式检索文档之后,我不知道如何处理屏幕。代码在StreamBuilder中。 我想首先显示对话框,然后按下对话框OK按钮,导航到下一个屏幕 final List<DocumentSnapshot> contents = snapshot.data.documents; if (contents.length == 0) { try { print('NO DATA FOR THIS USER. ${conten
final List<DocumentSnapshot> contents = snapshot.data.documents;
if (contents.length == 0) {
try {
print('NO DATA FOR THIS USER. ${contents.length}');
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: Text('Error'),
content: Text('Please Register First.'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => NextPage()));
//Navigator.pop(context);
},
),
],
);
});
} catch (e) {
return Container();
}
}
下面的代码不会导航到下一个屏幕
final List<DocumentSnapshot> contents = snapshot.data.documents;
if (contents.length == 0) {
try {
print('NO DATA FOR THIS USER. ${contents.length}');
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: Text('Error'),
content: Text('Please Register First.'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => NextPage()));
//Navigator.pop(context);
},
),
],
);
});
} catch (e) {
return Container();
}
}
final List contents=snapshot.data.documents;
如果(contents.length==0){
试一试{
打印('此用户没有数据。${contents.length}');
显示对话框(
上下文:上下文,
建筑商:(){
返回警报对话框(
标题:文本(“错误”),
内容:文本('请先注册'),
行动:[
扁平按钮(
子项:文本('OK'),
已按下:(){
Navigator.push(上下文,
MaterialPage路由(生成器:(上下文)=>NextPage());
//Navigator.pop(上下文);
},
),
],
);
});
}捕获(e){
返回容器();
}
}
如果我不返回容器,将显示错误屏幕。根据我的说法,
您应该从导航器堆栈中删除该对话框,然后执行MaterialPage路由。
这就是代码
showDialog的生成器参数需要类型为的参数
小部件功能(构建上下文)
因此,请尝试传递“context”作为参数,而不是下划线,如下所示
final List<DocumentSnapshot> contents = snapshot.data.documents;
if (contents.length == 0) {
try {
print('NO DATA FOR THIS USER. ${contents.length}');
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('Error'),
content: Text('Please Register First.'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.pop(context);
Navigator.push(context,
MaterialPageRoute(builder: (context) => NextPage()));
//Navigator.pop(context);
},
),
],
);
});
} catch (e) {
return Container();
}
}
final List contents=snapshot.data.documents;
如果(contents.length==0){
试一试{
打印('此用户没有数据。${contents.length}');
显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
标题:文本(“错误”),
内容:文本('请先注册'),
行动:[
扁平按钮(
子项:文本('OK'),
已按下:(){
Navigator.pop(上下文);
Navigator.push(上下文,
MaterialPage路由(生成器:(上下文)=>NextPage());
//Navigator.pop(上下文);
},
),
],
);
});
}捕获(e){
返回容器();
}
}
根据我的说法,
您应该从导航器堆栈中删除该对话框,然后执行MaterialPage路由。
这就是代码
showDialog的生成器参数需要类型为的参数
小部件功能(构建上下文)
因此,请尝试传递“context”作为参数,而不是下划线,如下所示
final List<DocumentSnapshot> contents = snapshot.data.documents;
if (contents.length == 0) {
try {
print('NO DATA FOR THIS USER. ${contents.length}');
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('Error'),
content: Text('Please Register First.'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.pop(context);
Navigator.push(context,
MaterialPageRoute(builder: (context) => NextPage()));
//Navigator.pop(context);
},
),
],
);
});
} catch (e) {
return Container();
}
}
final List contents=snapshot.data.documents;
如果(contents.length==0){
试一试{
打印('此用户没有数据。${contents.length}');
显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
标题:文本(“错误”),
内容:文本('请先注册'),
行动:[
扁平按钮(
子项:文本('OK'),
已按下:(){
Navigator.pop(上下文);
Navigator.push(上下文,
MaterialPage路由(生成器:(上下文)=>NextPage());
//Navigator.pop(上下文);
},
),
],
);
});
}捕获(e){
返回容器();
}
}
我明白了。我应该在屏幕显示之前插入此代码。
我在错误的地方实现了这个代码。这很难解释
然而,它起了作用 我明白了。我应该在屏幕显示之前插入此代码。 我在错误的地方实现了这个代码。这很难解释
然而,它起了作用 尝试在
catch
块中打印e
,并回答它所说的内容。未处理的异常:“package:flatter/src/widgets/navigator.dart”:失败的断言:第2334行位置18:“!导航器。_debugLocked':不正确。@tajihiro在导航器之前添加navigator.pop(上下文)
。按“如果我不返回容器”-从哪里返回?您发布的代码是build()
方法或什么?@Crazy Lazy Cat的一部分,它不起作用。请尝试在catch
块中打印该e
,并回复它所说的内容。未处理的异常:“package:flifter/src/widgets/navigator.dart”:失败的断言:第2334行位置18:“!导航器。_debugLocked':不正确。@tajihiro在导航器之前添加navigator.pop(上下文)
。按“如果我不返回容器”-从哪里返回?您发布的代码是build()
方法或什么的一部分?@Crazy Lazy Cat它不起作用。您是否尝试在Navigator.push()之前添加Navigator.pop()?这是函数还是内部生成方法。如果在函数内部,请尝试将BuildContext构建作为参数传递,然后重试。如回答中所示,将ShowDialogue的builder参数中的下划线(“\”)更改为context。这可能会解决此问题。是否尝试在Navigator.push()之前添加Navigator.pop()?这是函数还是内部生成方法。如果在函数内部,请尝试将BuildContext构建作为参数传递,然后重试。如回答中所示,将ShowDialogue的builder参数中的下划线(“\”)更改为context。这可能会解决这个问题。