Flutter/Flutter 기본

[Flutter] 화면 전환, 데이터 전달2 (argument)

Chafle 2023. 5. 12. 01:27
반응형

 

RouteOneScreen->RouteTowScreen으로 데이터 전달

 

- 매터리얼패이지라우트를 스택에 쌓으면서 세팅값을 같이 넘긴다

 

class RouteOneScreen extends StatelessWidget {
  final int number;

  const RouteOneScreen({required this.number, Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MainLayout(
        title: 'RouteOne',
        children: [
          Text(
            number.toString(),
            textAlign: TextAlign.center,
          ),
          ElevatedButton(
              onPressed: (){
                Navigator.of(context).push(
                  MaterialPageRoute(builder: (_) => RouteTwoScreen(),
                  settings: RouteSettings(
                    arguments: 789,
                  )
                  )
                );
              },
              child: Text('Push'))
        ]
    );
  }
}

 

 

 


 

 RouteOneScreen에서 보낸 값을 RouteTwoScreen에서 받기.

 

- ModalRoute로 받는다

 

ModalRoute는 

WidgetTree에서 가장 가까운 ModalRoute를 가져온다
ModalRoute는 fullScreen을 의미
RouteTwoScreen에서 가장 가까운 ModalRoute(=fulllScreen)은 본인(RouteTwoScreen)

 

ModalRoute.에 있는 settings.arguments는

RouteOneScreen에서 보낸 789값이 있다.

class RouteTwoScreen extends StatelessWidget {
  const RouteTwoScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final arguments = ModalRoute.of(context)!.settings.arguments;
    return MainLayout(
      title: 'Route Two',
      children: [
        Text(
          'arguments: ${arguments}',
        textAlign: TextAlign.center,
        ),
    ],);
  }
}
반응형