일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- BottomNavigationBar
- swift
- Android
- Null Safety
- Cocoa touch Framework
- setState
- 1과목
- 안드로이드
- 로그인
- UserAccountsDrawerHeader
- auth
- non-nullable
- java
- flutter
- 이메일
- 정보처리기사
- 상태관리
- 변수
- GetX
- 안드로이드 스튜디오
- Provider
- Kotlin
- IOS
- StatefulWidget
- 회원가입
- firebase_auth
- 함수
- firebase
- go_router
- dart
- Today
- Total
앱 개발 공부방
Flutter - Getx 본문
Getx
GetX는 Flutter를 위한 매우 가볍고 강력한 솔루션입니다. 고성능 상태 관리, 지능형 종속성 주입 및 빠르고 실용적인 라우트 관리가 결합되어 있습니다.
설치
dev_dependencies:
flutter_test:
sdk: flutter
get: ^4.3.0
사용할 파일에 추가
import 'package:get/get.dart';
main.dart
import 'package:tistory/test2_view.dart';
import 'package:tistory/test_controller.dart';
import 'package:tistory/test_view.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetMaterialApp(
getPages: [
GetPage(
name: '/first',
page: () => Test2View(),
),
], //라우트 이동을 위한 getPage 설정
initialBinding: BindingsBuilder(() {
Get.lazyPut<TestController>(() => TestController());
}), //binding을 사용하여 의존성을 주입한다
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TestView(),
);
}
}
처음엔 MaterialApp으로 되어있는데 GetMaterialApp으로 바꿔준다
getPages는 라우트 관리를 위해 라우트하는 페이지들을 다 추가해준다
initialBinding으로 binding을 사용하여 의존성을 주입한다 TestView의 controller를 주입한다
TestView()
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import 'package:tistory/test2_view.dart';
import 'package:tistory/test_controller.dart';
class TestView extends GetView<TestController> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Obx(
() => Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(width: 360),
GestureDetector(
onTap: () {
controller.plusNum();//TestController에 설정한 메소드
},
child: Container(width: 100, height: 100, color: Colors.red),
),
Text(controller.num1.value.toString()),//controller에서 설정한 rxInt 변수
GestureDetector(
onTap: () {
//이름으로 argument와 함께 라우트 이동,
Get.toNamed('/first', arguments: 'get to named argument');
},
child: Container(
width: 100,
height: 100,
color: Colors.black,
child: Center(
child: Text(
'get to named',
style: TextStyle(color: Colors.white),
),
),
)),
SizedBox(height: 30),
GestureDetector(
onTap: () {
//argument와 함께 라우트 이동,
Get.to(() => Test2View(), arguments: 'get to argument');
},
child: Container(
width: 100,
height: 100,
color: Colors.black,
child: Center(
child: Text(
'get to',
style: TextStyle(color: Colors.white),
),
),
))
],
),
));
}
}
Obx Obx안에 들어가있어야지 상태 관리가 되어서 화면에 보이는 num1 숫자가 변화는 걸 보실 수 있습니다
controller.plusNum() : TestController()에서 num1을 1씩 올려주는 메서드
controller.num1.value : TestController()에서 설정한 RxInt형 변수라. value를 사용해준다
Get.toNamed() : main에서 getPages로 설정해준 이름올 화면 이동, argument도 같이 넘겨줄 수 있다
Get.to() : 클래스 이름으로 화면 이동, argument도 같이 넘겨줄 수 있다
TestController()
import 'package:get/get.dart';
class TestController extends GetxController {
var num1 = 1.obs;
@override
void onInit() {
super.onInit();
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
super.onClose();
}
plusNum() {
num1.value++;
}
}
num1 : 1로 초기화해주고. obs를 붙여서 RxInt형으로 만든다
plushNum() : num1의 값을 1씩 늘려준다
TestBinding()
import 'package:get/get.dart';
import 'package:tistory/test_controller.dart';
class TestBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<TestController>(() => TestController());
}
}
Test2View()
TestView에서 화면 이동한 페이지
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class Test2View extends StatefulWidget {
const Test2View({Key? key}) : super(key: key);
@override
_Test2ViewState createState() => _Test2ViewState();
}
class _Test2ViewState extends State<Test2View> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
GestureDetector(
onTap: () {
Get.back();
},
child: Container(
width: 100,
height: 100,
color: Colors.black,
child: Text(
'get back',
style: TextStyle(color: Colors.white),
),
),
),
SizedBox(height: 30),
Text(Get.arguments.toString())
],
),
);
}
}
Get.back() : 바로 전 페이지로 이동
Get.arguments : 전 페이지에서 화면 이동할 때 같이 넘겨준 argument 출력
더 많은 내용은 아래 참조
https://github.com/jonataslaw/getx/blob/master/README.ko-kr.md
'FLUTTER' 카테고리의 다른 글
Flutter - firebase 이메일 로그인, 회원가입 (0) | 2022.03.22 |
---|---|
Flutter - firebase 앱 연동 (0) | 2022.03.21 |
Flutter - StatefulWidget Life cycle (0) | 2022.03.16 |
Flutter-validate, formkey (0) | 2020.11.01 |
Flutter-TabBar (0) | 2020.10.31 |