使用 GoRoute 和 ShellRoute 处理路由的最佳方法是什么?
我有3个屏幕。设置 - 显示全屏 A - 显示底部导航(用带壳路由包裹) B - 显示底部导航(用带壳路由包裹)
我在此配置中遇到的唯一问题是当我进入“设置”屏幕时缺少后退按钮。我该如何修复它?
final goRouter = GoRouter(
  initialLocation: '/a',
  navigatorKey: _rootNavigatorKey,
  routes: [
    GoRoute( // = Do not show Bottom Navigation, just a full screen
      path: '/settings',
      pageBuilder: (context, state) => const NoTransitionPage(
        child: SettingsPage(),
      ),
    ),
    ShellRoute( // ShellRoute = Show Bottom Navigation
      navigatorKey: _shellNavigatorKey,
      builder: (context, state, child) {
        return ScaffoldWithBottomNavigation(
          tabs: tabs,
          child: child,
        );
      },
      routes: [
        GoRoute( 
          path: '/a',
          pageBuilder: (context, state) => …Run Code Online (Sandbox Code Playgroud) 我想为我的新应用程序创建一个设计系统。
      child: ElevatedButton.icon(               
            icon: Icon(Icons.power_settings_new),
            onPressed: () => context.go('/login'),
            label: const Text('Log out'),
          ),
Run Code Online (Sandbox Code Playgroud)
没关系,但在这种情况下它应该有红色强调。通过使用 foregroundColor 属性可以轻松实现此目标。通过使用这种技术,无需担心图标的颜色、文本的颜色、波纹效果颜色。
      child: ElevatedButton.icon(
            style: ElevatedButton.styleFrom(
              foregroundColor: Colors.red,
            ),
            icon: Icon(Icons.power_settings_new),
            onPressed: () => context.go('/login'),
            label: const Text('Log out'),
          ),
Run Code Online (Sandbox Code Playgroud)
但是我不想每次都指定这种颜色。我更喜欢制作这样的东西,并且我想避免为按钮编写任何包装。
      child: ElevatedButton.error( // Color accent is red
                    icon: Icon(Icons.power_settings_new),
                    onPressed: () => context.go('/login'),
                    label: const Text('Log out'),
                  ),
Run Code Online (Sandbox Code Playgroud)
问题1:这个事件可能发生吗?
问题 2:图标、文本和波纹效果如何知道它们需要使用前景色来渲染自身?
我试图捕获传递给函数的参数,然后在参数的属性之一等于特定值时做出一些断言。
不幸的是,传递了一个对象,因此我不能根据官方文档快速断言。
cat.eatFood("Fish");
expect(verify(cat.eatFood(captureAny)).captured.single, ["Fish"]);
Run Code Online (Sandbox Code Playgroud)
我想实现如下伪代码所示的目标;
cat.eatFood(fridge);
expect(verify(cat.eatFood(captureAny)).captured.single, fridge.milk == "Milk");
Run Code Online (Sandbox Code Playgroud)
或者我只是不想把争论冰箱存放在其他地方。