Get X의 Dependency Injection, 의존성 주입에 대해 알아보자.
바인딩을 이용하여 인스턴스화 시키는 4가지 방법이 있다.
class DependancyController extends GetxController {
@override
Widget build(BuildContext context) {
class DependancyManagePage extends StatelessWidget {
const DependancyManagePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body:Column(
children: [
Get put 방식 이용
MaterialButton( child:Text("Get Put 방식"), onPressed: (){ Get.to( GetPut(), //필요한 의존성 주입을 어떻게 할 건지 정의를 내림 binding:BindingBuilder((){ Get.put(DependancyController()); }) ); } ),
- 바인딩은 라우트 단계에서 인스턴스 관리가 가능해짐. 페이지가 생성될 때 컨트롤러가 생성되고, 페이지가 소멸될 때 컨트롤러 역시 종료된다.
=> 메모리 삭제가 되어 성능이 느려지지 않음.
Get.lazyPut 이용
MaterialButton( child:Text("Get Lazy Put 방식"), onPressed: (){ Get.to( GetLazyPut(), binding:BindingBuilder((){ Get.lazyPut<DependancyController>( () => DependancyController()); }), ); } ),
- lazyPut은 builder를 이용한다. Put과 다르게 인스턴스화 되지 않아서 메모리에 올리지 않음. 사용하기 위해 접근 할 때 메모리에 올라간다.
Get.putAsync 이용
MaterialButton( child:Text("Get Put Async 방식"), onPressed: (){ Get.to( Getput(), binding: BindingsBuilder((){ Get.putAsync<DependancyController>(() async { await Future.delayed(Duration(seconds:5)); //5초 후 인스턴스화 됨. return DependancyController();} ) }) ); } ),
- Get put과 유사하지만 페이지 접근 시 비동기식으로 데이터를 받아오거나 가공처리 후 컨트롤러를 인스턴스화 시킬 수 있음.
Get Create 이용
MaterialButton( child:Text("Get Create 방식"), onPressed: (){ Get.to( Getput(), binding: BindingsBuilder(() { Get.created<DependancyController>( () => DependancyController()); }), ); } ), ], ) ) } }
- 위 세가지 방식은 모두 싱글톤 방식(하나를 생성하고 어디에서든 공유하는 방식)임. 반면 Get Creat는 계속 생성하여 여러 개의 인스턴스가 존재하게 됨. 자동으로 삭제되지 않기 때문에 사용 종료시마다 삭제가 필요하다.
class GetPut extends StatelessWidget {
const GetPut({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body:Column(
class GetLazyPut extends StatelessWidget {
const GetLazyPut({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body:Column(