TextField가 화면에 나타날 때, TextField에 있는 텍스트를 전부 선택하는 방법은 다음과 같다. TextField("Enter rename", text: $groupName) .onAppear { DispatchQueue.main.async { UIApplication.shared.sendAction(#selector(UIResponder.selectAll(_:)), to: nil, from: nil, for: nil) } }
Swift는 인스턴스 변수가 다 초기화되지 않으면 인스턴스 변수를 사용할 수 없다. 예를 들어, 다음과 같이 groupName 인스턴스 변수를 이용해서 predicate를 만들게 되면 에러가 발생한다. struct ItemListView: View { @Environment(\.managedObjectContext) private var viewContext @State private var isShowingNewItemSheet = false @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)], predicate: NSPredicate(format: "itemGroup.name == %@", gr..
플러터에서 json_serializable 패키지를 사용하면, 객체를 json으로 변환하거나, json을 객체로 쉽게 만들 수 있다. 먼저 pubspec.yaml에 다음의 정보를 추가하자. dependencies: json_annotation: ^4.8.0 dev_dependencies: build_runner: ^2.3.3 json_serializable: ^6.6.0 json_serializable을 적용할 클래스에 다음 작업을 해야 한다. 1. part .g.dart 추가하기 2. 클래스에 @JsonSerializable를 추가하기 3. fromJson 명명된 생성자 추가하기 : 생성자는 _$FromJson() 함수를 사용한다. 4. toJson 메서드 추가하기 : 메서드는 _$ToJson() 함수..
플러터에서 사용하는 다트 언어에는 예외 클래스와 에러 클래스가 존재한다. 각 클래스의 차이점에 대해서 알아보자. 예외 클래스 예외 클래스는 오류에 대한 정보를 사용자에게 전달하기 위해 사용된다. 그리고 오류를 프로그램으로 처리할 수 있도록 한다. 이 예외는 catch로 잡히기를 기대하며, 유용한 데이터를 포함해야 한다. 예외 클래스인 Exceioption은 Exception("메시지")처럼 간단히 예외를 만들 수 있지만 라이브러리 코드에서는 사용을 금지한다. 왜냐하면 사용자들이 정확한 타입을 잡을 수 없기 때문이다. 이 클래스의 인스턴스는 테스트나 개발 중에 사용하자. 프로덕션 코드에서는 Excpetion의 하위 클래스를 정의해서 정확한 예외 정보를 전달하도록 해야 한다. 에러 클래스 에러 클래스는 프로..
https://medium.com/@theboringdeveloper/common-bottom-navigation-bar-flutter-e3693305d2d Common bottom navigation bar — Flutter Welcome to this tutorial to create a Common bottom navigation bar in Flutter. medium.com 해결하고 싶은 문제점 플러터에서 BottomNavigationBar를 사용하고 있는데, 내비게이션으로 화면 이동시 BottomNavigationBar가 사라진다. 그래서 화면을 이동해도 BottomNavigationBar를 계속 사용할 수 있는 방법에 대해서 구글링하였다. 이 문제를 해결하기 위해서는 플러터에서 route가 ..
플러터에서 다음 코드에서 에러가 발생했다. Scaffold( appBar: AppBar(title: const Text("Home Page")), body: const Center( child: TextField( onChanged: (str) { print(str); }, ) ), ); 에러는 익명 함수에 표시되어 있다. 처음에는 익명 함수에 전혀 관련이 없는 에러 내용(유효하지 않은 상수 값)이라서 이유를 알 수가 없었다. 자세히 살펴보니 익명 함수를 가지는 Center가 const로 선언되어 있다. 그래서 익명함수는 상수가 될 수 없어서 이런 에러가 발생한 것을 알 수 있었다. 이런 에러가 발생하면 const를 제거해보자.
플러터는 다트 언어를 사용한다. 다트의 객체에 동등성에 대해서 알아보자. 예제 코드 Person 클래스를 구현하였다. 그리고 동일한 속성을 가지는 두 객체를 생성한 후 == 연산자로 동등성을 확인하였더니 false가 나왔다. class Person { String name; int age; Person(this.name, this.age); } void main() { var a = Person('John', 26); var b = Person('John', 26); print(a == b); // false } 다트의 == 연산자 다트에서 == 연산자는 두 객체의 동등성을 비교하는 데 사용된다. == 연산자의 작동 방식은 객체의 주소(메모리 위치)를 기반으로 한다.즉, 두 객체가 정확히 같은 인스턴스인..