[Getx] 컨트롤러/데이타 바인딩(DI) > Flutter/Dart/Node

본문 바로가기

사이트 내 전체검색

Flutter/Dart/Node

[Getx] 컨트롤러/데이타 바인딩(DI)

작성일 23-01-15 15:10

페이지 정보

작성자sbLAB 조회 2,683회 댓글 0건

본문

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 형태 유지 ★☆

  


댓글목록

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.
PC 버전으로 보기