Search code examples
flutterroutesnavigation

Pass data in navigator.pushNamed


I want to pass data from list_screen to tenancyDetailsScreen, but I stuck at the routes page.

list_screen.dart

Navigator.pushNamed(context, AppRoute.tenancyDetailsScreen,arguments:tenancy[index]);

app_route.dart

class AppRoute {
  static const tenancyDetailsScreen = '/tenancyDetailsScreen';

  static final _tenancyDetailsScreenRoute = Routes(tenancyDetailsScreen,TenancyDetailsScreen());

  static Route? onGenerateRoutes(RouteSettings settings) {
          
    if(settings.name == tenancyDetailsScreen){
      final args = settings.arguments as Tenancy;  // how to pass this args to DetailsScreen? 
      return _tenancyDetailsScreenRoute.materialRoute;
    }
      ....
  }
}

routes.dart

class Routes extends Equatable {
  final String route;
  final Widget page;

  const Routes(this.route, this.page);

  @override
  List<Object> get props => [
        route,
      ];

  get materialRoute => MaterialPageRoute(
        builder: (_) => SafeArea(child: page),
      );
}

Solution

  • If you want to pass an arguments, you can't use custom Routes.

    static Route? onGenerateRoutes(RouteSettings settings) {
              
        if(settings.name == tenancyDetailsScreen){
          final args = settings.arguments as Tenancy;  // how to pass this args to DetailsScreen? 
          return MaterialPageRoute(
            builder: (_) => SafeArea(child: TenancyDetailsScreen(tenancy: args)),
          );
        }
          ....
      }