potatos
๐•๐•’๐•ฆ๐•ฃ๐•ฆ๐•ค
potatos
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Daily
    • Study
      • CS
      • Network
      • Windows
      • Linux
      • HTML & CSS
      • JavaScript
      • React
      • vue.js
      • Flutter
      • DataBase
      • Elastic Se..
      • Log
      • Coding Tes..
    • Work
      • PC
      • Mobile
      • JPGIF

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • notice

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • CSS
  • Linux
  • HTML
  • MySQL
  • ์ˆ˜์ง ์ •๋ ฌ
  • ์…€๋ ‰ํ„ฐ
  • Windows
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • ์œˆ๋„์šฐ
  • JavaScript

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
potatos

๐•๐•’๐•ฆ๐•ฃ๐•ฆ๐•ค

[Flutter] Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ - GetX
Study/Flutter

[Flutter] Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ - GetX

2025. 1. 23. 02:28

0. GetX๋ž€?

Provider์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€๋‹ค. Docs์—์„œ๋Š” GetX๋Š” ์ƒ์‚ฐ์„ฑ, ์„ฑ๋Šฅ, ์กฐ์งํ™”์˜ 3๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

 

  • ์ƒ์‚ฐ์„ฑ
    • ์‰ฝ๊ณ  ์นœ์ˆ™ํ•œ ๊ตฌ๋ฌธ ์‚ฌ์šฉ
    • ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ๋Œ€ ์„ฑ๋Šฅ์œผ๋กœ ์ œ๊ณต ๊ฐ€๋Šฅ
  • ์„ฑ๋Šฅ
    • ์„ฑ๋Šฅ๊ณผ ์ตœ์†Œํ•œ์˜ ๋ฆฌ์†Œ์Šค ์†Œ๋น„์— ์ค‘์ ์„ ๋‘ 
    • Streams๋‚˜ ChangeNotifier์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • ์กฐ์งํ™”
    • ํ™”๋ฉด, ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง, ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง, ์ข…์†์„ฑ ์ฃผ์ž… ๋ฐ ๋„ค๋น„๊ฒŒ์ด์…˜ ์™„์ „ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ
    • ๋ผ์šฐํŠธ๊ฐ„ ์ „ํ™˜์„ ํ•˜๋Š” ๋ฐ์— context๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
      • ์œ„์ ฏ ํŠธ๋ฆฌ์— ๋…๋ฆฝ์ 
    • inheritedWidget์„ ํ†ตํ•ด ์ปจํŠธ๋กค๋Ÿฌ/๋ธ”๋ก์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ์— context ๋ฏธํ•„์š”
    • ๋‹ค์ค‘ Provider๋ฅผ ํ†ตํ•ด ์œ„์ ฏ ํŠธ๋ฆฌ์—์„œ ์ปจํŠธ๋กค๋Ÿฌ, ๋ชจ๋ธ, ๋ธ”๋ก์œผ๋กœ ์ฃผ์ž…ํ•  ํ•„์š” ์—†์Œ
      • ์ž์ฒด ์ข…์†์„ฑ ์ฃผ์ž… ๊ธฐ๋Šฅ ์‚ฌ์šฉ

Flutter ํŒ€์—์„œ ๊ถŒ์žฅํ•˜๋Š” BLoC์—์„œ๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง๊ณผ ์‹œ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์žˆ์ง€๋งŒ, GetX๋Š” ๋ชจ๋“  ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค.

์ข…์†์„ฑ ์ฃผ์ž…๊ณผ ๋ผ์šฐํŠธ ๋˜ํ•œ ๋ถ„๋ฆฌ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ณ„์ธต์ด ๋ชจ๋‘ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐ ๊ธฐ๋Šฅ์„ ๋”์šฑ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ์ปดํŒŒ์ผ์ด ๋˜๋ฉฐ GetX์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์šฐํŠธ๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์ปดํŒŒ์ผ ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

1. GetX์˜ ์ƒํƒœ๊ด€๋ฆฌ

GetX์˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค. ๋‹จ์ˆœ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฐ˜์‘ ์ƒํƒœ ๊ด€๋ฆฌ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ๋ฐ˜์‘ํ˜• ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ๊ฐ’์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ ์žฌ๋ Œ๋”๋ง์„ ํ•˜๋ฉฐ, ๋‹จ์ˆœ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ์ง€์— ๋Œ€ํ•œ ํ™•์ธ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์ˆœ ์ƒํƒœ ๊ด€๋ฆฌ

import 'package:get/get.dart';

class SimpleController extends GetxController {
  int counter = 0;

  void increase() {
    counter++;
    update();
  }
}

 

๋‹จ์ˆœ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ controller๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์—ˆ๋‹ค. ์ด controller๋Š” counter๋ผ๋Š” ๋ณ€์ˆ˜์™€ ์ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ ์ฃผ๋Š” increase ํ•จ์ˆ˜๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋‹ค.

ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด์—๋Š” update๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ํ•จ์ˆ˜๋Š” controller๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ชจ๋“  ์ฝ”๋“œ์— ์—…๋ฐ์ดํŠธ๋ฅผ ์•Œ๋ฆฌ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

