就 Go Router 而言,下面的 Flutter Navigator 相当于什么?
Navigator.pushNamed(
context,
Routes.CHANNEL_PAGE,
arguments:ChannelPageArgs(
channel:channel,
initialMessage:message,
),
);
Run Code Online (Sandbox Code Playgroud)
通常 Go Router 基于路径中的参数。但上面的例子是基于对象而不是原始参数。
GoRoute(
path: '/profile/:id',
builder: (context, state) => ProfilePage(id: state.params['id']!),
),
Run Code Online (Sandbox Code Playgroud) 我正在使用go_router包进行Navigation 2.0,但是在运行showModalBottomSheetFunction时,视图未正确显示。这是图片: 
顺便说一句,我在底部导航栏使用嵌套导航。
我期望 ModalBottomSheet 应该看起来合适。
我正在尝试使用 getter 解决问题,错误消息:
没有为类型“GoRouterState”定义 getter“params”。尝试导入定义“params”的库,将名称更正为现有 getter 的名称,或者定义名为“params”的 getter 或字段。
我的 main.dart 代码如下所示:
GoRoute(
path: 'session/:level',
pageBuilder: (context, state) {
final levelNumber = int.parse(state.params['level']!);
final level = gameLevels
.singleWhere((e) => e.number == levelNumber);
return buildMyTransition<void>(
child: PlaySessionScreen(
level,
key: const Key('play session'),
),
color: context.watch<Palette>().backgroundPlaySession,
);
},
),
Run Code Online (Sandbox Code Playgroud)
GoRouterState在另一个文件中定义:
class ProductCategoryList extends StatelessWidget {
const ProductCategoryList({super.key});
@override
Widget build(BuildContext context) {
final GoRouterState state = GoRouterState.of(context);
final Category category = Category.values.firstWhere(
(Category value) => value.toString().contains(state.params['category']!),
orElse: () => Category.all,
);
final …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 futurebuilder 中登录后进行导航。api 请求成功完成,但测试时导航出错。帮助我如何正确使用 futurebuilder。
child: ElevatedButton(
onPressed: () {
// Validate returns true if the form is valid, or false otherwise.
if (_mobileKey.currentState!.validate()) {
FutureBuilder<Loginuser>(
future: loginuser(mobileController.text.toString(),
passwordController.text.toString()),
builder: (context, snapshot) {
if (snapshot.hasData) {
context.go('/Home');
return Text(snapshot.data!.message);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const CircularProgressIndicator();
},
);
}
context.go('/Home');
},
child: const Text('Submit')),
Run Code Online (Sandbox Code Playgroud)
我试过这个它不起作用。我使用“ go_router: ^5.2.4 ”进行导航
为了显示一个覆盖我的 shellroute 的抽屉,我需要将一个半透明页面推到我的页面堆栈顶部。到目前为止,当我使用时背景仍然不透明
GoRouter.of(rootNavigatorKey.currentContext!).pushNamed('myDrawer');
Run Code Online (Sandbox Code Playgroud)
我发现了一个使用传统 Navigator 和 PageRouteBuilder 的诡计:
Navigator.of(rootNavigatorKey.currentContext!).push(
PageRouteBuilder(
fullscreenDialog: true,
opaque: false,
pageBuilder: (_, __, ___) => MyDrawer(),
),
);
Run Code Online (Sandbox Code Playgroud)
在推送路由时,有没有办法在 go_router 中使用像不透明参数这样的选项?