
현재 프로젝트에서 플러터의 상태 관리를 위해서 ChangeNotifierProvider를 사용하고 있다. ChangeNotifierProvider는 ChangeNotifier로 구현한 클래스에서 notifyListeners()가 호출되면 Provider.of로 구현 클래스를 리스닝하는 위젯을 자동으로 리빌드 해주는 기능이 있다. 하지만 프로젝트를 진행하다 보니 리빌드가 너무 많이 발생하는 문제가 발생했다. 왜 그럴까 열심히 알아본 결과, 내가 Provider.of에 대해 제대로 알고 있지 않아서였다. 다음 간단한 예제코드가 있다. 참고로 코드가 길어서 필요한 코드가 포함시켰다. SuperWidget의 하위에는 다양한 위젯이 있고, 그중에 SubWidget1도 포함되어 있다. 만일 다른 하위 위젯에서 Pr..

플러터에서 ChangeNotifierProvider를 이용해서 코드를 작성하는 중에 아래와 같은 에러가 발생했다. class SubWidget2 extends StatelessWidget { const SubWidget2({super.key}); @override Widget build(BuildContext context) { print("Sub Widget 2 build"); return ElevatedButton( onPressed: () { Provider.of(context).increment(); }, child: const Text("Sub Widget 2"), ); } } ======== Exception caught by gesture =============================..

플러터에서 showDialog()를 사용하는 코드를 작성하였다. import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text("MyApp")), body: Center( child: ElevatedButton( onPressed: () { showDialog( context: context, builder: ..

플러터에서 백 버튼을 제어하는 방법을 알아보자. 백 버튼은 뒤로 가기 버튼, 되돌리기 등 다양한 명칭으로 사용된다. 여기서는 백 버튼이라고 하겠다. 이전 화면으로 돌아가는 방법 플러터에서 내비게이터로 화면을 이동하면 이전 화면으로 돌아가기 위해 기본적으로 2가지 방법을 제공한다. 1. 앱바의 백 버튼 2. 안드로이드 시스템의 백 버튼 보통은 백 버튼의 기능을 그대로 사용해도 문제는 없다. 하지만 데이터가 입력된 폼이 있다면 사용자에게 입력을 취소할 것인지 묻는다든지, 비밀번호를 입력해야 앱을 사용할 수 있어야 한다면 백 버튼의 기능을 제어해야 한다. 여기서는 각각의 백 버튼을 제어하는 방법을 알아보겠다. 1. 앱바의 백 버튼 제어하기 MaterialPageRoute로 이동한 화면의 앱바에는 자동으로 백 ..

플러터에서 게비게이터(navigator)로 화면을 이동하는 코드를 작성하고 실행하였는데, 아래와 같은 에러가 발생했다. The following assertion was thrown while handling a gesture: Navigator operation requested with a context that does not include a Navigator. The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget. 에러 내용을 해석하면, '네비게이터에서 이동하려면 사용되는 콘텍스트(context)는 네비게이터 위젯의 하위 위젯..
깃을 공부하면서 로컬 저장소에서 원격 저장소로 git push 하는 중에 다음과 같은 에러가 발생했다. hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for..
파이썬 3.9를 기준으로 파이썬 타입 어노테이션을 사용하는 방법에 대해서 알아보자. 이 문서는 공식문서를 바탕으로 만들었다. NewType Callable Generics Any NoReturn tuple Union Optional type Literal ClassVar Final AnyStr Protocol runtime_checkable NamedTuple TypedDict # 파이썬 타입 어노테이션을 적용하기 전에 확인해야 할 점 타입 어노테이션은 파이썬 3.5부터 추가가 되었다. 그리고 현제까지도 계속 관련 기능이 추가되고 있는 상황이다. 이 말은 곧 호환성을 고려해야 한다는 것이다. 특히 파이썬 3.9에서 많은 부분이 변경되었다. 그러므로 자신이 사용하는 파이썬 환경을 고려해서 어노테이션을 작성..

파이썬의 타입 어노테이션(type annotation)에 대해서 알아보자. 타입 어노테이션에 대해서 알기 위해선 우선 파이썬의 특징을 잠시 알아하고 왜 타입 어노테이션이 필요한지 설명하겠다. # 파이썬은 동적 타입 언어다 a = 1 a = '1' 파이썬은 식별자에 값을 넣으면 아주 쉽게 변수를 만들 수 있다. 그리고 어떤 값이든 넣을 수 있다. 위에서 a에 int 타입인 1을 넣었고, 바로 str 타입인 '1'을 넣었다. 이렇게 식별자에 타입을 정하지 않고 실행 중에 타입을 확인하는 프로그래밍 언어를 동적 타입 언어라고 한다. # 파이썬은 덕 타이핑을 쉽게 할 수 있다 이런 동적 타입 언어의 기능으로 파이썬은 정말 쉽게 코드를 작성할 수 있게 된다. 예를 들어 다음은 컬렉션의 요소를 출력하는 함수다. d..