inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

강의 따라서 프로젝트를 진행하다가 '출근 가능/불가능 확인 로직'에서 문제를 발견했습니다. 이것저것 시도하다가 드디어 해결해서 과정 공유해봅니다. 기존 코드 /// 기존의 initState() @override void initState() { super.initState(); // (아마도) 이 시점에서 오류 발생 ↓ Geolocator.getPositionStream().listen((eventPosition) { // 목적지 위치 var start = defaultLatLng; // 현재 위치 var end = LatLng(eventPosition.latitude, eventPosition.longitude); /// 거리 구하기 var distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); /// 거리가 `boundary` 내부에 들어오는지 확인 setState(() => mayChoolCheck = distance <= boundary); }); } /// 위젯 빌드 @override Widget build(BuildContext context) { /// AppBar: 제목 & 액션 버튼1 var appBar = AppBar( title: Text( '오늘도 출근', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.w700), ), centerTitle: true, // 안드로이드 설정 actions: <Widget>[ /// 원래 위치로 돌아오기 버튼 IconButton( onPressed: returnToMyLocation, icon: Icon(Icons.my_location), color: Colors.blue, ), ], ); return Scaffold( backgroundColor: Colors.white, appBar: appBar, /// 권한 요청을 위한 빌더 body: FutureBuilder<void>( future: checkPermission(), // 위치 권한 묻기 대화상자는 이 시점에 생성됨 builder: (context, snapshot) { if (snapshot.hasError) { return Center(child: Text('${snapshot.error}')); } // 이하 위젯 생성 코드... }, ), ); } /// Future<void> checkPermission() async { /// 위치 서비스 활성화 여부 var isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); /// 활성화되지 않았다면 에러 발생 (앱이 현재 위치를 사용할 수 없으므로) assert(isLocationServiceEnabled, '위치 기능을 활성화하지 않았습니다.'); /// 권한 상태 확인 var checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } /// 시뮬레이션 상 `checkedPermission`이 위치 권한 허용 상태가 아니면 에러 유도 assert( checkedPermission == LocationPermission.always || checkedPermission == LocationPermission.whileInUse, '위치 권한을 허용해주세요.', ); } 오류 추적 오류의 원인은 'User denied permissions .. device's location.' 즉, 사용자가 위치 권한을 아직 허용하지 않은 시점에 위치 권한이 필요한 함수를 호출하려고 함. [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: User denied permissions to access the device's location. E/flutter (13339): #0 GeolocatorAndroid.getPositionStream.<anonymous closure> (package:geolocator_android/src/geolocator_android.dart:201:9) E/flutter (13339): #1 Stream.handleError.<anonymous closure> (dart:async/stream.dart:961:16) E/flutter (13339): #2 HandleErrorStream.handleError (dart:async/stream_pipe.dart:303:17) ... #0 에서 이미 getPositionStream().<anonymous closure> 로 추적한 걸로 보아, Geolocator.getPositionStream() 함수 호출 시점에 오류 발생한 것이 분명함. 문제의 원인과 해결책 (일부 ChatGPT의 도움을 받음) 문제의 가장 중요한 핵심은, 처음 앱 실행 시 위치 권한 확인 로직이 완전히 끝나기 전에 위치 권한 허용 이 이루어지지 않으므로, 앱 재시작 이전까지 '사용자 현재 위치 추적 기능'이 활성화되지 않고, 추가로 관련 함수에서 오류 발생 가능성이 있음. 그러므로 checkPermission() 함수는 initState() 에서 최초 한 번만 실행하고, Geolocator.getpositionStream() 함수는 따로 분리하여 checkPermission() 이 정확히 끝난 시점에 실행되도록 로직을 변경함. 1. checkPermission() 의 리턴 타입을 Future<void> 에서 Future<bool> 로 변환 /// 위치 권한 확인 및 부여 함수 Future<bool> checkPermission() async { /// 위치 서비스 활성화 여부 var isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); assert(isLocationServiceEnabled, '위치 기능을 활성화하지 않았습니다.'); /// 권한 상태 확인 var checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } /// 위치 권한 허용 여부를 리턴 return checkedPermission == LocationPermission.always || checkedPermission == LocationPermission.whileInUse; } 2. initState() 에서 checkPermission() 과 addSubscription() 함수를 차례로 실행 ( .then() 메소드 활용) @override void initState() { super.initState(); checkPermission().then((permitted) { if (permitted) addSubscription(); }); } /// addSubscriptsion 함수 void addSubscription() { /// 리스너 함수: 출근체크 가능 여부 확인하기 Geolocator.getPositionStream().listen((eventPosition) { // 목적지 위치 var start = defaultLatLng; // 현재 위치 var end = LatLng(eventPosition.latitude, eventPosition.longitude); /// 거리 구하기 var distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); /// 거리가 `boundary` 내부에 들어오는지 확인 setState(() => mayChoolCheck = distance <= boundary); }); } 3. 위젯 재빌드 시 FutureBuilder 의 future 함수 재호출을 방지하기 위해 비동기 결과를 미리 필드로 빼놓기 ChatGPT는 이를 'Cashing Future' 라고 부른다고 함. (이 코드 부분에 중요한 로직이 하나 빠져서 방금 재수정했습니다.) /// 권한 확인 여부 리턴 값 late final Future<bool> permissionFuture; @override void initState() { super.initState(); /// checkPermission()의 결과를 값으로 저장 permissionFuture = checkPermission().then((permitted) { if (permitted) addSubscription(); return permitted; }); } /// 위젯 빌드 @override Widget build(BuildContext context) { /// AppBar: 제목 & 액션 버튼1 var appBar = AppBar(...); return Scaffold( backgroundColor: Colors.white, appBar: appBar, /// 권한 요청을 위한 빌더 body: FutureBuilder<bool>( future: permissionFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting || !snapshot.hasData) { return ColoredBox( color: Colors.blue, child: Center(child: CircularProgressIndicator()), ); } /// snapshot.data가 false 값인 경우는 사용자가 위치 권한 요청을 거부했을 때 if (snapshot.hasError || snapshot.data! == false) { return Center(child: Text('위치 권한을 허용해주세요.\n${snapshot.error}')); } /// 이하 위젯 생성 코드 ... }, ), ); } 이렇게 했을 때 앱 삭제 후 다시 빌드 했을 때, 그리고 재시작 했을 때도 정상적으로 잘 작동했습니다. 코드가 많이 훼손된 느낌도 들긴 하지만.. 나름대로 공부가 돼서 기분은 좋네요. 주저리주저리 쓰느라 정신 없었는데.. 잘 이해가 안 되거나 하고 싶은 피드백이 있다면 꼭 말씀해주세요! 아무쪼록 끝까지 읽어주셔서 감사합니다.

  • flutter
  • 클론코딩
  • geolocator
  • googlemaps
