오늘은 ProxyProvider 에 대해서 알아보겠습니다. Provider 에서 사용하는 변수가 다른 Provider 에 영향을 미치는 경우 , 또는 외부의 변수가 Provider 에 영향을 미치는 경우 사용한다.
개발환경 : 윈도우11, 안드로이드 스튜디오(Arctic Fox 2020.3.1 Patch 4), flutter 2.10
소스코드 - Release 22_ProxyProvider · mike-bskim/provider_overview (github.com)
소스코드중에서 ./pages/proxyprov_create_update.dart 파일에 대한 설명입니다.
숫자를 받아서 문자열을 만드는 클래스가 있습니다.
class Translations {
late int _value;
void update(int newValue) {
_value = newValue;
}
String get title => 'You clicked $_value times';
}
호출하는 부분은 아래와 같습니다. create 필요한 경우(인스턴스 생성과 동시에 변수설정이 불가).
class ProxyProvCreateUpdate extends StatefulWidget {
const ProxyProvCreateUpdate({Key? key}) : super(key: key);
@override
_ProxyProvCreateUpdateState createState() => _ProxyProvCreateUpdateState();
}
class _ProxyProvCreateUpdateState extends State<ProxyProvCreateUpdate> {
int counter = 0;
void increment() {
setState(() {
counter++;
debugPrint('counter: $counter');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('ProxyProvider create/update'),
),
body: Center(
child: ProxyProvider0<Translations>(
// 인스턴스 생성과 동시에 변수설정이 불가능한 경우
create: (_) => Translations(),
update: (_, Translations? translations) {
translations!.update(counter);
return translations;
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const ShowTranslations(),
const SizedBox(height: 20.0),
IncreaseButton(increment: increment),
],
),
),
),
);
}
}
class ShowTranslations extends StatelessWidget {
const ShowTranslations({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final title = context.watch<Translations>().title;
return Text(
title,
style: const TextStyle(fontSize: 28.0),
);
}
}
class IncreaseButton extends StatelessWidget {
final VoidCallback increment;
const IncreaseButton({
Key? key,
required this.increment,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: increment,
child: const Text(
'INCREASE',
style: TextStyle(fontSize: 20.0),
),
);
}
}
[참고자료] udemy - Flutter Provider Essential 코스 (Korean)
'Flutter > 07 State - Provider' 카테고리의 다른 글
[Flutter] Provider - errors(provider with StatefulWidget) (0) | 2022.05.08 |
---|---|
[Flutter] ProxyProvider - 다양한 패턴 (0) | 2022.05.06 |
[Flutter] ProxyProvider - update (0) | 2022.05.06 |
[Flutter] Provider Access - generated route (0) | 2022.05.06 |
[Flutter] Provider Access - Named route (0) | 2022.05.06 |