GetX 사용 설명서

카탈로그

  • 상태 관리
  • 화면 이동
  • Utils
  • GetX 사용 사례 및 복습
  • 상태 관리


    getx의 상태 관리는 크게 다음과 같은 2가지로 나뉜다

  • 상태 관리 Obx 및 GetX 활성화
  • 간단한 상태 관리 GetBuilder
  • 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}',
      ),
    ),
    
    getX는 기본적으로 보일러판(정형문)이 없는 Stream Builder입니다.
    counter는.obs를 가지고 있기 때문에 RxInt형으로 실제 사용할 때.value를 추가해야 합니다.

    Obx


    상무 논리에 대해 다음과 같이 기술하다.var name = 'Jonatas Borges'.obs;값의 마지막 더하기.obs보기 측면에서widget을 Obx(()=>)로 둘러싸기Obx(() => Text("${controller.name.value}"));이 2단계만으로 비즈니스 논리를 변경하는 순간 보기 측면의 값이 변경됩니다.

    Obx용 Controller 초기화

  • Get.put
  • 기존 인스턴스 사용

  • Get.find
  • Get.put
    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.dart
    class Controller extends GetxController {
    
      int counter = 0;
    
      void increment() {
        counter++;
        update(['aVeryUniqueID']); // and then here
      }
    
    }
    

    상태 관리 선택


    GetBuilder

  • 상태는 컴파일러 간에 공유되기 때문에 RAM을 많이 소모하고 싶지 않은 경우
  • stream을 사용하고 싶지 않을 때
  • GetX

  • 재활동 프로그래밍의 위력을 발휘하고 싶을 때
  • 필요하지 않은widget을 줄여서 다시 그리려면 (변수 값이 "Garg"에서 "Garg"로 바뀌면 위젯을 다시 그리지 않습니다.)
  • 실례 컨트롤러를 원하지 않는 경우
  • Obx

  • 간단한 문법을 좋아하는 경우.
  • 동일한 부품에 여러 개의 컨트롤러를 사용하는 경우.(Obx는 유형이 필요하지 않으므로 여러 컨트롤러에서 사용 가능)
  • 화면 이동


    NextScreen으로 화면 마이그레이션


    sample.dart
    Get.to(NextScreen());
    

    이전 화면으로 돌아갑니다.


    sample.dart
    Get.back();
    

    이전 화면의 화면 이동을 되돌릴 수 없습니다


    sample.dart
    Get.off(NextScreen());
    

    지금까지 경로가 모두 취소된 화면 이동


    sample.dart
    Get.offAll(NextScreen());
    
    사용 예는 투표와 카트 등입니다.

    루트 화면으로 이동


    route에서 화면 이동을 생략합니다
    루트 지정 화면 옮기는 거 알고 싶은 사람 여기 있어요.
    https://github.com/jonataslaw/getx/blob/master/documentation/en_US/route_management.md#navigation-with-named-routes

    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

  • GetX 패키지에 설치
  • MaterialApps를 GetMaterialApps로 변경
  • main.dart
    void main() => runApp(GetMaterialApp(home: Home()));
    

    Step2


    비즈니스 논리 클래스를 만들고 모든 변수, 방법, 컨트롤러를 설정합니다.간단한 ".obs"를 사용하면 임의의 변수를 감시할 수 있습니다.
    controller.dart
    class Controller extends GetxController{
      var count = 0.obs;
      increment() => count++;
    }
    
    ※extends GetxController

    Step3


    보기를 만들고 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을 다시 활성화해서 업데이트하지 않았기 때문이다.)

    참조 링크


    https://github.com/jonataslaw/getx/blob/master/documentation/en_US/route_management.md#navigation-with-named-routes
    https://pub.dev/packages/get
    https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d

    좋은 웹페이지 즐겨찾기