Ryu 댓글 1 좋아요 0 조회수 78

수강 기간 연장 신청 요청드립니다.

해결됨

Flutter 앱 개발 기초

기초 와 실전을 같이 듣고 있습니다. 한번 더 듣고 싶어서 기간 연장을 요청드립니다.

  • flutter
썬슈 댓글 2 좋아요 1 조회수 79

수강기간 연장 부탁드립니다.

해결됨

Flutter 앱 개발 기초

오픈 카카오톡 으로 문의주시면 더 빠르게 답변 받으실 수 있어요 🙂 수강기간 연장 부탁드립니다.

  • flutter
devyeon22 댓글 2 좋아요 1 조회수 87

수강기간 연장 부탁드립니다.

해결됨

Flutter 앱 개발 기초

오픈 카카오톡 으로 문의주시면 더 빠르게 답변 받으실 수 있어요 🙂 수강기간 연장 부탁드립니다.

  • flutter
devyeon22 댓글 2 좋아요 1 조회수 90

StatefulWidget 실습 에러가 발생합니다.[해결완료]

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 오타가 있었네요 ^^;; 해결 되었습니다. 안녕하세요. StatefulWidget 생성해보기 강의의 코드를 그대로 작성했는데요. 첨부 사진과 같은 에러가 발생합니다. 코드 이상은 없는듯 한데, 저장하니 에러가 발생합니다.

  • flutter
  • 클론코딩
rimmomos 댓글 1 좋아요 0 조회수 83

Video Player 프로젝트에 대한 추가 질문

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

