변경 사항이 없으면 리빌드를 방지하고 제한된 값만 선택하여 업데이트를 필터링할 수 있습니다. Selector는 Provider.of를 사용하여 값을 얻은 다음 해당 값을 selector에 전달합니다. 그 후 selector 콜백은 빌더를 완료하는 데 필요한 정보만 포함하는 객체를 반환하는 작업을 수행합니다. 기본적으로 Selector는 collection 패키지의 DeepCollectionEquality를 사용하여 selector의 이전 결과와 새로운 결과를 비교하여 builder가 다시 호출되어야 하는지 결정합니다. 이 동작은 커스텀 shouldRebuild 콜백을 전달하여 재정의할 수 있습니다. selector가 리턴하는 값은 불변이어야 하며, 그렇지 않으면 Selector는 변경 사항이 없다고 생각..
조상으로부터 Provider를 얻고 해당 값을 builder에 전달합니다. Consumer 위젯은 특별한 작업을 하지 않습니다. 단지 새로운 위젯에서 Provider.of를 호출하고 빌드 구현을 builder에 위임합니다. builder는 null이 될 수 없으며 제공된 값이 변경될 때 여러 번 호출될 수 있습니다. Consumer 위젯의 두 가지 주요 목적은 다음과 같습니다:해당 제공자의 후손이 아닌 BuildContext를 가지고 있을 때 제공자의 값을 얻을 수 있게 합니다.더 세밀한 리빌드를 통해 성능을 최적화합니다. 해당 제공자의 후손이 아닌 BuildContext를 가지고 있을 때 제공자의 값을 얻기이 시나리오는 제공자를 생성하는 위젯이 그 제공자의 소비자이기도 할 때 주로 발생합니다. 예를..
외부 값과 동기화된 ChangeNotifier를 생성하고 동기화하는 ChangeNotifierProvider입니다. ChangeNotifierProvider의 이 변형을 더 잘 이해하려면 다음의 코드를 살펴볼 수 있습니다.ChangeNotifierProvider( create: (context) { return MyChangeNotifier( myModel: Provider.of(context, listen: false), ); }, child: ...) 이 예제에서는 MyModel이라는 다른 제공자(provider)에서 가져온 값을 사용하여 MyChangeNotifier를 생성했습니다. 이 방법은 MyModel이 절대 변하지 않는 한 작동합니다. 하지만 MyModel이 업데이트..
ChangeNotifier를 듣고 하위 요소에 노출시키며, ChangeNotifier.notifyListeners가 호출될 때마다 종속 요소를 다시 빌드합니다.ChangeNotifier를 생성할지 재사용할지에 따라 다른 생성자를 사용해야 합니다. ChangeNotifier 생성하기값을 생성하려면 기본 생성자를 사용하세요. ChangeNotifierProvider.value를 사용하여 빌드 내에서 인스턴스를 생성하면 메모리 누수 및 잠재적인 부작용이 발생할 수 있습니다. [O] 반드시 create 내에서 새 ChangeNotifier를 생성하세요.ChangeNotifierProvider( create: (_) => new MyChangeNotifier(), child: ...) [X] .valu..
Material Design을 사용하는 앱에서는 내비게이션을 위한 두 가지 주요 옵션으로 탭과 드로어가 있습니다. 탭을 지원하기에 충분한 공간이 없을 때 드로어는 유용한 대안이 됩니다. Flutter에서, 드로어 위젯과 Scaffold를 조합하여 Material Design 드로어가 포함된 레이아웃을 만들 수 있습니다. 이 문서에서는 다음 단계를 사용합니다:Scaffold 생성드로어 추가드로어에 항목 채우기드로어를 프로그래밍 방식으로 닫기 1. Scaffold 생성앱에 드로어를 추가하려면, 이를 Scaffold 위젯으로 감싸야 합니다. Scaffold 위젯은 Material Design 가이드라인을 따르는 앱에 일관된 시각적 구조를 제공합니다. 또한, 드로어, AppBar, SnackBar와 같은 특..
때때로 새로운 화면에서 이전 화면에 데이터를 반환하고 싶을 때가 있습니다. 예를 들어, 새 화면에서 사용자가 두 가지 옵션 중 하나를 선택할 수 있고, 사용자가 옵션을 선택하면 이전 화면에 그 선택을 알려주어 해당 정보를 기반으로 작업을 수행하게 됩니다. 다음 단계로 Navigator.pop() 메서드를 사용하여 이를 수행할 수 있습니다:홈 화면 정의선택 화면을 여는 버튼 추가두 개의 버튼이 있는 선택 화면 표시버튼이 눌리면 선택 화면 닫기홈 화면에 선택 사항을 스낵바로 표시하기 1. 홈 화면 정의홈 화면에는 버튼이 표시됩니다. 이 버튼을 탭하면 선택 화면이 시작됩니다.class HomeScreen extends StatelessWidget { const HomeScreen({super.key});..
새로운 화면으로 이동할 때 데이터를 전달하는 경우가 종종 있습니다. 예를 들어, 사용자가 항목을 탭할 때 해당 항목에 대한 정보를 새 화면에 전달할 수 있습니다. 기억하세요: 화면은 단순히 위젯입니다. 이 예제에서는 할 일 목록을 생성하고, 할 일을 탭하면 해당 할 일에 대한 정보를 표시하는 새 화면(위젯)으로 이동합니다. 이 문서는 다음 단계를 사용합니다:할 일 클래스를 정의합니다.할 일 목록을 표시합니다.할 일 정보를 표시할 수 있는 세부 화면을 만듭니다.데이터와 함께 세부 화면으로 이동합니다. 1. 할 일 클래스 정의하기먼저, 할 일을 간단하게 표현할 방법이 필요합니다. 이 예제에서는 제목과 설명 두 가지 데이터를 포함하는 클래스를 만듭니다.class Todo { final String tit..
대부분의 앱은 다양한 정보를 표시하기 위해 여러 화면을 포함합니다. 예를 들어, 한 앱에는 제품을 표시하는 화면이 있을 수 있습니다. 사용자가 제품 이미지를 탭하면 새 화면에서 해당 제품의 세부 정보를 표시합니다. Flutter에서는 화면과 페이지를 "라우트"라고 합니다. 이 문서의 나머지 부분에서는 라우트라는 용어를 사용합니다.Android에서 라우트는 액티비티(Activity)와 동등합니다.iOS에서 라우트는 뷰컨트롤러(ViewController)와 동등합니다.Flutter에서 라우트는 단순히 위젯입니다.이 문서에서는 Navigator를 사용하여 새로운 라우트로 이동합니다. 다음 섹션에서는 다음 단계를 사용하여 두 라우트 간에 이동하는 방법을 보여줍니다:두 라우트 생성하기Navigator.push()..