묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
질문있습니다.
basket screen에서 appBar에 뒤로가기 기능을 입혀보려고 합니다. 다른 페이지들은 가능한데, 장바구니 페이지에서는 뒤로가기 기능이 안되더라고요, paginationListview로 씌우고 <BasketITemModel>를 넣으려고 해서 안되는 것 같은데요, 이게 가능하도록 하려면 어떻게 해야할까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
강의 정리 자료같은것도 제공되면 정말 지구 1등 플러터 강의가 될거같아요
플러터 기본편 완강하고 너무 만족해서 중급도 들으러왔어요+_+ 근데 강의 내용을 정리한 PDF자료가 있으면 어떨까 하는 생각이 자꾸 들어요.... 이런것도 있으면 정말 지구 1등의 플러터 강의가 될 것 같아요! ! 있어야 한다 이건 아니고 그냥 수강생 한명의 의견입니다..... - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
처음부터 듣지않고, 중급만 듣고 있는데 문제가 있습니다.
중급부터 듣기 시작하니, 강의중에 말씀하신 이미지 같은것들을 어디서 받을수 있을까요? 코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드로 테스트 할 때 에러
영상 5분대에 ImagePicker를 실행하려고 할 때쯤에안드로이드 실기기에 테스트 해보면 이런 에러가 나오네요 ㅠ 검색해서 하라는 대로 해봐도 잘 안돼서 질문 드립니다. 환경은 윈도우에서 사용하는 중입니다. 추가로 비디오 플레이어 프로젝트 생성은 회사 맥으로 했고 집에서 윈도우로 이어서 작업하는 건데 이 부분에서 이슈가 있을까요?
-
해결됨Flutter 앱 개발 기초
CatService 를 수정해보고 싶은데 잘 안되어 도움 요청드립니다.
안녕하세요. CatService 를 Riverpod 로 변경해보고 싶은데 잘 안되어 도움 요청드립니다.class CatService extends ChangeNotifier { // 고양이 사진을 담을 변수 List<String> catImages = []; // 좋아요 사진 List<String> favoriteImages = []; Dio dio = Dio(); SharedPreferences prefs; // 생성자 CatService(this.prefs) { dio.interceptors.add(LogInterceptor()); dio.interceptors.add(CustLogInterceptor()); getRandomCatImages(); favoriteImages = prefs.getStringList(FavoriteImage_KEY) ?? []; } void getRandomCatImages() async { Response resp = await dio.get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg'); print(resp.data); for (int i = 0; i < resp.data.length; i++) { final map = resp.data[i]; catImages.add(map['url']); // url만 추출하여 catImages 에 이미지 추가. } notifyListeners(); } // 좋아요 토글 void toggleFavoriteImage(String catImage) { if (favoriteImages.contains(catImage)) { favoriteImages.remove(catImage); // 이미 좋아요한 경우 제거 } else { favoriteImages.add(catImage); // 새로운 사진 추가 } notifyListeners(); // 새로고침 } }위 코드를 아래와 같이 Riverpod 로 변경해보고 싶습니다.final dioProvider = Provider<Dio>((ref) { final dio = Dio(); dio.interceptors.add(LogInterceptor()); return dio; });final catImageProvider = NotifierProvider<CatImageNotifier, List<String>>(CatImageNotifier.new); final favoriteImageProvider = NotifierProvider<FavoriteImageNotifier, List<String>>(FavoriteImageNotifier.new); class CatImageNotifier extends Notifier<List<String>> { // 고양이 사진을 담을 변수 List<String> catImages = []; @override List<String> build() => []; void getRandomCatImages() async { final resp = await ref.read(dioProvider).get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg'); for (int i = 0; i < resp.data.length; i++) { final map = resp.data[i]; catImages.add(map['url']); // url만 추출하여 catImages 에 이미지 추가. } state = catImages; } } class FavoriteImageNotifier extends Notifier<List<String>> { // 좋아요 사진 //List<String> favoriteImages = []; @override List<String> build() => []; // 좋아요 토글 void toggleFavoriteImage(String catImage) { if (state.contains(catImage)) { state.remove(catImage); // 이미 좋아요한 경우 제거 } else { state.add(catImage); // 새로운 사진 추가 } } }배열이 2개라서 두개의 Notifier 를 상속받은 클래스로 나눠야 할 것 같은 생각이 들어 나눠보려고 하는데 잘 안됩니다.어떻게 수정해야 되는지 도움 부탁드립니다.Class 를 하나 만들어서 id, imgUrl, isFavorite 3개의 칼럼으로 구분을 지어서 하면 해결될지 고민되기도 합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
main 함수에서 async/await를 사용하는 이유가 궁금합니다
main 함수에서 async/await가 없더라고순차적으로 아래처럼 수행이될거같은데async/await가 필요한 이유가 무엇인지 궁금합니다WidgetsFlutterBinding.ensureInitialized(); initializeDateFormatting(); runApp
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
iPhone simulator의 아래와 같은 오류
[ERROR:flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm(42)] Using the Impeller rendering backend. 코팩님. 실행은 정상적으로 되지만 위와 같은 오류가 있는데 인터넷 검색해 보니 프로그램에서 바꾸면 된다고 나오는데, 근본적인 해결책은 없을까요? 셋팅 등에서..
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
orderProvider 관련 질문이 있습니다.
선생님 안녕하세요. 완강 후 코드 뜯어보면서 복습 중입니다:) 주문 탭 클릭 시 곧바로 주문한 최신 리스트를 볼 수 있게하는 방법을 고민하다가 orderProvider를 들여다 보았는데요.곰곰히 생각해보니 postOrder만 해서는 orderProvider(orderStateNotifier)의 상태가 업데이트가 안되는 거 아닌가 하는 생각이 들었습니다. 그래서 forceRefetch하는 것처럼, postOrder 함수 하단에 true 반환하기 전에 paginate()를 실행하여 주문 탭 클릭시 곧바로 최신 리스트 뜨도록 했습니다.Future<bool> postOrder() async{ try{ final uuid = Uuid(); final id = uuid.v4(); final state = ref.read(basketProvider); final resp = await repository.postOrder( body: PostOrderBody( id: id, products: state.map((e) => PostOrderBodyProduct(productId: e.product.id, count: e.count)).toList(), totalPrice: state.fold(0, (pre, next) => pre + (next.product.price * next.count)), createdAt: DateTime.now().toString())); paginate(); return true; } catch(e){ return false; } }이렇게 하는 게 옳은 방법일까요? 그리고 굳이 forceRefetch를 통해서만 주문탭이 업데이트되게 하신 이유가 있을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
캘린더 스케쥴러 Today Banner설계 질문있습니다
안녕하세요. 플러터 강의 잘 보고 있습니다.Today Banner설계 강의 마지막부분에 home_screen으로 onDaySelected함수를 뺐는데home_screen에서 이 함수를 정의를 하고~chileren[Calendar(selectedDay: selectedDay,focusedDay: focusedDay,onDaySelected : onDaySelected,),~위처럼 Calendar안에 onDaySelected를 파라미터로 넣었는데요, 이 함수가 실행되는 시점은 calendar.dart파일 안에서TableCalendar를 리턴할때, onDaySelected : onDaySelected 이 부분에 의해 실행이 되는데제가 이해하고 있는거로는home_screen.dart가 stateful위젯이니까 그 안에Calendar(selectedDay: selectedDay,focusedDay: focusedDay,onDaySelected : onDaySelected,),가 실행 되면 home_screen.dart안에 build함수가 다시 불려서 그림을 다시 그리는거로 이해하고 있습니다.(캘린더 날짜를 클릭하는대로 날짜가 바뀌는)근데 home_screen에서 onDaySelected함수를 정의해서 Calendar() 안에 넣는데 어떻게 _HomeScreenState에 정의한 selectedDay의 값을 받아와서 그 밑에 TodayBanner안에 selectedDay매개변수에 넣어줄 수 있는지 이해가 안됩니다.요약하자면home_screen에 onDaySelected를 정의했고 Calendar()에 정의한 onDaySelected를 넣어서 Calendar내부에서 실행을 한건데 그럼 onDaySelected함수에 정의한 this.selectedDay = selectedDay; 이 부분은 calendar.dart에 있는 selectedDay에 들어가야하는거 아닌지, 어떻게 home_screen의 selectedDay에 값이 들어가게 되는지 알고싶습니다. 답변 부탁드리겠습니다.
-
해결됨Flutter 앱 개발 기초
Bucket Provider 대신에 Riverpod 로 변경해보고 싶어요.
안녕하세요. 3강 강의를 듣고 질문드립니다.상태관리는 Riverpod 로 변경해보고 싶은데 잘 안됩니다./// 버킷 클래스 class Bucket { String job; // 할 일 bool isDone; // 완료 여부 Bucket(this.job, this.isDone); // 생성자 }Provider 의 BucketServiceclass BucketService extends ChangeNotifier { List<Bucket> bucketList = [ //Bucket('잠자기', false), // 더미데이터 ]; /// bucket 추가 void createBucket(String job){ bucketList.add(Bucket(job, false)); notifyListeners(); } /// bucket 수정 void updateBucket(Bucket bucket, int index){ bucketList[index] = bucket; notifyListeners(); } /// bucket 삭제 void deleteBucket(int index){ bucketList.removeAt(index); notifyListeners(); } }이걸 Riverpod v2 기준으로 변경해보고 싶은데 매개변수를 그대로 사용하면서 할 수 있는 방법을 모르겠습니다.final bucketProvider = NotifierProvider<BucketNotifier, List<Bucket>>(BucketNotifier.new); class BucketNotifier extends Notifier<List<Bucket>> { @override List<Bucket> build() => []; /// bucket 추가 void createBucket(String job){ state = [...state, Bucket(job, false)]; } /// bucket 수정 void updateBucket(Bucket bucket, int index){ } /// bucket 삭제 void deleteBucket(int index){ //state = state.where((element) => element != index).toList(); // element 에는 index 가 없는데 어떻게 비교할 수 있을까? } }
-
해결됨Flutter로 SNS 앱 만들기
firebase 관련오류
안녕하세요..사용자 인증 시 아래와 같은예외가 발생합니다. FirebaseAuthException ([firebase_auth/too-many-requests] We have blocked all requests from this device due to unusual activity. Try again later.) 여기저기 찾아봐도 이유를 모르겠습니다혹시, 이유를 아시면 답변 부탁드리겠습니다. 감사합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
StreamBuilder 관련 질문입니다.
강의 중에 snapshot.data를 콘솔에 찍는 부분에 관한건데요!hot reload시 케바케로-flutter: null flutter: Latitude: 37.522327, Longitude: 126.921252flutter: Latitude: 37.522327, Longitude: 126.921252- 와 같이 현재 포지션이 두번 찍힐때가 있는데 이런건 어떤거때문인걸까요?제가 생각하기로는앱 로딩 시 빌드 함수가 실행되면서 getPositionStream()이 실행되나, 위치 잡아오기 전이라 null 반환이후 위치 잡아오면 스트림에 입력되어 위/경도값 반환이게 끝인거같은데 종종 보면 저 위/경도값이 두번 찍힐때가 있더라구요..!이유가 궁금합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
구글맵 Using the Impeller rendering backend. 에러 뜨시는 분들!
Impeller라는 렌더링 백엔드가 현 앱과 호환되지 않는 경우에 발생할 수 있는 문제라고 합니다. info.plist에 <key>FLTEnableImpeller</key> <false/>추가해주시면 해결됩니다~
-
해결됨Flutter 앱 개발 실전
NotifierProvider 로 변경하고 싶어요
안녕하세요.Riverpod 상태관리에서 StateNotiferProvider 대신에 NotifierProvider를 사용하는 것을 권장하신다고 하셨는데요.StateNotifierProvider 로 작성한 코드를 NotiferProvider 로 변경하고 싶은데 잘 안되어 문의 드립니다. contactStateProvier 코드로는 정상 동작됩니다.이 코드를 NotifierProvider 로 변경해보려고 하는데 잘 안되네요.final contactStateProvider = StateNotifierProvider<ContactStateNotifier, ContactResultBase>( (ref) { final repository = ref.watch(restClientProvider); final notifier = ContactStateNotifier(restClient: repository); return notifier; }, ); class ContactStateNotifier extends StateNotifier<ContactResultBase> { final RestClient restClient; ContactStateNotifier({required this.restClient}) : super(ContactResultLoading()) { postContactList(); } postContactList() async { final resp = await restClient.postContactList( Crypto.AES_encrypt(Crypto.URLkey()), ''); state = resp; } }@RestApi(baseUrl: RetrofitURL.baseUrl) abstract class RestClient { factory RestClient(Dio dio, {String baseUrl}) = _RestClient; @POST(RetrofitURL.mLogin) @FormUrlEncoded() Future<LoginResponse> userLogin( @Field() String keyword, @Field() String userID, @Field() String password, @Field() String uID, @Field() String mfoneNO, ); @POST(RetrofitURL.contactData) @FormUrlEncoded() Future<ContactResult> postContactList( @Field() String keyword, @Field() String search, ); }final secureStorageProvider = Provider<FlutterSecureStorage>((ref) => const FlutterSecureStorage()); final dioProvider = Provider<Dio>((ref) { final dio = Dio(); final storage = ref.watch(secureStorageProvider); dio.interceptors.add(LogInterceptor()); dio.interceptors.add( CustLogInterceptor(storage: storage,), ); return dio; }); final restClientProvider = Provider<RestClient>((ref) { final dio = ref.watch(dioProvider); final repository = RestClient(dio); return repository; }); contactStateProvider 를 변경시도 해보다가 에러가 발생한 코드final contactProvider = NotifierProvider<ContactNotifier, ContactResultBase>( () { final repository = ref.watch(restClientProvider); final notifier = ContactNotifier(restClient: repository); return notifier; }, ); class ContactNotifier extends Notifier<ContactResultBase> { @override ContactResultBase build() => ContactResultLoading(); final RestClient restClient; ContactStateNotifier({required this.restClient}) { postContactList(); } postContactList() async { final resp = await restClient.postContactList( Crypto.AES_encrypt(Crypto.URLkey()), ''); state = resp; } }
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
맥북에서 에뮬, 시뮬레이터 오류들
안녕하세요, 수업 잘 듣고 있습니다.다름이 아니라 이번에는 제가 근무지 이동때문에데스크탑(윈도우)이 아닌 맥북(m1)으로 코딩을 공부하는 중입니다. 현재 가장 최신인 giraffe버전인데, 맥북에서 시뮬레이터로 코딩하면 크롬에서 스웨거도 잘 뜨고, 자동로그인도 잘되어 splashscreen페이지에서 바로 rootTab으로 넘어갑니다. 그런데 그 외의 서버에서 보내오는 이미지나 텍스트 데이터들이 전혀 뜨지 않아 무한 로딩을 합니다ㅠ 그래서 에뮬레이터를 돌려보려고 하니 파일 경로중에 알맞지 않은 문자가 있다는데, 아무리 봐도 '_'(아래바) 제외하고는 전혀 특수문자나 공백은 없습니다.. 에뮬도 안켜지고, 시뮬레이션에 데이터도 안떠서 답답하네요; 도움 구할 곳이 없어 도움 구해봅니다 ㅠ올 한해도 고생 많으셨고, 해피 크리스마스 입니다^^
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter Redirection관련 질문이 있습니다..
안녕하세요? 강사님,중급강의 섹션 13. [Go Router v7] GoRouter 이론 중 "Redirection" 파트에 관련된 질문인데요. 9_login_screen.dart 파일(LoginScreen 클래스)에 코딩된 "authState"는router.dart파일에 코딩된 "authState"와 어떤 관계(?)인지를 모르겠습니다. 무슨말인가 하면 authState 변수는 LoginScreen 클래스내에서 별도로 선언을 해주지도 않았는데도 setStat를 이용해서 값을 ture, false로 바꿀 수 있는 것도 이상하고,이렇게 LoginScreen 클래스에서 변경된 authState값이 router.dart파일에서 인식(?)이 되는것도 이상합니다. 제 질문이 조금 무식해 보이긴 한데...제 질문 의도는 파악하셨으리라 생각되어서 답변 좀 부탁드리겠습니다...
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
구글맵 지도 자체는 뜨는데 위치가 안뜨시는분들
API 및 서비스 여기서 Maps SDK for Android랑 iOS 여기서 DISABLE로 되어있어야 활성화 된겁니다! 처음에 ENABLE로 되어야 활성화인줄알고 했다가 계속 안떴었네요! 강사님 이거 자막에 달아주시면 좋을거같습니다 ㅜㅜ
-
미해결Flutter 테스트 기초
GeneratedMocks로 생성한 코드의 위치를 변경하고싶어요
GeneratedMocks로 생성한 코드들이 많아지면 복잡할 것 같아서 생성되는 파일의 위치를 자동으로 변경해주고 싶은데요,예를들면 현재 코드가 있는 디렉토리에 generated라는 디렉토리 안에다가 생성된 파일을 저장해주고싶어요.어떠한 설정을 해야할까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Didupdatewidget
didupdatewidget과 setstate의 차이점을 알려주실 수 있나요? Setstate는 stateful위젯 안에서 변수를 변경하고 싶을때 사용하는건 알겠는데, didupdatewidget은 언재 사용하는지 잘 모르겠어요ㅜㅠ
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
슬라이더를 누르고 있을때 재생안되는 방법
재생 중에 슬라이더를 조절할려고하는데슬라이더를 누른채로 동작을 안하면 영상이 자동으로 재생되어 버립니다슬라이더에서 손을 뗄떼까지 영상이 멈추게 할수있을까요인프런강의처럼요 또 한가지 질문은 videioController 는 initializeController()안에서 아래 코드로 할당이되는데videoController = VideoPlayerController.file( File(widget.video.path),이부분은 deadcode가 아닐까요if (videoController == null) { return CircularProgressIndicator();