class MyHomePage extends StatelessWidget {
  MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    Get.put(SimpleController()); // controller ๋“ฑ๋ก
    return Scaffold(
      appBar: AppBar(
        title: const Text("๋‹จ์ˆœ ์ƒํƒœ๊ด€๋ฆฌ"),
      ),
      body: Center(
        child: GetBuilder<SimpleController>( // ์‹ค์‹œ๊ฐ„ ๋ Œ๋”๋ง
          builder: (controller) {
            return ElevatedButton(
              child: Text(
                'ํ˜„์žฌ ์ˆซ์ž: ${controller.counter}',
              ),
              onPressed: () {
                controller.increase();
              },
            );
          },
        ),
      ),
    );
  }
}

 

์ด์ œ ๋งŒ๋“ค์–ด๋‚ธ controller๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์ž.

controller๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Get.put()์œผ๋กœ controller๋ฅผ ๋“ฑ๋กํ•ด์ฃผ๋ฉด GetBuilder() ์•„๋ž˜์— ์žˆ๋Š” ๋ชจ๋“  ์œ„์ ฏ์€ controller์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•˜๋ฉฐ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ GetBuilder๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด Get.find<[Controller]>().[๋ณ€์ˆ˜ or ํ•จ์ˆ˜]๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฐ˜์‘ ์ƒํƒœ ๊ด€๋ฆฌ

import 'package:get/get.dart';

class ReactiveController extends GetxController {
  RxInt counter = 0.obs;

  void increase() {
    counter++;
  }
}

 

๋ฐ˜์‘ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Controller๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์œ„์™€ ๋™์ผํ•˜๊ฒŒ counter๋ผ๋Š” ๋ณ€์ˆ˜์™€ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

๋Œ€์‹  ๋‹จ์ˆœ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๊ฐ€ ๋‹ค๋ฅด๋‹ค.

๋ณ€์ˆ˜ ์„ ์–ธ์€ ๋ณ€์ˆ˜ ํƒ€์ž…์„ RxInt, RxString ๋“ฑ๊ณผ ๊ฐ™์ด Rx๋ฅผ ๋ถ™์ด๊ฒŒ ๋˜๋ฉฐ, ๋ณ€์ˆ˜์˜ ๊ฐ’ ๋’ค์—๋Š” .obs๋ฅผ ๋ถ™์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” update ํ•จ์ˆ˜๊ฐ€ ์—†์–ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค.

 

class MyHomePage extends StatelessWidget {
  MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    Get.put(ReactiveController()); // ๋ฐ˜์‘ํ˜• ์ƒํƒœ ๊ด€๋ฆฌ controller ๋“ฑ๋ก
    return Scaffold(
      appBar: AppBar(
        title: const Text("๋‹จ์ˆœ / ๋ฐ˜์‘ํ˜• ์ƒํƒœ๊ด€๋ฆฌ"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            GetX<ReactiveController>( // ๋ฐ˜์‘ํ˜• ์ƒํƒœ๊ด€๋ฆฌ - 1
              builder: (controller) {
                return ElevatedButton(
                  child: Text(
                    '๋ฐ˜์‘ํ˜• 1 / ํ˜„์žฌ ์ˆซ์ž: ${controller.counter.value}', // .value ๋กœ ์ ‘๊ทผ
                  ),
                  onPressed: () {
                    controller.increase();
                    // Get.find<ReactiveController>().increase();
                  },
                );
              },
            ),
            Obx( // ๋ฐ˜์‘ํ˜• ์ƒํƒœ๊ด€๋ฆฌ - 2
                  () {
                    return ElevatedButton(
                      child: Text(
                        '๋ฐ˜์‘ํ˜• 2 / ํ˜„์žฌ ์ˆซ์ž: ${Get.find<ReactiveController>().counter.value}', // .value ๋กœ ์ ‘๊ทผ
                      ),
                      onPressed: () {
                        Get.find<ReactiveController>().increase();
                      },
                    );
              },
            ),
          ],
        ),
      ),
    );
  }
}

 

controller๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•˜๊ฒŒ Get.put()์œผ๋กœ controller๋ฅผ ๋“ฑ๋กํ•ด์ค€๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋ฐ์ดํ„ฐ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ GetX() - GetX() ๋ฐฉ๋ฒ•๊ณผ Obx() - Obx() ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

- GetX() - GetX()

์•„๋ž˜ ๋ชจ๋“  ์œ„์ ฏ์ด.controller์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ, controller.counter.value์™€ ๊ฐ™์ด ๋’ค์— .value๋ฅผ ๋ถ™์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋‹จ์ˆœ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋™์ผํ•˜๊ฒŒ GetX()๋ฅผ  ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด Get.find<[Controller]>().[๋ณ€์ˆ˜ or ํ•จ์ˆ˜]๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

- Obx() - Obx()

