5

손세은·2023년 10월 16일
0

Binding

  • 하나의 페이지에서 Get.find를 하기 위해서는 미리 Get.put을 해놓아야 한다.
    • 앱이 시작할 때부터 전부 Get.put을 해놓을 수는 없을까?
    • 페이지가 만들어질 때 Get.put을 같이할 수는 없을까?

Bind(묶다)

  • 무언가 생성될 때 함께 put 하는 것

1. GetMaterialApp의 initialBinding을 활용하는 방법

  • GetMaterialApp이 생성될 때 함께 생성할 Controller를 정의할 수 있다.
      initialBinding: BindingsBuilder(
         Get.put(LoginController());
         Get.put(MainController());
         Get.put(AuthController());
         Get.put(SignupController());
         Get.put(PostController());
    ),

2. AppPages에다가 묶어놓는 방법

  • GetPage에 정의할 때 Binding을 걸어놓는다.
      AppPages(
        name : LoginPage.route,
        page: () => const LoginPage(),
        binding: BindingBuilder((){
        Get.put(LoginController());
        })
      )

이렇게 컨트롤러를 바인딩 해주고, find로 정보를 찾아서 이용하면 된다.

 var controller = Get.find<LoginController>();

또는

 class LoginPage extends GetView<LoginController> {
  const LoginPage({super.key});
  
  static const String route = '/login'

  
  Widget build(BuildContext context) {
    return Scaffold();
  }
}
  • controller 변수에 LoginController를 할당하지 않아도, 기본적으로 사용이 가능하다.
    • ex) controller.name;
class AppPages{
  static final pages = [
    GetPage(name: LoginPage.route, 
            page: () => LoginPage()
            binding: BindingBuilder((){
                   Get.put(LoginController());
              }
            ),
    GetPage(name: LoginPage.route, 
            page: () => LoginPage()
            binding: BindingBuilder((){
                    Get.put(LoginController());
              }
            ),
    GetPage(name: LoginPage.route, 
            page: () => LoginPage()
            binding: BindingBuilder((){
                    Get.put(LoginController());
             }
           ),
  ]
}
GetMaterialApp(
   ...
   getPages: AppPages.pages
)

initialBinding에 모든 컨트롤러를 걸어놓으면..

  • 어플의 규모가 정말 커져서, 페이지가 50개라면, 컨트롤러도 50개라면..
      initialBinding: BindingsBuilder(
         Get.put(LoginController());
         Get.put(MainController());
         Get.put(AuthController());
         Get.put(SignupController());
         Get.put(PostController());
    ),
  • GetMaterialApp이 실행 될 때 50개의 컨트롤러가 한번에 메모리에 올라간다?
    • 과부하로 이루어짐
    • 유저가 모든 페이지를 사용할 것 같지는 않음

컨트롤러를 대기 상태에만 올려놨다가, 사용될 때만 올리고 싶다.

  • "lazy" 하게 올린다.

Get.lazyPut(()=>Controller());

아 이따가 쓰기전에 컨트롤러 메모리에 올려줄게..ㄹ ㅇ 루

  • 해당 컨트롤러를 Get.find로 사용할 때 곧바로 Get.put 을 한다
  • 조금 효율적이고 퍼포먼스적으로 컨트롤러를 사용 가능할 수 있다.
      initialBinding: BindingsBuilder(
         Get.lazyPut(() => LoginController());
    ),
  • 컨트롤러가 대기상태에 있다가, 컨트롤러가 실행될 때(컨트롤러.멤버함수) 메모리에 올라간다.
profile
힙스터 개발자가 될래요

0개의 댓글