728x90
반응형
설정
pubspec.yaml
dependencies:
get: ^4.6.5
main.dart
- MaterialApp 을 GetMaterialApp 으로 변경해주세요.
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
// MaterialApp 을 GetMaterialApp 으로 변경
return GetMaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const SampleScreen(),
);
}
}
종속성 관리
종속성 인스턴스
GetX 의 종속성 인스턴스는 다음과 같습니다.
- Get.put
- Get.lazyPut
- Get.putAsync
- Get.create
Get.put()
종속성을 주입하는 일반적인 방법 입니다.
class SampleScreen extends StatelessWidget {
// Get.put(SomeClass());
// Get.put(SampleController(), permanent: true);
// Get.put(SampleController, tag: "some unique string");
final controller = Get.put(SampleController());
@override
Widget build(BuildContext context) {
return Scaffold(
.
.
);
}
}
Get.put<S>(
// 종속성 주입할 class
S dependency
// 예를 들어 같은 동작을 하는 컨트롤러를 만들 때, 특정 컨트롤러를 찾을 때 사용
String tag,
// 사용이 종료되면 메모리 유지 여부
// 자주 사용되거나 미리 메모리에 로드하고 사용할 경우 true
bool permanent = false,
// 테스트에서 추상 클래스를 사용한 후 다른 클래스로 교체하고 테스트를 따를지 여부
bool overrideAbstract = false,
// 함수를 사용하여 종속성을 만들 때 사용
InstanceBuilderCallback<S> builder,
)
Get.lazyPut
인스턴스를 바로 만들지 않고 사용되는 시점에 생성됩니다.
class SampleScreen extends StatelessWidget {
// final controller = Get.lazyPut(() {
// // dosomething
// return SampleController();
// });
final controller = Get.lazyPut(() => SampleController());
@override
Widget build(BuildContext context) {
return Scaffold(
.
.
);
}
}
Get.lazyPut<S>(
// 클래스가 호출될 때 실행되는 함수
InstanceBuilderCallback builder,
// 예를 들어 같은 동작을 하는 컨트롤러를 만들 때, 특정 컨트롤러를 찾을 때 사용
String tag,
// permanent 와 비슷하지만 다시 사용할 때 Get이 바인딩 api의 "SmartManagement.keepFactory"와 동일하게 인스턴스를 재생성 함
bool fenix = false
)
Get.putAsync
추가하려는 인스턴스가 Future 를 반환하는 경우 사용합니다.
Get.putAsync<SharedPreferences>(() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt('counter', 12345);
return prefs;
});
Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() )
Get.putAsync<S>(
// 필수: 클래스를 인스턴스화 하기 위해 실행되는 비동기 메서드입니다.
AsyncInstanceBuilderCallback<S> builder,
// 예를 들어 같은 동작을 하는 컨트롤러를 만들 때, 특정 컨트롤러를 찾을 때 사용
String tag,
// 사용이 종료되면 메모리 유지 여부
// 자주 사용되거나 미리 메모리에 로드하고 사용할 경우 true
bool permanent = false
)
Get.create
put 처럼 인스턴스가 생성되는 것은 똑같지만 isSingleton 이 false 라서 계속 생성 가능합니다.
문서에서는 리스트뷰 안의 버튼을 예시로 들고 있습니다.
Get.create 는 GetWidget 과 함께 사용되어야 합니다.
Get.Create<SomeClass>(() => SomeClass());
Get.Create<LoginController>(() => LoginController());
Get.create<S>(
// 필수: `Get.find()`가 호출 될 때마다 만들어진 클래스를 반환하는 메서드입니다.
// 예시: Get.create<YourClass>(() => YourClass())
FcBuilderFunc<S> builder,
// tag 와 동일합니다.
// 예를 들어 같은 동작을 하는 컨트롤러를 만들 때, 특정 컨트롤러를 찾을 때 사용
String name,
// 사용이 종료되면 메모리 유지 여부
// 자주 사용되거나 미리 메모리에 로드하고 사용할 경우 true
// create 에서 permanent 기본값은 true 입니다.
bool permanent = true
)
Get.find
메모리에 추가한 인스턴스는 Get.find를 통해 찾아서 사용할 수 있습니다.
class SampleScreen extends StatelessWidget {
final controller = Get.find<SampleController>();
// 또는 SampleController controller = Get.find();
@override
Widget build(BuildContext context) {
return Scaffold(
.
.
.
)
}
}
Get.delete
단어 그대로 인스턴스를 제거할 때 사용됩니다.
Get.delete<SampleController>();
Get.delete<SampleController>(tag : 'TAG_NAME');
Get.reset
인스턴스를 초기화하는 것이며, 테스트에서 주로 사용됩니다.
Get.reset<SampleController>();
Bindings
bindings 는 주로 라우트와 같은 페이지 이동에 쓰입니다.
예를 들어 A 페이지에서 B 페이지로 이동 할 때 B 페이지에 필요한 인스턴스를 바인딩하여 전달하면 B 페이지 이동 후 바로 인스턴스가 선언되어 사용할 수 있고 페이지가 pop 되면 바인딩 된 인스턴스가 삭제 처리가 됩니다.
해당 페이지에서 사용되고 있는 인스턴스에 대한 관리에 대한 신경을 덜어주는 역할을 하는 것 같습니다.
sample_binding.dart
- class 를 만들고 Bindings 를 상속 받고 implement method 인 dependencies 를 넣어줍니다.
- dependencies 에 추가할 인스턴스를 넣어주세요.
import 'package:get/get.dart';
import 'package:getx_sample/sample_controller.dart';
class SampleBinding extends Bindings {
@override
void dependencies() {
Get.put(SampleController());
}
}
binding 의 사용방법은 다음과 같습니다.
- GetMaterialApp 에서 GetPage 를 이용
GetMaterialApp(
.
.
.
getPages: [
GetPage(
name: '/',
page: () => SampleScreen(),
binding: SampleBinding(),
),
],
initialRoute: '/',
);
- Get.to 를 이용한 방법
Get.to(
SampleScreen(),
binding: SampleBinding(),
);
- BindingsBuilder 를 이용한 방법
GetMaterialApp(
.
.
.
getPages: [
GetPage(
name: '/',
page: () => SampleScreen(),
binding: BindingsBuilder(() {
Get.put(SampleController());
}),
),
],
initialRoute: '/',
);
Get.to(
SecondPage(),
binding: BindingsBuilder(() {
Get.put(SampleController());
}),
);
728x90
반응형
'Flutter > Package' 카테고리의 다른 글
[Flutter] GetX ⑤ - Utils (Dialog, SnackBar) (0) | 2022.09.01 |
---|---|
[Flutter] GetX ④ - Route Management (0) | 2022.08.31 |
[Flutter] GetX ② - 상태 관리 (0) | 2022.08.29 |
[Flutter] GetX ① - 소개 (0) | 2022.08.28 |
[Flutter] image_picker (1) | 2022.08.13 |