【发布时间】:2020-09-25 21:47:16
【问题描述】:
如果我有一个定义了routes 的 MaterialApp,则在导航时会触发一个函数。
对于某些路线(受保护的路线),我想阻止导航并打开模态底部表,showModalBottomSheet
我试着这样做:
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My Flutter App',
routes: <String, WidgetBuilder>{
'/profile': (context) {
if (signedIn) {
return PopScreen();
} else {
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return Container(
color: Color(0xFF737373),
child: FractionallySizedBox(
heightFactor: 1,
child: Container(
decoration: BoxDecoration(
color: Colors.amber,
borderRadius: BorderRadius.only(
topRight: Radius.circular(radius),
topLeft: Radius.circular(radius))),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('Modal BottomSheet'),
RaisedButton(
child: const Text('Close BottomSheet'),
onPressed: () => Navigator.pop(context),
),
],
),
),
)));
},
);
}
},
},
home: Home(),
);
}
}
通过上述方法,路由器无法到达/profile 路由,这很好,但随后出现错误The builder for route returned null. The builders must never return null。
如何阻止导航?
有没有更好的方法呢?我发现的教程似乎建议在按钮上添加if logged in 并从那里重定向,但似乎这部分应该位于路由器内部。
【问题讨论】:
-
显示更多代码 showModalBottomSheet(...);
-
@griffins 我添加了更多描述。我还找到了 ModalRoute,根据描述,这正是我想做的,但我找不到如何使用它的示例:(api.flutter.dev/flutter/widgets/ModalRoute-class.html
-
我认为您需要在 showModalBottomSheet 之前添加 return 或返回简单的脚手架然后在 onInit 函数中显示对话框或操作表
标签: flutter