- [Flutter] 42. Provider 라이브러리2024년 11월 13일
- Song hyun
- 작성자
- 2024.11.13.:20
728x90반응형[Flutter] 42. Provider 라이브러리
1. Provider 라이브러리 설치하기
https://pub.dev/packages/provider
provider | Flutter package
A wrapper around InheritedWidget to make them easier to use and more reusable.
pub.dev
provider: ^6.1.2
2. 리팩토링
(1) View - todo_screen.dart
import 'package:flutter/material.dart'; import 'package:mvvm_project_v01/start_04/view_models/todo_view_model.dart'; import 'package:provider/provider.dart'; // MaterialApp 앱 안에서 외부 라이브러리(프로바이더) 위젯을 감싸 주어야 한다. void main() => runApp( MaterialApp( // (_) => TodoViewModel() -> 매개 변수를 사용안할 꺼면 _ 를 선언한다. home: ChangeNotifierProvider( create: (_) => TodoViewModel(), builder: (context, child) { return TodoScreen(); }, ), ), ); class TodoScreen extends StatelessWidget { TodoScreen({super.key}); final TextEditingController _controller = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('MVVM provider Todo List'), ), body: Column( children: [ // 입력 필드 만들기 Padding( padding: const EdgeInsets.all(16.0), child: Row( children: [ Expanded( child: TextField( controller: _controller, decoration: InputDecoration(labelText: '작업을 입력 하시오'), ), ), IconButton( onPressed: () { // 여기에서 뷰 모델 클래스를 가져오자 --> DI 처리 final todoViewModel = Provider.of<TodoViewModel>(context, listen: false); if (_controller.text.isNotEmpty) { todoViewModel.addTodo(_controller.text); _controller.clear(); } }, icon: Icon(Icons.add), ) ], ), ), // 아래에 할일 목록 표시 구성 Expanded( child: Consumer<TodoViewModel>( builder: (context, todoViewModel, child) { return ListView.builder( itemCount: todoViewModel.todos.length, itemBuilder: (context, index) { // 뷰모델에 있는 자료구조 안에 각 인덱스에 맵핑된 객체 Todo인스턴스 하나 final todo = todoViewModel.todos[index]; return ListTile( title: Text(todo.title), trailing: IconButton( icon: Icon(Icons.delete), onPressed: () => todoViewModel.removeTodo(todo.id), ), ); }, ); }, ), ), ], ), ); } }
- Provider-Stateless도 괜찮은 이유: 상태 관리를 View model에서 관리하기 떄문이다.
728x90반응형'Flutter' 카테고리의 다른 글
[Flutter] 44. Stateless와 Stateful의 생명주기 (1) 2024.11.14 [Flutter] 43. GestureDetector란? (1) 2024.11.14 [Flutter] 41. ChangeNotifier란? (1) 2024.11.13 [Flutter] 40. MVVM 구조란? (1) 2024.11.13 [Flutter] 39. 모노리스 구조의 개념과 특징 (1) 2024.11.13 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)