일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- go_router
- firebase_auth
- BottomNavigationBar
- 안드로이드 스튜디오
- 변수
- Android
- auth
- Cocoa touch Framework
- flutter
- 1과목
- firebase
- IOS
- 함수
- setState
- java
- dart
- 안드로이드
- Provider
- 로그인
- Null Safety
- UserAccountsDrawerHeader
- GetX
- 이메일
- 회원가입
- 정보처리기사
- Kotlin
- non-nullable
- 상태관리
- swift
- StatefulWidget
- Today
- Total
앱 개발 공부방
flutter - provider 상태관리 본문
https://pub.dev/packages/provider
이번에는 flutter에서 대표적으로 쓰이는 상태관리 중 하나인 provider에 대한 예시를 들어보겠습니다
provider: ^6.1.1
먼저 pubspec.yaml에 위 코드를 추가하고 pub get을 해줍니다
다음으로 ChangeNotifier 인스턴스를 만들어 줍니다
import 'package:flutter/cupertino.dart';
class HomeProvider extends ChangeNotifier{
int _count = 0;
int get count => _count;
void increase(){
_count++;
notifyListeners();
}
void decrease(){
_count--;
notifyListeners();
}
}
여기서 상태에 따라 변하는 변수와 변화 시켜주는 함수를 작성해 줍니다
함수에 notifyListeners()를 써줘야 변화를 알릴 수 있으니 잊지 말고 써주자
다음으론 위 인스턴스를 위젯에 전달해 줘야 한다
void main() {
runApp(MultiProvider(providers: [
ChangeNotifierProvider(
create: (_) => HomeProvider(),
),
], child: const MyApp()));
}
여기서 MultiProvider를 사용해서 전달해서 말 그대로 앱에서 쓰는 모든 ChangeNotifier 인스턴스를 추가해 줍니다
Consumer<HomeProvider>(
builder: (context, provider, child) => Text(
provider.count.toString(),
),
),
인스턴스에서 선언한 count를 보여주는데 consumer로 감싼 위젯들은 increase, decrease 등 메서드가 호출될 때마다 re-build 되기 때문에 count가 올라가거나 내려가는 변화가 일어난다
GestureDetector(
onTap: () {
context.read<HomeProvider>().decrease();
},
child: Container(
width: 100,
height: 50,
color: Colors.red,
child: const Center(
child: Text('decrease count!!'),
),
),
),
위는 눌렀을 때 decrese를 해주는 버튼인데 context.read를 통해서 호출해 준다
provider에는 read, watch, select 기능을 제공하는데
read : 상태값을 읽지만 변경을 감시하지 않는다
watch : 상태값을 읽고 변경을 감시한다
select : 상태값의 특정 부분만을 감시한다
read는 주로 increase, decrease 같은 함수를 호출할 때 주로 쓰이고, watch는 count 같은 상태값에 많이 사용된다
Text(
context.watch<HomeProvider>().count.toString()
),
위처럼 단순히 count변수만 보여주는 거면 consumer로 안감 싸고 context.watch로만 표현해 줄 수 있다
'FLUTTER' 카테고리의 다른 글
flutter - 폰트 바꾸기 (1) | 2023.12.11 |
---|---|
flutter - 싱글톤 패턴 (1) | 2023.12.08 |
flutter - go_router 정보랑 같이 보내기 (1) | 2023.12.05 |
flutter - go_router 사용해서 라우팅하기 (0) | 2023.12.05 |
flutter - 동기,비동기 프로그래밍 (1) | 2023.12.05 |