[Getx] 컨트롤러/데이타 바인딩(DI)
페이지 정보
작성자 sbLAB 댓글 0건 조회 1,429회 작성일 23-01-15 15:10본문
Flutter GetX Dependency Management
Instancing Method | Instantiated Method/Class | Bindings
https://chornthorn.github.io/getx-docs/dependency-management/index/
[MEMO]
//Getx
//컨트롤러 바인딩 방법 몇가지 -----------------------
//1) main.dart 에서 컨트롤러 바인딩(등록)
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetMaterialApp( //GetMaterialApp
title: 'Flutter',
theme: ThemeData(
primarySwatch: Colors.blue,
),
//initialBinding
initialBinding: BindingsBuilder(() {
Get.put(HomeController());
Get.put(LoginTokenController());
}),
home: const Home(),
);
}
}
//2) 스크린(뷰페이지) 컨트롤러 바인딩(dependencies 등록)
class Login extends StatelessWidget {
Login({super.key});
final LoginTokenController _controller = Get.put(LoginTokenController());
...
//위 1)2) 컨트롤러 로직 호출(사용)하는 몇가지 방법
//MyApp 에서 초기 바인딩을 해줬을때(1) Get.find<>로 컨트롤러 찾아 참조 시작.
//Login 뷰에서, Home 뷰에 사용되는 컨트롤로 호출가능
String titleValue = Get.find<HomeController>().title;
//로그인뷰(2)에서
//final LoginTokenController _controller = Get.put(LoginTokenController()); 처럼
//로그인 컨트롤러 바인딩 등록(dependencies) 했을때..
//_controller 참조변수 사용
LoginTokenModel resultFromServer = await _controller.loadLoginModel(email, password);
// Get.find<LoginTokenController>()로 대상 참조 컨트롤러 인스턴스를 찾아 사용.
LoginTokenModel resultFromServer = await Get.find<LoginTokenController>().loadLoginModel(email, password);
//3) 뷰페이지에서 GetView 사용하는 방법 <= 컨트롤러가 main.dart 에서 이미 생성(initialBinding)되어 있는 경우 사용.
class Login extends GetView<LoginTokenController> {
...
// GetView 에서 제공하는 controller 변수명= 존재된 컨트롤러 인스턴스로 접근
//(GetView 내부 소스 : T get controller => GetInstance().find<T>(tag: tag)!; )
LoginTokenModel resultFromServer = await controller.loadLoginModel(email, password);
//4) 결론
- 각 뷰페이지에서 사용할 각 컨트롤러 분리 구현(가능하면 뷰페이지 작동별 컨트롤러 분리해서 단순화)
or - (main.dart)에서 컨트롤러들 initialBinding + extends GetView<> + Obx() 사용 => MVVM 형태 유지 ★★★
or - extends StatelessWidget + 컨트롤러 바인딩(main.dart) + Obx() 사용 => MVVM 형태 유지 ★★☆
댓글목록
등록된 댓글이 없습니다.