선생님 강의 너무 잘 듣고 있습니다. video_player 프로젝트 관련 내용 모두 확인했고, 여기에 하나만 간단하게 비디오에서 나가기 버튼 을 추가해보았습니다. 일단 제가 작성해본 코드부터 공유하겠습니다. 테스트 상 로고화면으로는 잘 돌아갑니다. _VideoPlayerState 의 dispose() 함수도 정상적으로 실행돼요. 다만 로직이 실제 앱에서 실행되어도 충분히 괜찮은 로직일지, 혹은 더 안전한 방법이나 기타 필요한 수정사항이 있다면 알려주시면 감사하겠습니다. _HomeScreenState 내부 class _HomeScreenState extends State<HomeScreen> { // bool showVideo = false; XFile? video; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black87, body: video == null ? _VideoSelector(onLogoTap: openPicker) : _VideoPlayer( video: video!, onImageIconPressed: openPicker, onExitIconPressed: exitPlayer, // 나가기 버튼 함수 ), ); } void openPicker() async { // setState(() => showVideo = true); /// ImageSource.gallary: 사진 앱에 저장된 이미지/비디오 파일 선택 /// ImageSource.camera: 디바이스가 즉시 촬영한 이미지/비디오 파일 선택 const source = ImageSource.gallery; /// pickVideo(): 사용자 비디오 파일을 선택 final picked = await ImagePicker().pickVideo(source: source); // print(picked); setState(() => video = picked); } /// ↓↓ 여기에 비디오에서 나가기 로직 추가 void exitPlayer() { setState(() { // print('info: exitIconButton 클릭'); video = null; }); } } _VideoPlayerState 내부 class _VideoPlayerState extends State<_VideoPlayer> { late VideoPlayerController _videoPlayerController; bool showButton = true; // ... /// 위젯 상태 제거 @override void dispose() { _videoPlayerController.dispose(); print('info: 비디오 플레이어 종료 중..'); super.dispose(); } @override Widget build(BuildContext context) { final VideoPlayerValue videoPlayer = _videoPlayerController.value; // final position = videoPlayer.position; // final duration = videoPlayer.duration; return Center( child: AspectRatio( aspectRatio: videoPlayer.aspectRatio, child: GestureDetector( onTap: () => setState(() => showButton = !showButton), child: Stack( children: <Widget>[ VideoPlayer(_videoPlayerController), /// 영상 화면 커버 if (showButton) Container( width: double.infinity, height: double.infinity, color: Colors.black.withAlpha(128), ), /// 재생/중지와 뒤로&앞으로 버튼 if (showButton) _PlayButton( isPlaying: videoPlayer.isPlaying, onReversePressed: onReversePressed, onPlayPressed: onPlayPressed, onForwardPressed: onForwardPressed, ), /// 하단 슬라이더 if (showButton) _BottomSlider( position: videoPlayer.position, duration: videoPlayer.duration, onSliderMoved: onSliderMoved, ), /// 화면 상단 버튼 if (showButton) _TopButtons( // ← 여기를 2개의 버튼으로 확장 onExitPressed: widget.onExitIconPressed, onImagePressed: widget.onImageIconPressed, ), ], ), ), ), ); } _TopButtons 내부 class _TopButtons extends StatelessWidget { final VoidCallback onImagePressed; final VoidCallback onExitPressed; const _TopButtons({ required this.onExitPressed, required this.onImagePressed, }); @override Widget build(BuildContext context) { return Positioned( left: 4, right: 4, top: 0, // Row로 감싸고 왼쪽에 '나가기' 버튼 추가 child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <IconButton>[ // 나가기 버튼 IconButton( onPressed: onExitPressed, icon: Icon(Icons.chevron_left, color: Colors.white), ), // 다른 영상 선택 버튼 IconButton( onPressed: onImagePressed, icon: Icon(Icons.photo_camera_back, color: Colors.white), ), ], ), ); } }

  • flutter
  • 클론코딩
  • video_player
Ryu 댓글 0 좋아요 0 조회수 72

lovable cloud 에서 카카오 로그인이 지원이 안됩니다.

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

[진도] 실용적인 도구 만들기 1: 개인 비용 관리 앱 (Supabase, 로그인 기능) [질문] 강의에서는 supabase 를 사용해서 카카오 로그인을 추가 했으나 현재 lovable 에서는 업데이트가 되어서 ai 로 명령시 supabase 를 추가로 연결 하지 않고 자동 Lovable Cloud 기능을 탑재합니다. 이경우 카카오 기능 추가를 명령하면 아래와 같이 지원이 안된다고 나옵니다. 그럼 supabase 추가로 연결 해야하나요? 카카오 로그인은 Lovable Cloud에서 기본 지원하지 않습니다. 현재 사용 가능한 소셜 로그인은 다음과 같습니다: 지원되는 소셜 로그인: Google ✅ (현재 활성화됨) GitHub Facebook Apple Discord Twitter Slack Spotify 카카오 로그인을 원하시면 커스텀 OAuth 구현이나 카카오 REST API를 직접 연동해야 하는데, 이는 복잡한 작업입니다. 추천 방안: 구글 로그인 사용 (대부분의 한국 사용자가 구글 계정 보유) 이메일/비밀번호 로그인 사용 카카오 로그인은 Lovable Cloud에서 기본 지원하지 않습니다. 현재 사용 가능한 소셜 로그인은 다음과 같습니다: 지원되는 소셜 로그인: Google ✅ (현재 활성화됨) GitHub Facebook Apple Discord Twitter Slack Spotify 카카오 로그인을 원하시면 커스텀 OAuth 구현이나 카카오 REST API를 직접 연동해야 하는데, 이는 복잡한 작업입니다. 추천 방안: 구글 로그인 사용 (대부분의 한국 사용자가 구글 계정 보유) 이메일/비밀번호 로그인 사용

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
winwin 댓글 2 좋아요 0 조회수 183

Google Search Console에 Sitemaps

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

Google Search Console에 Sitemaps로 이동하여 sitemap.xml, rss.xml, robots.txt를 제출하였습니다. robots.txt는 오류 발생, rss.xml, sitemap.xml은 가져올 수 없음 이라는 상태가 발생하였는데 GPT나 Cursor에게도 물어봤는데 같은 에러 발생하였습니다.어떻게 해결하면 될까요? 네이버 서치 어드바이저에는 등록을 완료하였는데 특이사항은 없습니다.

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
pcr123 댓글 2 좋아요 0 조회수 63

수강기간 연장 부탁드립니다.

해결됨

Flutter 앱 개발 실전

안녕하세요 수강 기간 연장 부탁드립니다. 좋은 하루 보내세요.

  • flutter
pray 댓글 3 좋아요 1 조회수 82

Row위젯이나 column위젯의 위치는 누가 정하나요??

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

Row위젯이나 column위젯의 위치는 누가 정하나요?? Container위젯은 자식위젯의 위치를 정하지 않는다고 하셨는데 오늘 코드를 보면 부모위젯을 container로 가지는 row위젯은 container위젯의 가로방향에 대해 중앙에 위치하지 않나요?? 이 위치는 누가 정한 간가요?? 그리고 column row는 항상 부모위젯에 대해 중앙에 위치하나요??

  • flutter
  • 클론코딩
kimsangwon29960631 댓글 1 좋아요 0 조회수 59

geolocator 오류때문에 개발진행이 불가능입니다

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM 안녕하세요 geolocator강의 시청 후 화면에 현재 제가 위치한 gps 위치를 띄우려고 했는데 아래와 같은 오류가 떠서 며칠째 해결을 못하고 있습니다. geolocator관련 기능을 아예 사용하지 못하여 개발에 진행이 안되는 상황입니다! gps는 애뮬레이터 내부에 위치 설정은 해준 상태입니다... 어떻게 해결하면 되는지 원격요청 드려봅니다! +왜인지 geolocator_android-5.0.2가 계속적으로 선택됩니다.. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • flutter
  • 클론코딩
수빈 댓글 1 좋아요 0 조회수 90

커스텀액션 maybeCreateUser 오류가 납니다.

미해결

[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!

전 질문 내용 검색해 보고 해도 안되는데요.. 확인 좀 부탁 드립니다.

  • flutter
  • no-code
  • supabase
  • flutterflow
pchopin 댓글 1 좋아요 1 조회수 87

API 관련 이슈

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM 안녕하세요. 미세먼지 강의 듣는 중인데 9월에 발생한 대전 국정자원 관리원 화재의 여파로 10월 22일부터 공공데이터 포털 내에 일부 api 기능이 정상적으로 동작하지 않는 상태이며, 언제 해결될지 알 수 없는 상태라고 합니다. api 호출 없이 강의를 진행해도 될지 문의 드립니다.

  • flutter
  • 클론코딩
sinji107 댓글 2 좋아요 0 조회수 112

Lovabe - supabese 연동이 노베이스 비개발자에겐 너무 어렵습니다.

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

💬 좋은 질문 예시 [진도] 1주차 5강 웹사이트 만들기 [질문] Lovable 에 자체 클라우드가 생기면서 supabase를 연동하기 힘들어 졌습니다. Lovable유료결제 까지 하면서 원인을 찾아보려고 했는데 일주일 동안 찾지 못 했습니다. 전에 같은 질문을 하신분의 답변에 다른 분의 영상을 봤는데도, 그것으로는 해결이 되지 않는 상황입니다. 아예 베이스가 없기 때문에 supabase가 뭔지도 모르는 상황이고 이 둘을 어떻게 연결해야 할지도 모르는 상황입니다. 현재 바뀐 상황을 들여다 본 후 답변 주셨으면 좋겠습니다. 혹은, supabase 연동 없이 Lovable 자체 클라우드를 활용해서 강의를 진행해도 괜찮을지 알려주시면 supabese 없이 Lovable 클라우드로 진행해 보겠습니다. 제가 변화에 대처하질 못하는 상황이지만, 항상 질 높은 강의 감사드립니다.

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
멘토폴메이커 댓글 3 좋아요 0 조회수 279

수강기간 연장 부탁 드립니다.^^

해결됨

Flutter 앱 개발 기초

수강기간 연장 부탁 드립니다. 감사합니다. 좋은 하루 보내세요~

  • flutter
pray 댓글 3 좋아요 1 조회수 98

part 'restaurant_model.g.dart';

미해결

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

flutter pub run build_runner build Deprecated. Use dart run instead. Building package executable... (1.6s) Built build_runner:build_runner. Built with build_runner/jit in 0s; wrote 0 outputs. 수정 방법을 부탁드립니다?

  • flutter
  • 하이브리드-앱
dw810414 댓글 1 좋아요 0 조회수 107

xcode 오류

해결됨

비전공자 혼자서 하루 만에 수익화 앱 출시하기

애플계정이 있는데 xcode에서 계속 'Communication with Apple failed'오류가나는데 업데이트하고 계정을 다시 등록해도 해결이 안되는데 해결방법 있을까요?

  • flutter
  • 모바일-디자인
  • cursor
  • supabase
  • 수익화
hongki235 댓글 2 좋아요 0 조회수 246

코드에서

해결됨

비전공자 혼자서 하루 만에 수익화 앱 출시하기

강의 잘 보고 있습니다! 좋은 강의 만들어 주셔서 감사해요 강의 보다가 그냥 좀 어색한 부분이 있는거 같아서 공유드립니다~ 65. Supabase로 공지사항 다이얼로그 띄우기 (2) 수업중 아래 파일의 코드에서 하나 확인 부탁드립니다. lib/widget/announcement_dialog.dart 3번의 prefs.setStringList 가 2번의 if 문 안으로 들어가는게 맞을거 같아요. static Future<void> _setViewed(int announcementId) async { final prefs = await SharedPreferences.getInstance(); // 1. 기존의 공지사항 아이디를 가져온다. final viewedIds = prefs.getStringList(_viewedAnnouncementsKey) ?? []; // 2. 가져온 아이디에 포함여부 확인. if (!viewedIds.contains(announcementId.toString())) { viewedIds.add(announcementId.toString()); } // 3. 포함되어 있지 않다면 새로 추가한다. await prefs.setStringList(_viewedAnnouncementsKey, viewedIds); }

  • flutter
  • 모바일-디자인
  • cursor
  • supabase
  • 수익화
윌던 댓글 2 좋아요 0 조회수 93

감사합니다!!

미해결

개발하는 정대리 다트 기초 문법

페이지 이동 뿐만 아니라 데이터 주고받는거랑 스크롤 이벤트 감지하는거, 스택, 스낵바 등등 현업에서 필요한 유용한 내용 많이 알려주셔서 정말 도움 되는 강의였습니다! 따라하면서 듣느라 1시간짜리 강의를 거의 4시간 넘게 들었네요 ㅎㅎㅎ 그만큼 알차고 유익했습니다!! 진짜 바이브 코딩 말고 이렇게 공식문서 보면서 제대로 이해하고 코딩하고 싶었는데 정말 도움됐습니다!! GPT 도움받았던 코드 다 갈아엎으러 가야겠습니다 ㅎㅎ 감사합니다!!

  • flutter
  • dart
jhc03032 댓글 2 좋아요 0 조회수 95

인기 태그

인프런 TOP Writers

주간 인기글