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κ° μ¬λΉλλλ©΄μ μ λ°μ΄νΈλλ€.
μ°Έκ³
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
νλ¬ν°] μν κ΄λ¦¬ (State management)
κ°λ¨ν μ μΈμ μν κ΄λ¦¬ μμ€ν μ μλ λ°©μμ 보μ¬μ£Όλ μ§§μ μ λλ©μ΄μ gifμ λλ€. Flutterλ₯Ό νμνλ€ λ³΄λ©΄ νλ©΄ κ°μ, μ± μ λ°μ κ±Έμ³ μ ν리μΌμ΄μ μνλ₯Ό 곡μ ν΄μΌ ν λκ° μ΅λλ€. μ΄λ₯Ό μ
1986hz.tistory.com
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 |