본문 바로가기

Flutter

바인딩

바인딩 : 특정 페이지에 진입할 때, 그 페이지에서 필요한 컨트롤러를 인스턴스화해서 메모리에 올리는 작업

 

바인딩을 거는 방법 , Getx 사용

1. 버튼 등에서 링크를 걸 때 바인딩을 거는 방법이 있는데.. 불편

2. main.dart  안에 getPage 로 각각 페이지로 이동 시킬 때, 거는 방법

3. initialBinding으로 클래스를 만들어서 거는 방법

 

1번 예

Get.to(
                  GetPutPage(),
                  binding: BindingsBuilder(() {
                    Get.put(DependencyController());
                  }),
                );

 

 

2번 예

main.dart 에 GetPage 안에 설정

      getPages: [
        GetPage(name: '/', page: () => Home()),
        GetPage(
          name: '/binding',
          page: () => BindingPage(),
          binding: BindingsBuilder<CountControllerWithGetx>(() {
            Get.put(() {
              return CountControllerWithGetx();
            });
          }),
        ),
      ],

 

3.번 예

main.dart  파일에 initialBinding 설정

// main.dart 상단에 InitBinding class가 정의된 파일 임포트
import 'package:youtube/src/binding/init_binding.dart';



return GetMaterialApp(
  debugShowCheckedModeBanner: false,
  title: "Youtube Clone App",
  initialBinding: InitBinding(),
  initialRoute: '/',
  getPages: [
    GetPage(name: '/', page: ()=>App()),
    GetPage(name: '/detail/:videoId', page: () => YoutubeDetail()),
  ],
);

 

init_binding.dart

// 상단에 Get.put으로 연결될 페이지들마다 사용될 controller들을 임포트한다.
import 'package:youtube/src/controller/app_controller.dart';
import 'package:youtube/src/repository/youtube_repository.dart';
// 모든 페이지에서 사용될 컨트롤러는 permanent: true 옵션을 준다.

class InitBinding implements Bindings {
  @override
  void dependencies() {
    Get.put(YoutubeRepository(), permanent: true);
    Get.put(Appcontroller());
  }

}