argument로 데이터 보내고 받기

pharmDev·2024년 11월 14일

RouteSettingsModalRoute.of(context)?.settings.arguments를 통해 데이터를 전달하려면, Navigator.pushMaterialPageRoute를 사용해 직접 RouteSettingsarguments에 데이터를 설정할 수 있습니다.

1.예제 코드


import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FirstScreen(),
    );
  }
}

// 첫 번째 화면

class FirstScreen extends StatelessWidget {
  
  Widget build(BuildContext context) {
    final int dataToSend = 123;  // 전달할 데이터

    return Scaffold(
      appBar: AppBar(
        title: Text('First Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // Navigator.push와 MaterialPageRoute로 두 번째 화면으로 이동
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => SecondScreen(),
                settings: RouteSettings(
                  arguments: dataToSend,  // 데이터 전달
                ),
              ),
            );
          },
          child: Text('두 번째 화면으로 이동'),
        ),
      ),
    );
  }
}

// 두 번째 화면

class SecondScreen extends StatelessWidget {
  
  Widget build(BuildContext context) {
    // ModalRoute.of(context)?.settings.arguments로 데이터 수신
    final int? receivedData = ModalRoute.of(context)?.settings.arguments as int?;

    return Scaffold(
      appBar: AppBar(
        title: Text('Second Screen'),
      ),
      body: Center(
        child: Text(
          receivedData != null ? '받은 데이터: $receivedData' : '데이터가 없습니다.',
          style: TextStyle(fontSize: 20),
        ),
      ),
    );
  }
}

2. 코드 설명

  • 데이터 전달:
    Navigator.push와 함께 MaterialPageRoute를 사용하여 SecondScreen으로 이동합니다.
    MaterialPageRoute의 settings 매개변수에 RouteSettings(arguments: dataToSend)로 데이터를 전달합니다.

  • 데이터 수신:

    • SecondScreen에서 ModalRoute.of(context)?.settings.arguments를 통해 FirstScreen에서 전달한 데이터를 수신합니다.
      (강의에선 ModalRoute.of(context)?.settings.arguments 문구를 암기하고 사용하기를 권함)
    • as int?로 타입 캐스팅하여 데이터를 int 타입으로 안전하게 가져옵니다.
      이 방법을 사용하면 pushNamed 없이 RouteSettings와 ModalRoute를 활용해 데이터를 간편하게 전달할 수 있습니다.

3. arguments의 역할

arguments는 Flutter에서 화면 간에 데이터를 전달할 때 사용하는 속성입니다. RouteSettings의 arguments를 통해 데이터를 다른 화면에 전달하고, 수신하는 화면에서는 ModalRoute.of(context)?.settings.arguments로 그 데이터를 가져올 수 있습니다.

  • 데이터 전달:
    arguments는 한 화면에서 다른 화면으로 데이터를 넘겨줄 때 사용됩니다.
    예를 들어, 화면을 전환하면서 유저 ID, 메시지, 설정 값 등 필요한 정보를 arguments에 담아 전송할 수 있습니다.

  • 데이터 수신:
    새로운 화면으로 이동했을 때, ModalRoute.of(context)?.settings.arguments를 사용해 전달된 데이터를 받을 수 있습니다.
    이 데이터를 이용해 화면에 필요한 정보나 상태를 표시하거나 사용할 수 있습니다.

profile
코딩을 배우는 초보

0개의 댓글