GetX 사용 설명서
카탈로그
상태 관리
getx의 상태 관리는 크게 다음과 같은 2가지로 나뉜다
Getx
controller.dart
class Controller extends GetxController {
var counter = 0.obs;
void increment() => counter.value++;
}
Obx와 마찬가지로 변수 값의 마지막에.obs
를 더한다.view.dart
GetX<Controller>(
init: Controller(),
builder: (controller) => Text(
'${controller.counter.value}',
),
),
getXcounter는.obs를 가지고 있기 때문에 RxInt형으로 실제 사용할 때.value를 추가해야 합니다.
Obx
상무 논리에 대해 다음과 같이 기술하다.
var name = 'Jonatas Borges'.obs;
값의 마지막 더하기.obs
보기 측면에서widget을 Obx(()=>)로 둘러싸기Obx(() => Text("${controller.name.value}"));
이 2단계만으로 비즈니스 논리를 변경하는 순간 보기 측면의 값이 변경됩니다.Obx용 Controller 초기화
기존 인스턴스 사용
view.dart
class PageOne extends StatelessWidget {
Controller controller = Get.put(Controller());
// instead of Controller controller = Controller();
}
Controller controller = Get.put(Controller());
여기에서 Controller의 실례를 생성하고 역할 영역에서 controller를 사용할 수 있습니다.이 종류의 모든 하위 경로에서 컨트롤러를 사용할 수 있습니다.응용 프로그램 중 어느 곳에서든 같은 실례를 쉽게 얻을 수 있다.
Get.find
view.dart
class PageSeven extends StatelessWidget {
Controller controller = Get.find();
}
Get.find
에서는 다른 범주에서 동일한 인스턴스를 사용할 수 있습니다.GetBuilder
controller.dart
class Controller extends GetxController {
int counter = 0;
void increment() {
counter++;
update(); // look here!
}
}
GetBuilder에 update()
가 있으므로 뷰 측면의 변경 사항을 알 수 있습니다.뷰를 한번 보도록 하겠습니다.
view.dart
GetBuilder<Controller>( // specify type as Controller
init: Controller(), // intialize with the Controller
builder: (value) => Text(
'${value.counter}', // value is an instance of Controller.
),
),
GetBuilder<Controller>( // no need to initialize Controller ever again, just mention the type
builder: (value) => Text(
'${value.counter}', // counter is updated when increment() is called
),
),
첫 번째 보기의 GetBuilder는 init이기 때문에 두 번째 GetBuilder는 초기화할 필요가 없습니다.GetBuilder를 처음 사용하는 경우에만 Controller를 초기화해야 합니다.다른 모든 GetBuilder 는 애플리케이션의 위치에 관계없이 첫 번째 GetBuilder 상태를 자동으로 공유합니다.
GetBuilder는 기본적으로 StatefulWidget을 대체합니다.모든 페이지를 무상태로 설정하고 GetBuilder를 사용하여 특정 부품의 신선도를 유지할 수 있습니다.코드를 정리하면서 일시적인 상태를 관리하는 좋은 방법이다.
또한 고유한 ID를 지정하여 업데이트할 부품을 자세히 관리할 수도 있습니다.
view.dart
GetBuilder<Controller>(
id: 'aVeryUniqueID', // here
init: Controller(),
builder: (value) => Text(
'${value.counter}', // this will update
),
),
GetBuilder<Controller>(
id: 'someOtherID', // here
init: Controller(),
builder: (value) => Text(
'${value.counter}', // this won't update
),
),
controller.dartclass Controller extends GetxController {
int counter = 0;
void increment() {
counter++;
update(['aVeryUniqueID']); // and then here
}
}
상태 관리 선택
GetBuilder
GetX
Obx
화면 이동
NextScreen으로 화면 마이그레이션
sample.dart
Get.to(NextScreen());
이전 화면으로 돌아갑니다.
sample.dart
Get.back();
이전 화면의 화면 이동을 되돌릴 수 없습니다
sample.dart
Get.off(NextScreen());
지금까지 경로가 모두 취소된 화면 이동
sample.dart
Get.offAll(NextScreen());
사용 예는 투표와 카트 등입니다.루트 화면으로 이동
route에서 화면 이동을 생략합니다
루트 지정 화면 옮기는 거 알고 싶은 사람 여기 있어요.
Utils
SnackBar
sample.dart
Get.snackbar("タイトル", "詳細の内容");
대화상자 뷰
sample.dart
Get.defaultDialog(
title: "タイトル",
middleText: "詳細の内容",
textCancel: "キャンセルボタン",
);
밑받침
sample.dart
Get.bottomSheet(
Container(
height: 300,
color: Colors.white,
child: Text("内容"),
));
GetX 사용 사례 및 복습
Step1
void main() => runApp(GetMaterialApp(home: Home()));
Step2
비즈니스 논리 클래스를 만들고 모든 변수, 방법, 컨트롤러를 설정합니다.간단한 ".obs"를 사용하면 임의의 변수를 감시할 수 있습니다.
controller.dart
class Controller extends GetxController{
var count = 0.obs;
increment() => count++;
}
※extends GetxControllerStep3
보기를 만들고 StatelessWidget을 사용하여 RAM을 절약합니다.Get을 사용할 때는 Stateful Widget을 사용하지 않아도 됩니다.
view.dart
class Home extends StatelessWidget {
Widget build(context) {
// Instantiate your class using Get.put() to make it available for all "child" routes there.
final Controller c = Get.put(Controller());
return Scaffold(
// Use Obx(()=> to update Text() whenever count is changed.
appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count.value}"))),
// Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context
body: Center(child: ElevatedButton(
child: Text("Go to Other"), onPressed: () => Get.to(Other()))),
floatingActionButton:
FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment));
}
}
class Other extends StatelessWidget {
// You can ask Get to find a Controller that is being used by another page and redirect you to it.
final Controller c = Get.find();
Widget build(context){
// Access the updated count variable
return Scaffold(body: Center(child: Text("${c.count.value}")));
}
}
정보 final Controller c = Get.put(Controller());
Get.put (클래스 이름 () 으로 지정한 클래스 이름으로 설명하는 범위를 실례화하면 이 클래스를 사용할 수 있습니다.정보
appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count.value}"))),
var count = 0.obs;
의count변경 후view측obx(() => )
으로 둘러싸인Text가 변경됨정보
final Controller c = Get.find();
Get.find();
다른 페이지에서 사용하는 컨트롤러를 찾아서 사용할 수 있습니다.공식적으로는 이렇게 썼다.
[보충] 여기서 상기 코드로 Get하십시오.find에서 얻은 데이터를 표시하는 Text가 Obx에 둘러싸여 있는지 여부는 단순히widget에 상태를 전달하지 않았기 때문이다. (Text의widget을 다시 활성화해서 업데이트하지 않았기 때문이다.)
참조 링크
Reference
이 문제에 관하여(GetX 사용 설명서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kai_nakao/articles/518b36b70b0484텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)