name27 / flutter

0 stars 0 forks source link

GetPage route, Get.Parameter, Get.arguments #104

Open name27 opened 1 year ago

name27 commented 1 year ago

Get.toNamed를 활용하여 arguments 넘기기

image image

main.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:route_exam_app/page/main_page.dart';
import 'package:route_exam_app/util/pages.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      getPages: AppPages.pages,
      home: const MainPage(),
    );
  }
}

routes.dart

import 'package:route_exam_app/page/detail_page.dart';
import 'package:route_exam_app/page/main_page.dart';

class AppRoutes{
  static const main = MainPage.route;
  static const detail = DetailPage.route;
}

pages.dart

import 'package:get/get.dart';
import 'package:route_exam_app/page/detail_page.dart';
import 'package:route_exam_app/page/main_page.dart';
import 'package:route_exam_app/util/routes.dart';

class AppPages {
  static final pages = [
    GetPage(name: AppRoutes.main, page: () => const MainPage()),
    GetPage(name: AppRoutes.detail, page: () => const DetailPage()),
  ];
}

main_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:route_exam_app/util/routes.dart';

class MainPage extends StatelessWidget {
  const MainPage({super.key});
  static const String route = '/main';

  @override
  Widget build(BuildContext context) {
    int a = 3;
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            TextButton(
                onPressed: () {
                  Get.toNamed(AppRoutes.detail, arguments: a);
                },
                child: const Text('메인 페이지'),)
          ],
        ),
      ),
    );
  }
}

detail_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class DetailPage extends StatelessWidget {
  const DetailPage({super.key});
  static const String route = '/detail';

  @override
  Widget build(BuildContext context) {
    var value = Get.arguments;
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text('a: $value'),
            const Text('Hello World!')
          ],
        ),
      ),
    );
  }
}

Get.toNamed를 활용하여 Parameter넘기기

image

main_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:route_exam_app/util/routes.dart';

class MainPage extends StatelessWidget {
  const MainPage({super.key});
  static const String route = '/main';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            TextButton(
                onPressed: () {
                  Get.toNamed(AppRoutes.detail + '/value?id=3&name=1234', arguments: a);
                },
                child: const Text('메인 페이지'),)
          ],
        ),
      ),
    );
  }
}

detail_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class DetailPage extends StatelessWidget {
  const DetailPage({super.key});
  static const String route = '/detail';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text('id: ${Get.parameters['id']}'),
            Text('name: ${Get.parameters['name']}'),
            const Text('Hello World!')
          ],
        ),
      ),
    );
  }
}
name27 commented 1 year ago

Get.arguments

페이지가 이동되며 전달받은 argument 값 ex)
Get.toNamed(AppRoutes.detail, arguments: a); arguments a를 detail 페이지로 넘겨줌 var value = Get.arguments; 로 arguments 값 받음

Get.Parameter

페이지가 이동되며 전달받은 Parameter 값 ex) Get.toNamed(AppRoutes.detail + '/value?id=3&name=1234', arguments: a); Parameter를 detail 페이지로 넘겨줌 Text('id: ${Get.parameters['id']}'), 로 파라미터 값 받음