반응형
질문
이전에 질문이 있을 수도 있지만 찾을 수 없습니다. 이름이 지정된 라우트에 인수를 전달하는 방법은 무엇인가요?
이것이 내가 경로를 구축하는 방법입니다.
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(...);
}
반응형
댓글