Flutter 공부 기록 2일째~카메라를 사용해 경치를 볼 만한 앱을 만들어 보자~
마지막 회의
Flutter의 인스톨을 해, 샘플 코드를 움직였다.
「Flutter 공부 기록 1일째~설치로부터 샘플 코드를 달릴 때까지~」
오늘 사용하는 프로젝트는 어제 생성한 초기 샘플 코드를 사용합니다.
이 기사에서 할 일
부 b. 에서 v 장소에 있던 카메라 플러그인 사용
환경
1. 카메라를 사용하기 위해 설정 변경
camera 플러그인 Readme > Installation 에 따라 설정을 변경한다.
camera 플러그인을 사용하려면 iOS는 버전 10.0 이상, Android는 sdk version 21 이상(Android5.0 LOLLIPOP) 이상이 필요하기 때문에 그 설정을 한다.
iOS
주의
문서에 따라 설정을 하고 있습니다만, iOS의 실제기를 가지고 있지 않기 때문에 동작 확인은 할 수 없습니다.
1. ios/Runner/Info.plist
열기
2. 최초의 쪽에 이하의 문장을 카피해, 위의 쪽에 붙여 넣는다.
<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>
안드로이드
1. android/app/build.gradle
열기
2. minSdkVersion
라고 쓰여진 행을 찾아내고 minSdkVersion 21
2. 카메라 플러그인을 사용할 수 있도록 합니다.
1. VSCode의 터미널 > 새 터미널을 클릭하여 터미널을 꺼냅니다.
2. flutter pub add camera
를 실행한다.
3. 여러가지 나와 마지막으로 Changed 7 dependencies!
가 나온다. pubspec.yaml
를 보고 dependencies:
에 camera
가 추가되어 있으면 OK.
3. 샘플 코드 복사하기
main.dart에 다음을 복사
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
late List<CameraDescription> cameras;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
runApp(CameraApp());
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
late CameraController controller;
@override
void initState() {
super.initState();
controller = CameraController(cameras[0], ResolutionPreset.max);
controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!controller.value.isInitialized) {
return Container();
}
return MaterialApp(
home: CameraPreview(controller),
);
}
}
4. test\widget_test.dart 수정
test\widget_test.dart
에 에러가 발생한다 (초기 생성되고 있던 MyApp()가 사라졌기 때문에), MyApp()
를 CameraApp()
로 수정한다.
어쩌면 여기에는 main.dart
의 main 함수 내의 runApp();
에 들어있는 함수가 온다.
※공식 문서의 에러에 대해서
공식 문서에서 바꾸고있는 곳을 쓰고 있으므로, 관심이 없으면 읽어 날려 OK입니다.
공식 문서 Example 을 그대로 복사하면 몇 가지 에러가 나왔으므로 수정하고 있습니다. "3. 샘플 코드를 복사" 에 붙어 있는 코드는 수정 후입니다.
아래에 원래 코드, 오류, 수정 후 코드를 둡니다.
다섯 번째 줄
원래 코드List<CameraDescription> cameras;
오류
The non-nullable variable 'cameras' must be initialized.
Try adding an initializer expression.dart(not_initialized_non_nullable_variable)
수정 후 코드late List<CameraDescription> cameras;
20행
원래 코드CameraController controller;
오류
Non-nullable instance field 'controller' must be initialized.
Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.dar
수정 후 코드late CameraController controller;
36행(오류가 아니라 경고)
원래 코드controller?.dispose();
경고
The receiver can't be null, so the null-aware operator '?.' is unnecessary.
Try replacing the operator '?.' with '.'.dart(invalid_null_aware_operator)
수정 후 코드controller.dispose();
디버깅하고 이동해보십시오.
단지 파인더 너머로 보이는 경치를 담는 앱이 완성되었다.
오마케 정도의 아무래도 좋은 깨달음
main.dart
그러면 실행 버튼이 표시되는데, 확장자가 .dart
가 아닌 곳은 표시되지 않는다..dart
때
.dart
그렇지 않을 때
둘째 날 끝
사실은 카메라 앱을 만드는 등 좀 더 진행된 것을 하고 싶었는데, 여러 가지 사정으로 시간을 낼 수 없었던 것, 단번에 여러가지로 하면 Dart의 의미를 이해하는 것이 따라잡지 않기 때문에 카메라 너머의 경치 보기만 하는 앱이 되었습니다.
본래 만들고 싶은 것은, 동영상 촬영을 실시하는 앱이므로, 다음은 사진 촬영 앱인가, 동영상 촬영 앱을 만들고 싶다고 생각합니다.
※추기
셋째 날은 여러 사정에 따라 공식 문서의 연속 (첫날 계속)이 되었습니다.
셋째 날 → Flutter 공부 기록 3일째~공식 문서의 튜토리얼~
Reference
이 문제에 관하여(Flutter 공부 기록 2일째~카메라를 사용해 경치를 볼 만한 앱을 만들어 보자~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeguma_Na/items/7f4543bb4d5159fd2c28
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>
1. VSCode의 터미널 > 새 터미널을 클릭하여 터미널을 꺼냅니다.
2.
flutter pub add camera
를 실행한다.3. 여러가지 나와 마지막으로
Changed 7 dependencies!
가 나온다. pubspec.yaml
를 보고 dependencies:
에 camera
가 추가되어 있으면 OK.3. 샘플 코드 복사하기
main.dart에 다음을 복사
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
late List<CameraDescription> cameras;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
runApp(CameraApp());
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
late CameraController controller;
@override
void initState() {
super.initState();
controller = CameraController(cameras[0], ResolutionPreset.max);
controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!controller.value.isInitialized) {
return Container();
}
return MaterialApp(
home: CameraPreview(controller),
);
}
}
4. test\widget_test.dart 수정
test\widget_test.dart
에 에러가 발생한다 (초기 생성되고 있던 MyApp()가 사라졌기 때문에), MyApp()
를 CameraApp()
로 수정한다.
어쩌면 여기에는 main.dart
의 main 함수 내의 runApp();
에 들어있는 함수가 온다.
※공식 문서의 에러에 대해서
공식 문서에서 바꾸고있는 곳을 쓰고 있으므로, 관심이 없으면 읽어 날려 OK입니다.
공식 문서 Example 을 그대로 복사하면 몇 가지 에러가 나왔으므로 수정하고 있습니다. "3. 샘플 코드를 복사" 에 붙어 있는 코드는 수정 후입니다.
아래에 원래 코드, 오류, 수정 후 코드를 둡니다.
다섯 번째 줄
원래 코드List<CameraDescription> cameras;
오류
The non-nullable variable 'cameras' must be initialized.
Try adding an initializer expression.dart(not_initialized_non_nullable_variable)
수정 후 코드late List<CameraDescription> cameras;
20행
원래 코드CameraController controller;
오류
Non-nullable instance field 'controller' must be initialized.
Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.dar
수정 후 코드late CameraController controller;
36행(오류가 아니라 경고)
원래 코드controller?.dispose();
경고
The receiver can't be null, so the null-aware operator '?.' is unnecessary.
Try replacing the operator '?.' with '.'.dart(invalid_null_aware_operator)
수정 후 코드controller.dispose();
디버깅하고 이동해보십시오.
단지 파인더 너머로 보이는 경치를 담는 앱이 완성되었다.
오마케 정도의 아무래도 좋은 깨달음
main.dart
그러면 실행 버튼이 표시되는데, 확장자가 .dart
가 아닌 곳은 표시되지 않는다..dart
때
.dart
그렇지 않을 때
둘째 날 끝
사실은 카메라 앱을 만드는 등 좀 더 진행된 것을 하고 싶었는데, 여러 가지 사정으로 시간을 낼 수 없었던 것, 단번에 여러가지로 하면 Dart의 의미를 이해하는 것이 따라잡지 않기 때문에 카메라 너머의 경치 보기만 하는 앱이 되었습니다.
본래 만들고 싶은 것은, 동영상 촬영을 실시하는 앱이므로, 다음은 사진 촬영 앱인가, 동영상 촬영 앱을 만들고 싶다고 생각합니다.
※추기
셋째 날은 여러 사정에 따라 공식 문서의 연속 (첫날 계속)이 되었습니다.
셋째 날 → Flutter 공부 기록 3일째~공식 문서의 튜토리얼~
Reference
이 문제에 관하여(Flutter 공부 기록 2일째~카메라를 사용해 경치를 볼 만한 앱을 만들어 보자~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeguma_Na/items/7f4543bb4d5159fd2c28
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
late List<CameraDescription> cameras;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
runApp(CameraApp());
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
late CameraController controller;
@override
void initState() {
super.initState();
controller = CameraController(cameras[0], ResolutionPreset.max);
controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!controller.value.isInitialized) {
return Container();
}
return MaterialApp(
home: CameraPreview(controller),
);
}
}
공식 문서에서 바꾸고있는 곳을 쓰고 있으므로, 관심이 없으면 읽어 날려 OK입니다.
공식 문서 Example 을 그대로 복사하면 몇 가지 에러가 나왔으므로 수정하고 있습니다. "3. 샘플 코드를 복사" 에 붙어 있는 코드는 수정 후입니다.
아래에 원래 코드, 오류, 수정 후 코드를 둡니다.
다섯 번째 줄
원래 코드
List<CameraDescription> cameras;
오류
The non-nullable variable 'cameras' must be initialized.
Try adding an initializer expression.dart(not_initialized_non_nullable_variable)
수정 후 코드
late List<CameraDescription> cameras;
20행
원래 코드
CameraController controller;
오류
Non-nullable instance field 'controller' must be initialized.
Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.dar
수정 후 코드
late CameraController controller;
36행(오류가 아니라 경고)
원래 코드
controller?.dispose();
경고
The receiver can't be null, so the null-aware operator '?.' is unnecessary.
Try replacing the operator '?.' with '.'.dart(invalid_null_aware_operator)
수정 후 코드
controller.dispose();
디버깅하고 이동해보십시오.
단지 파인더 너머로 보이는 경치를 담는 앱이 완성되었다.
오마케 정도의 아무래도 좋은 깨달음
main.dart
그러면 실행 버튼이 표시되는데, 확장자가 .dart
가 아닌 곳은 표시되지 않는다..dart
때
.dart
그렇지 않을 때
둘째 날 끝
사실은 카메라 앱을 만드는 등 좀 더 진행된 것을 하고 싶었는데, 여러 가지 사정으로 시간을 낼 수 없었던 것, 단번에 여러가지로 하면 Dart의 의미를 이해하는 것이 따라잡지 않기 때문에 카메라 너머의 경치 보기만 하는 앱이 되었습니다.
본래 만들고 싶은 것은, 동영상 촬영을 실시하는 앱이므로, 다음은 사진 촬영 앱인가, 동영상 촬영 앱을 만들고 싶다고 생각합니다.
※추기
셋째 날은 여러 사정에 따라 공식 문서의 연속 (첫날 계속)이 되었습니다.
셋째 날 → Flutter 공부 기록 3일째~공식 문서의 튜토리얼~
Reference
이 문제에 관하여(Flutter 공부 기록 2일째~카메라를 사용해 경치를 볼 만한 앱을 만들어 보자~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeguma_Na/items/7f4543bb4d5159fd2c28
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
main.dart
그러면 실행 버튼이 표시되는데, 확장자가 .dart
가 아닌 곳은 표시되지 않는다..dart
때.dart
그렇지 않을 때둘째 날 끝
사실은 카메라 앱을 만드는 등 좀 더 진행된 것을 하고 싶었는데, 여러 가지 사정으로 시간을 낼 수 없었던 것, 단번에 여러가지로 하면 Dart의 의미를 이해하는 것이 따라잡지 않기 때문에 카메라 너머의 경치 보기만 하는 앱이 되었습니다.
본래 만들고 싶은 것은, 동영상 촬영을 실시하는 앱이므로, 다음은 사진 촬영 앱인가, 동영상 촬영 앱을 만들고 싶다고 생각합니다.
※추기
셋째 날은 여러 사정에 따라 공식 문서의 연속 (첫날 계속)이 되었습니다.
셋째 날 → Flutter 공부 기록 3일째~공식 문서의 튜토리얼~
Reference
이 문제에 관하여(Flutter 공부 기록 2일째~카메라를 사용해 경치를 볼 만한 앱을 만들어 보자~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeguma_Na/items/7f4543bb4d5159fd2c28
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Flutter 공부 기록 2일째~카메라를 사용해 경치를 볼 만한 앱을 만들어 보자~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ikeguma_Na/items/7f4543bb4d5159fd2c28텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)