본문 바로가기
Flutter/Flutter FAQ

Flutter 네비게이터는 pushNamed를 사용하여 인수를 전달합니다., Navigator pass arguments with pushNamed

by 베타코드 2023. 9. 22.
반응형

질문


이전에 질문이 있을 수도 있지만 찾을 수 없습니다. 이름이 지정된 라우트에 인수를 전달하는 방법은 무엇인가요?

이것이 내가 경로를 구축하는 방법입니다.

Widget build(BuildContext context) {
    return new Navigator(
      initialRoute: 'home/chooseroom',
      onGenerateRoute: (RouteSettings settings) {
        WidgetBuilder builder;
        switch (settings.name) {
          case 'home/chooseroom':
            // 'signup/choose_credentials'로 이동합니다.
            builder = (BuildContext _) => new ChoosePage();
            break;
          case 'home/createpage':
            builder = (BuildContext _) => new CreateRoomPage();
            break;
          case 'home/presentation':
            builder = (BuildContext _) => new Presentation();
            break;
          default:
            throw new Exception('잘못된 경로입니다: ${settings.name}');
        }
        return new MaterialPageRoute(builder: builder, settings: settings);
      },
    );

이렇게 호출합니다. Navigator.of(context).pushNamed('home/presentation')

하지만 위젯이 new Presentation(arg1, arg2, arg3)인 경우 어떻게 해야 할까요?


답변


필요하지 않습니다. onGenerateRoute를 사용하지 않고 간단히 다음과 같이 사용하십시오.

var exampleArgument = '예시 문자열';

Navigator.pushNamed(
    context,
    '/otherscreen',
    arguments: {'exampleArgument': exampleArgument},
);

그리고 다음과 같이 인수를 추출하십시오:

@override
Widget build(BuildContext context) {
    final arguments = (ModalRoute.of(context)?.settings.arguments ?? <String, dynamic>{}) as Map;

    print(arguments['exampleArgument']);

    return Scaffold(...);
}
반응형

댓글