flutter 如何分配到一系列窗口小部件屏幕的路线?

n6lpvg4x  于 2022-11-17  发布在  Flutter
关注(0)|答案(2)|浏览(101)

我的主要路线如下

routes: {
        '/sign-in': (context) => BlocProvider(
              lazy: false,
              create: (_) => AuthCubit(),
              child: const LandingPage(),
            ),
        '/home': (context) => const HomeLandingPage(),
        '/sign-up': (context) => const SignUpLandingPage(),
        '/language-selection': (context) => const SelectionLanguageScreen(),
        '/camera-page': (context) => CameraPage(),
        '/web-add-page': (context) => const WebAddPage()
      },

我在实现到WebAddPage()的路由时遇到了问题,因为WebAddPage()是一个被威胁为屏幕的小部件。

final screens  = [  //screens is a List<Widget>
      const WebAddPage(),
      const WebUpdateProducts(),
      const WebUpdateCategories(),
      const WebUpdateStores(),
      const WebUpdateUsers()
    ];

我没有使用Navigator.push,因为我没有改变到一个新的屏幕,我只是改变小部件。有没有一种方法来实现这个数组的路由系统。我还需要URL路径来匹配路由。
Navigator.push显然不起作用,还添加了路由的关键字,将List<Widget>的类型更改为List<object>,但由于我将屏幕实现为子屏幕,因此无法使用List<object>,因为类型“Object”无法分配给参数类型“Widget?”

dtcbnfnu

dtcbnfnu1#

您可以查看包裹Flutter自动路由:https://pub.dev/packages/auto_route,可让您轻松围绕路由、嵌套路由架构和路径设置项目。
但是,如果您仍然希望继续使用您的架构,那么您不能在使用索引中动态更改的单页Widget时切换路由。
所以我的建议是使用autoroute,如果你需要重定向,也看看路线警卫。

lzfw57am

lzfw57am2#

我想它能帮你

final List<Widget> pages = const [
    HomePage(),
    SearchPage(),
    NotificationsPage(),
    SettingPage()   ];

 @override   Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          title: Text(
        _title,
        style: Theme.of(context).textTheme.headline2,
      )),
      body: pages[_currentIndex],
      bottomNavigationBar: Container(
        decoration: BoxDecoration(
          boxShadow: [
            BoxShadow(color: ColorManager.lightGray, spreadRadius: 0.5)
          ],
        ),
        child: BottomNavigationBar(
          selectedItemColor: ColorManager.primary,
          unselectedItemColor: ColorManager.gray,
          currentIndex: _currentIndex,
          onTap: onTap,
          items: const [
            BottomNavigationBarItem(
                icon: Icon(Icons.home), label: AppStrings.home),
            BottomNavigationBarItem(
                icon: Icon(Icons.search), label: AppStrings.search),
            BottomNavigationBarItem(
                icon: Icon(Icons.notifications),
                label: AppStrings.notification),
            BottomNavigationBarItem(
                icon: Icon(Icons.settings), label: AppStrings.setting),
          ],
        ),
      ),
    );   }

相关问题