바인딩 : 특정 페이지에 진입할 때, 그 페이지에서 필요한 컨트롤러를 인스턴스화해서 메모리에 올리는 작업
바인딩을 거는 방법 , 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());
}
}