Flutter의 제공자 상태 관리 - 2부
파트 1을 읽는 것이 좋습니다.
Part 1에서는 단일 제공자 구현만 보았습니다. Flutter 앱에서 여러 제공자를 선언하는 것은 어떻습니까?
공급자를 사용하면 데이터를 노출할 수 있고 앱을 통해
consumer
의 도움으로 데이터를 관찰할 수 있습니다. 이렇게 하면 사용자 친화적인 데이터 사용에 쉽게 액세스할 수 있습니다. FlutterMultiprovider
는 다른 데이터 개체가 필요하거나 모듈에 따라 달라지는 일부 상황을 처리하는 데 필요하므로 이 문서에서는 이에 대한 예제를 다룰 것입니다. 공급자를 사용하면 불필요한 데이터 계층 구조를 모두 피할 수 있고 필요할 때마다 데이터를 사용할 수 있으며 사용 후 적절하게 폐기할 수도 있습니다.좋아, 앱에 2개의 화면이 있도록 합시다. 각 화면은 다음과 같이 서로 다른 공급자를 사용합니다.
pubspec.yaml 파일에서 공급자 패턴에 대한 종속성을 추가합니다.
flutter pub add provider
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
provider: ^6.0.3
첫 번째 모델을 만들고 카운터를 증가/감소/재설정하는 방법을 추가하고 material.dart 패키지에서 확장
ChangeNotifier
합니다. 이는 notifyListeners()
메서드를 제공하며 값을 변경할 때마다 모든 리스너에게 알립니다.import 'package:flutter/material.dart';
class Counter with ChangeNotifier {
int count = 0;
//int get myCounter() => count;
void incrementCounter() {
count++;
notifyListeners();
}
void decrementCounter() {
if (count > 0) {
count--;
}
notifyListeners();
}
void resetCounter() {
count=0;
notifyListeners();
}
}
두 번째 모델을 생성하고
List<String> _cart = ["Red", "Green", "Blue"]
에 항목을 추가하는 방법을 추가하고 material.dart 패키지에서 ChangeNotifier
를 확장합니다. 이는 notifyListeners()
메서드를 제공하며 값을 변경할 때마다 모든 리스너에게 알립니다.import 'package:flutter/material.dart';
class Cart with ChangeNotifier {
final List<String> _cart = ["Red", "Green", "Blue"];
int get count => _cart.length;
List<String> get cart => _cart;
void addItem(String item) {
_cart.add(item);
notifyListeners();
}
}
홈 위젯을
MultiProvider
로 감싸고 그 안에 있는 모든 모델에 ChangeNotifierProvider<YOUR_MODEL_NAME>
위젯을 호출합니다.void main() {
runApp(
MultiProvider(
providers:[
ChangeNotifierProvider<Counter>(create: (_)=>Counter(),),
ChangeNotifierProvider<Cart> (create: (_)=>Cart(),),
],
child: MyApp(),
),
);
}
MaterialApp 위젯에 추가
routes
@override
Widget build(BuildContext context) {
return
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
'/' : (context) => HomePage(),
'/second' :(context) => Second()
},
);
}
}
텍스트를 업데이트하려면 모델에서 변수와 함수를 호출하여 사용하십시오.
텍스트 위젯을
Consumer<YOUR_MODEL_NAME>
위젯으로 래핑@override
Widget build(BuildContext context) {
return Consumer<Counter>(
builder: (context, counter, child) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Text('${cart.cart}'),
// Text('${context.watch<Cart>().cart}'),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('The Number : '),
// Text('${context.watch<Counter>().count}'),
Text('${counter.count}',
style: const TextStyle(
fontWeight: FontWeight.bold, fontSize: 20)),
],
),
소스 코드: 분기 "
multiProvider
"eman55555 / provider_state_management
자세한 내용은 이 문서를 참조하세요.
개발:
매체 : https://medium.com/@emanhamad55555/provider-state-management-in-flutter-part-1-b3fcb9fd2226
provider_state_management
새로운 Flutter 프로젝트.
시작하기
이 프로젝트는 Flutter 애플리케이션의 시작점입니다.
첫 번째 Flutter 프로젝트인 경우 시작할 수 있는 몇 가지 리소스:
Flutter 개발을 시작하는 데 도움이 필요하면 다음을 확인하십시오.
online documentation 튜토리얼을 제공하는
샘플, 모바일 개발 지침 및 전체 API 참조.
View on GitHub
축하합니다🥳🤩
Flutter Counter 앱에서 multiProvider를 구현했습니다!
Reference
이 문제에 관하여(Flutter의 제공자 상태 관리 - 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eman55555/provider-state-management-in-flutter-part-2-29ki텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)