[Flutter] 스나이퍼팩토리 Flutter 기초과정 (17)

GONG·2023년 4월 13일
0
post-thumbnail

17일차 과제 링크 👉 17일차 과제

Permission

  • 앱이 사용자의 기기에서 수행하는 작업을 제어하기 위한 권한
  • 앱 개발자들은 앱 내에서 사용할 권한을 미리 파일에다가 적어줘야 한다.
  • iOS : info.plist
  • Android : AndroidManifest.xml

페이지 권한 리스트


iOS
https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources

Android
https://developer.android.com/reference/android/Manifest.permission

image_picker 패키지

  • https://pub.dev/packages/image_picker
  • 사용자가 갤러리나 카메라에서 이미지를 선택하거나 캡처할 수 있도록 도와주는 패키지
  • iOS는 권한 설정 필요
    • info.plist

      <key>NSPhotoLibraryUsageDescription</key>
      <string>This app requires Photo Library Permission</string>
      <key>NSCameraUsageDescription</key>
      <string>This app requires NSCameraUsageDescription</string>
      <key>NSMicrophoneUsageDescription</key>
      <string>This app requires Photo NSMicrophoneUsageDescription</string>
  • 이미지 파일로 XFIle이라는 데이터 타입을 사용함
    import 'dart:io';
    
    import 'package:flutter/material.dart';
    import 'package:image_picker/image_picker.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      XFile? selectedImage;
    
      
      Widget build(BuildContext context) {
        var imagePicker = ImagePicker();
        return MaterialApp(
          home: Scaffold(
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
    							// Image.asset
                  if(selectedImage != null) Image.file(File(selectedImage!.path)),
                  TextButton(
                    onPressed: () async {
                      var image = await imagePicker.pickImage(source: ImageSource.gallery);
                      if(image != null) {
                        print('이미지를 선택햇군');
                        selectedImage = image;
                        setState(() {});
                      } else {
                        print('선택하라고햇지');
                      }
                    },
                    child: Text('이미지 선택하세요'),
                  )
                ],
              ),
            ),
          ),
        );
      }
    }

One or more plugins require a higher Android SDK version.

  • 원인

    • image_picker 패키지에서 현재 버전보다 더 높은 sdk 버전을 요구해서 발생
      One or more plugins require a higher Android SDK version.
      Fix this issue by adding the following to C:\...\프로젝트명\android\app\build.gradle:
      android {
      	compileSdkVersion 33
      	...
      }
  • 해결

    • android > app > build.gradle 파일에 compileSdkVersion 수정

      android {
          compileSdkVersion 33

Unable to load asset

  • 원인
    • AssetImage는 앱 번들 내부의 이미지 리소스를 로드하기 위해 사용되는데, XFile은 파일 시스템에서 이미지를 가져옴
    • AssetImage을 사용하여 XFile 경로를 로드하면 오류가 발생함
  • 해결
    • FileImage은 파일 시스템에서 이미지를 로드하기 위해 사용됨

    • XFile 경로를 File 객체로 변환한 후 FileImage를 사용하여 이미지를 로드할 수 있음

      Image.file(File(selectedImage!.path))

17일차 끝...

자꾸 콘솔창이 피로 물들어버린다...
분명 내 코드에는 문제가 없다고 생각했는데 알고 보면 다 내 문제임

시뻘건 에러들 그만 보고 싶다
열심히 공부해야지.......

profile
우와재밋다

0개의 댓글