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

인기 κΈ€

νƒœκ·Έ

  • Windows
  • Linux
  • μœˆλ„μš°
  • μžλ°”μŠ€ν¬λ¦½νŠΈ
  • CSS
  • 수직 μ •λ ¬
  • μ…€λ ‰ν„°
  • JavaScript
  • MySQL
  • HTML

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
potatos

𝕝𝕒𝕦𝕣𝕦𝕀

[Flutter] Flutter의 μƒνƒœκ΄€λ¦¬ - Provider
Study/Flutter

[Flutter] Flutter의 μƒνƒœκ΄€λ¦¬ - Provider

2025. 1. 17. 02:49

0. μƒνƒœκ΄€λ¦¬λž€?

ν•œ μ€„λ‘œ μš”μ•½ν•˜μžλ©΄ μ‚¬μš©μžμ˜ μΈν„°νŽ˜μ΄μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터가 μΌκ΄€λ˜λ„λ‘ μœ μ§€ν•˜λŠ” 것, 이라고 ν•œλ‹€.

λ‹¨μˆœν•˜κ²Œ μƒκ°ν•˜λ©΄ μ‚¬μš©μžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•  λ•Œ μ‚¬μš©λ˜λŠ” 데이터, μ‚¬μš©μžμ˜ μž…λ ₯, μ„œλ²„ 응닡,  UI μƒνƒœ 등을 κ΄€λ¦¬ν•˜λŠ” 방법이 μƒνƒœκ΄€λ¦¬μΈ μ…ˆμ΄λ‹€.

 

κ·Έλ ‡λ‹€λ©΄ 이 μƒνƒœκ΄€λ¦¬λΌλŠ” 것이 ν•„μš”ν•œ μ΄μœ λŠ”?

데이터가 λ³€κ²½λ˜μ–΄λ„ νŽ˜μ΄μ§€κ°€ μž¬λ Œλ”λ§λ˜μ§€ μ•Šλ„λ‘ ν•˜κΈ° μœ„ν•¨λ„ μžˆμ§€λ§Œ, μƒνƒœλ“€μ΄ λ³΅μž‘ν•˜κ²Œ μ–½ν˜€ μžˆμ„ 경우 UI의 λ³€κ²½ μƒνƒœλ₯Ό μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

 

- μƒνƒœ (State)

  • μž„μ‹œ μƒνƒœ
    : μƒνƒœ 관리 기법이 ν•„μš” μ—†λŠ” 체크 ν‘œμ‹œμ™€ 같은 것을 μœ„μ ― μ°¨μ›μ—μ„œ ν•΄κ²°ν•˜μ—¬ UI에 λ³€ν™”κ°€ μƒκΈ°κ²Œ ν•˜λŠ” 데이터
  • μ•± μƒνƒœ
    : μ•±μ˜ μ—¬λŸ¬ κ³³μ—μ„œ κ³΅μœ λ˜κ±°λ‚˜ μ„Έμ…˜ 간에 μœ μ§€ν•˜κ³  싢은 μƒνƒœμ˜ 데이터

μž„μ‹œ μƒνƒœμ˜ 경우, State와 setState만으둜 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ, μ•± μƒνƒœμ˜ κ²½μš°λŠ” μƒνƒœ 관리 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ 효율적으둜 관리λ₯Ό ν•˜λŠ” 것이 μ’‹λ‹€.

 

 

1. Provider 

Provider λŠ” Flutterμ—μ„œ μ‚¬μš©ν•˜λŠ” μƒνƒœ 관리 라이브러리 쀑 ν•˜λ‚˜μ΄λ‹€.

Riverpod의 기반이 λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ΄κΈ°λ„ ν•˜λ©°, 처음 λ‚˜μ™”μ„ λ•Œ 획기적인 μƒνƒœ 관리 μ†”λ£¨μ…˜μœΌλ‘œ 관심을 많이 λ°›μ•˜λ‹€κ³  ν•œλ‹€.

Flutter 곡식 λ¬Έμ„œμ—μ„œλ„ μƒνƒœ 관리에 λŒ€ν•΄ Provider을 기반으둜 μ„€λͺ…ν•˜κ³  μžˆλ‹€.

 

μ—¬λŸ¬ μœ„μ ―μ— μƒνƒœλ₯Ό 전달해야 ν•˜λŠ” 경우, μƒμœ„ μœ„μ ―μ—μ„œ ν•˜μœ„ μœ„μ ―μœΌλ‘œ 계속 전달해야 ν•˜λŠ”λ°, 이 κ³Όμ •μ—μ„œ μ½”λ“œκ°€ μ§€μ €λΆ„ν•΄μ§€κ³  λΉ„νš¨μœ¨μ μΈ 둜직이 그렀질 수 μžˆλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Providerκ°€ μ„€κ³„λ˜μ—ˆλ‹€κ³  ν•œλ‹€.

 

2. Provider의 μ£Όμš” κ°œλ…

  • ChangeNotifier
    • Flutterμ—μ„œ μ œκ³΅ν•˜λŠ” 클래슀 쀑 ν•˜λ‚˜λ‘œ, Provider와 주둜 ν•¨κ»˜ μ‚¬μš©λœλ‹€
    • 변경이 일어날 λ•Œ λ¦¬μŠ€λ„ˆλ“€μ—κ²Œ μ•Œλ¦¬λŠ” 역할을 ν•œλ‹€
  • ChangeNotifierProvider
    • ChangeNotifier을 μ œκ³΅ν•˜λŠ” Provider둜, μœ„μ ― νŠΈλ¦¬μ—μ„œ ChangeNotifier의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κ³  κ΄€λ¦¬ν•œλ‹€
  • Consumer
    • Providerλ₯Ό κ΅¬λ…ν•˜κ³ , Provider에 μ˜ν•΄ μ œκ³΅λ˜λŠ” μƒνƒœκ°€ 변경될 λ•Œλ§ˆλ‹€ UIλ₯Ό μž¬λΉŒλ“œν•˜λŠ” 역할을 ν•œλ‹€
  • Provider.of<T>
    • νŠΉμ • μœ ν˜•μ˜ Proverλ₯Ό μ°ΎλŠ” λ©”μ„œλ“œλ‘œ, μ œκ³΅λ˜λŠ” μƒνƒœμ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•΄ μ£ΌλŠ” 역할을 ν•œλ‹€

 

