‘스틱' 이라는 책을 보는데 지식의 저주라는 얘기가 나온다. 어떤 사실에 대해 알게되면 모른다는 느낌을 모르게 된다는 것. 알고나면 그걸 왜 모르지? 하면서 초보 시절을 잊어버린다는 얘기다. 누구나 초보 시절을 겪고 매우 간단한 것도 모르는 시기가 있는데 마치 그런 시절은 없었다는 듯 바뀐다고 한다.
그래서인지 개발 관련한 내용들도 찾다보면 아주 간단한 내용은 찾기 힘들다. 초보자는 그것 찾느라 고생하는데 찾아보면 없다. 대부분의 개발자들이 지식의 저주에 걸려 알고나면 그 부분은 중요치 않다고 생각하기 때문에 온라인에 잘 남겨두지 않기 때문이리라. 그래서 사소한 것도 올려서 공유해야 한다. 지식의 저주에 걸리기 전에 말이다.
책으로 flutter를 공부하고 있는데 추가 패키지를 설치하라고 한다. pubspec.yaml에 패키지 명을 정의하면 되는데 책에는 정의만 했지 이후 과정에 대한 얘기가 없다. 요걸 chatgpt에게 물어보니 아래와 같이 패키지를 가져오는 명령어가 있어야 한단다.
$ flutter pub get
또는
$ flutter packages get
그런데 아래와 같은 에러가 난다.
sig03@sig03ui-MacBookPro-2 pomodoro % flutter pub get
Running "flutter pub get" in pomodoro...
Resolving dependencies...
Error on line 32, column 5 of pubspec.yaml: A dependency may only have one source.
╷
32 │ ┌ sdk: flutter
33 │ │ sprintf: "^7.0.0"
34 │ │ fluttertoast: "^8.0.7"
35 │ │
36 │ │
37 │ │ # The following adds the Cupertino Icons font to your application.
38 │ │ # Use with the CupertinoIcons class for iOS style icons.
39 │ │ cupertino_icons: ^1.0.2
│ └──^
╵
pub get failed
command: "/Users/sig03/Documents/app/flutter/bin/cache/dart-sdk/bin/dart __deprecated_pub --color --directory . get --example"
pub env: {
"FLUTTER_ROOT": "/Users/sig03/Documents/app/flutter",
"PUB_ENVIRONMENT": "flutter_cli:get",
"PUB_CACHE": "/Users/sig03/.pub-cache",
}
exit code: 65
원인은 간단한데 에러는 애매하다.
pubspec.yaml에 다운받을 패키지 명을 정의할 때 indent를 잘 지켜줘야 한다. 다운받으려는 패키지가 sprintf, fluttertoast 인데 indent를 안 지켜 flutter 하위로 인식했나 보다.
//Error: pubspec.yaml
dependencies:
flutter:
sdk: flutter
sprintf: "^7.0.0"
fluttertoast: "^8.0.7"
//Success: pubspec.yaml
dependencies:
flutter:
sdk: flutter
sprintf: "^7.0.0"
fluttertoast: "^8.0.7"
위와 같이 indent 를 잘 지켜서 정의하고 flutter pub get 하면 패키지 잘 받아 온다.