๋™์ผํ•˜๊ฒŒ ์•„๋ž˜ ๋ชจ๋“  ์œ„์ ฏ์ด controller์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ์‹์€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ GetX()์™€ ๋‹ฌ๋ฆฌ controller์— ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์—†์–ด Get.find() ๋ฐฉ์‹์ด ํ•„์ˆ˜์ ์ด๋‹ค.

 

๋˜ํ•œ, ๋ฐ˜์‘ ์ƒํƒœ ๊ด€๋ฆฌ์—๋Š” worker๋ผ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. controller ์•ˆ์—์„œ onInit() ํ•จ์ˆ˜๋ฅผ override ํ•œ ํ›„, ๊ทธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค

  • Ever: ๋งค๋ฒˆ ๋ณ€๊ฒฝ ์‹œ ์‹คํ–‰
  • Once: ์ฒ˜์Œ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋งŒ ์‹คํ–‰
  • Interval: ๊ณ„์† ๋ณ€๊ฒฝ์ด ์žˆ๋Š” ๋™์•ˆ ํŠน์ • ์ง€์ • ์‹œ๊ฐ„ ์ธํ„ฐ๋ฒŒ ํ›„ ์‹คํ–‰
  • Debounce: ์ธํ„ฐ๋ฒŒ์ด ๋๋‚œ ํ›„, ํŠน์ • ์ง€์ • ์‹œ๊ฐ„ ์ดํ›„ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰

์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import 'package:get/get.dart';

class ReactiveController extends GetxController {
  static ReactiveController get to => Get.find();
  RxInt counter = 0.obs;

  @override
  void onInit() {
    once(counter, (_) {
      print('once : $_์ด ์ฒ˜์Œ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    });
    ever(counter, (_) {
      print('ever : $_์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    });
    debounce(
      counter,
          (_) {
        print('debounce : $_๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์ดํ›„, 1์ดˆ๊ฐ„ ๋ณ€๊ฒฝ์ด ์—†์Šต๋‹ˆ๋‹ค.');
      },
      time: Duration(seconds: 1),
    );
    interval(
      counter,
          (_) {
        print('interval $_๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.(1์ดˆ๋งˆ๋‹ค ํ˜ธ์ถœ)');
      },
      time: Duration(seconds: 1),
    );
    super.onInit();
  }


  void increase() {
    counter++;
  }
}

 

Get.find()๋ฅผ ์ข€ ๋” ๊ฐ„๋‹จํžˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

  • Getter ์‚ฌ์šฉ
class SimpleController extends GetxController {
  static SimpleController get to => Get.find();
  ...
 }
  • GetView ์‚ฌ์šฉ
    Get.find()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์— StatelessWidget ๋Œ€์‹  GetView๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
class SimpleState extends GetView<SimpleController>{}

controller.increase();

์ฐธ๊ณ 

  • https://dalgoodori.tistory.com/53
 

[Flutter] GetX โ‘ก - ์ƒํƒœ ๊ด€๋ฆฌ

get | Flutter Package Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX. pub.dev ์„ค์ • pubspec.yaml dependencies: get: ^4.6.5 main.dart MaterialApp ์„ GetMaterialApp ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”. GetX ๋ฅผ

dalgoodori.tistory.com

  • https://danawalab.github.io/flutter/2022/08/05/Flutter-Getx.html
 

Flutter - GetX๋ฅผ ์ด์šฉํ•œ ์ƒํƒœ๊ด€๋ฆฌ

GetX๋ฅผ ์ด์šฉํ•œ Flutter ์ƒํƒœ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

danawalab.github.io

  • https://velog.io/@knh4300/GetXdetail
 

GetX ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

GetX ์‚ฌ์šฉ๋ฒ•์„ ์ œ๋Œ€๋กœ ๋ฝ€์ƒค๋ณด์ž.

velog.io

  • https://github.com/jonataslaw/getx/blob/master/README.ko-kr.md
 

getx/README.ko-kr.md at master · jonataslaw/getx

Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get. - jonataslaw/getx

github.com

  • https://pub.dev/packages/get#getview
 

get | Flutter package

Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX.

pub.dev

  • https://engineering.linecorp.com/ko/blog/flutter-architecture-getx-bloc-provider
 

Flutter ์ธ๊ธฐ ์•„ํ‚คํ…์ฒ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 3์ข… ๋น„๊ต ๋ถ„์„ - GetX vs BLoC vs Provider

์•ˆ๋…•ํ•˜์„ธ์š”. LINE+ ABC Studio์—์„œ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์œค๊ธฐ์˜์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ Flutter๋กœ ์ง„ํ–‰ํ•˜๋Š” ์ƒˆ๋กœ์šด ์•ฑ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ๋งก์•„์„œ ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์„ ์ •ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

engineering.linecorp.com

 

'Study > Flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Flutter] Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ - Riverpod  (0) 2025.01.31
[Flutter] Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ - Provider  (0) 2025.01.17
    'Study/Flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Flutter] Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ - Riverpod
    • [Flutter] Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ - Provider
    potatos
    potatos

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”