3. Provider μ‚¬μš© (example)

1. flutter ν”„λ‘œμ νŠΈ 생성

flutter create provider_example

 

2. provider νŒ¨ν‚€μ§€ μ„€μΉ˜

flutter pub add provider

 

3. Class μ •μ˜

// counter.dart

import 'package:flutter/cupertino.dart';

class Counter with ChangeNotifier { // μƒνƒœ 관리
  int _count = 0; // ν˜„μž¬ 카운트 κ°’ μ €μž₯

  int get count => _count;

  void increment() { // _count κ°’ 증가 λ©”μ„œλ“œ
    _count++;
    notifyListeners(); // λ¦¬μŠ€λ„ˆλ“€μ—κ²Œ λ³€κ²½ μ•Œλ¦Ό
  }
}

 

4. Screen 생성

// counter_screen.dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_example/counter.dart';

class CounterScreen extends StatelessWidget {
  const CounterScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Provider Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('클릭 횟수'),
            Consumer<Counter>( // Counter의 μƒνƒœλ₯Ό κ΅¬λ…ν•˜κ³ , μƒνƒœκ°€ 변경될 λ•Œλ§ˆλ‹€ UI μž¬λΉŒλ“œ
              builder: (BuildContext context, counter, child) {
                return Text(
                  '${counter.count}',
                );
              },
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => Provider.of<Counter>(context, listen: false).increment(), // μƒνƒœ μ—…λ°μ΄νŠΈ, listen이 false둜 ν•΄λ‹Ή contextμ—μ„œ μƒνƒœ λ³€κ²½ λ¦¬μŠ€λ‹ X
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

 

5. main.dart μˆ˜μ •

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_example/screen/counter_screen.dart';
import 'counter.dart';

void main() {
  runApp(
    ChangeNotifierProvider( // Counter 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μœ„μ ― νŠΈλ¦¬μ— 제곡 및 μƒνƒœ 곡유
      create: (context) => Counter(),
      child: MyApp(),
    )
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const CounterScreen(),
    );
  }
}

 

6. Result

 

1. λ²„νŠΌμ„ 클릭할 λ•Œλ§ˆλ‹€ countκ°€ μ¦κ°€ν•˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ 

2. λ©”μ„œλ“œ λ‚΄μ—μ„œλŠ” μ¦κ°€ν•œ countλ₯Ό λ³€μˆ˜μ— μ €μž₯ν•˜λ©΄μ„œ

3. μ €μž₯된 λ³€μˆ˜λŠ” UIκ°€ μž¬λΉŒλ“œλ˜λ©΄μ„œ μ—…λ°μ΄νŠΈλœλ‹€.

 


μ°Έκ³ 

  • https://studiodoc.tistory.com/173
 

Description of Flutter's state management library provider for beginners (μž…λ¬Έμžλ₯Ό μœ„ν•œ Flutter의 μƒνƒœκ΄€λ¦¬ 라이브

μž…λ¬Έμžλ₯Ό μœ„ν•œ Flutter의 μƒνƒœκ΄€λ¦¬ λΌμ΄λΈŒλŸ¬λ¦¬ Provider μ„€λͺ…Description of Flutter's state management library provider for beginners  Flutter의 μƒνƒœκ΄€λ¦¬ 라이브러리 Provider에 λŒ€ν•œ μ„€λͺ…Flutterμ—μ„œ μƒνƒœ κ΄€

studiodoc.tistory.com

  • https://1986hz.tistory.com/150
 

ν”ŒλŸ¬ν„°] μƒνƒœ 관리 (State management)

κ°„λ‹¨ν•œ 선언적 μƒνƒœ 관리 μ‹œμŠ€ν…œμ˜ μž‘λ™ 방식을 λ³΄μ—¬μ£ΌλŠ” 짧은 μ• λ‹ˆλ©”μ΄μ…˜ gifμž…λ‹ˆλ‹€. Flutterλ₯Ό νƒμƒ‰ν•˜λ‹€ 보면 ν™”λ©΄ 간에, μ•± μ „λ°˜μ— 걸쳐 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό κ³΅μœ ν•΄μ•Ό ν•  λ•Œκ°€ μ˜΅λ‹ˆλ‹€. 이λ₯Ό μœ„

1986hz.tistory.com

  • https://docs.flutter.dev/data-and-backend/state-mgmt/simple
 

Simple app state management

A simple form of state management.

docs.flutter.dev

 

'Study > Flutter' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Flutter] Flutter의 μƒνƒœκ΄€λ¦¬ - Riverpod  (0) 2025.01.31
[Flutter] Flutter의 μƒνƒœκ΄€λ¦¬ - GetX  (0) 2025.01.23
    'Study/Flutter' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Flutter] Flutter의 μƒνƒœκ΄€λ¦¬ - Riverpod
    • [Flutter] Flutter의 μƒνƒœκ΄€λ¦¬ - GetX
    potatos
    potatos

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”