묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
플러터 크롤링 질문 있습니다.
import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart' as http; import 'package:map/main.dart'; import 'package:html/dom.dart' as dom; import 'package:html/parser.dart' as parser; void main() async{ var uri = Uri.parse("https://maps.google.com/?cid=9824313016117606097"); http.Response response = await http.get(uri); dom.Document document = parser.parse(response.body); print(document.outerHtml); }이런 식으로 파싱을 하는데 나오는 결과물이null,null,[[\"VENUS_UGCS_REFERENCE\",\"CIHM0ogKEICAgID4zYaWIg||\",\"1\"],[\"UGCS_REFERENCE\",\"CIHM0ogKEICAgICo0KaMYQ||\",\"1\"]]],null,null,null,null,null,null,null,[\"0\",\"-8622431057591945519\"]],[\"AF1QipM0NUuMNxT19uXB5qiTmGjxV2G0GhA2ttjxU20Y\",null,null,null,null,null,[\"https://lh5.googleusercontent.com/p/AF1QipM0NUuMNxT19uXB5qiTmGjxV2G0GhA2ttjxU20Y\\u003dw150-h150-k-no-p\"],null,[[null,127.12812502658495,37.6524851777755],null,null,75],\"Qz5OZav0GvfK1e8P2t-VoAQ\",\"0ahUKEwjrocKs0rmCAxV3ZfUHHdpvBUQQzCcIxgEoBg\",[\"//www.google.com/local/imagery/report/?cb_client\\u003dmaps_sv이런식으로 나오는데 어디 부분이 잘못된건지 모르겠어요
-
해결됨Flutter로 SNS 앱 만들기
인증 메일 전송 / firebase storage에 프로필 이미지 저장 강의 질문
안녕하세요. 강의 잘 듣고 있습니다.인증 메일 전송 / firebase storage에 프로필 이미지 저장 강의에 대해서 질문이 있습니다.firebase storage에 파일이 잘 저장되기는 했으나, 이미지 파일로 저장되지 않았습니다.왜 이렇게 되는지 잘 모르겠습니다.바쁘실텐데 질문 읽어주셔서 감사합니다.
-
해결됨Flutter로 SNS 앱 만들기
상태관리 등록 후, 회원 가입 테스트 부분 에러
안녕하세요.좋은 강의 잘 듣고 있습니다. 다름이 아니라, 상태관리 등록 후, 회원 가입 테스트 부분에서 에러가 나서 질문 드립니다.package:firebase_auth_platform_interface/src/auth_provider.dartimport 되어 있다고 해서 지우려고 찾아 봤는데 위의 저런 package는 import 되어 있지 않습니다. 무슨 문제인지 모르겠습니다. 바쁘실 텐데 질문 읽어주셔서 감사합니다.
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
랜덤 숫자 생성기 섹션 내 '조건에 맞게 Padding 적용하기' 내용 중 궁금한게 있습니다.
안녕하세요. 좋은 강의 감사합니다!강의 내용 중 구현방향에 대해 궁금한 점이 있어 질문 드립니다. 랜덤 넘버를 초기화 하는 배열에서(randomNumbers) 조건에 따라 padding을 지정하는 과정의 코드가 다음과 같이 구현이 되어 있는데요.padding: EdgeInsets.only(bottom: x.key == 2 ? 0 : 16.0), 만약 x.key를 직접 참조 하는게 아닌 randomNumbers의 length를 가져와서 조건을 거는 것도 유지보수 상 좋은 코드인가요?padding: EdgeInsets.only(bottom: x.key == randomNumbers.length - 1 ? 0 : 16.0),
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
공부하다 궁금한 것이 있어 여쭤봅니다.
지금 저의 목표는 혼자서 앱하나를 온전히 만들어 출시, 유지보수까지 하는 건데요, 추천을 받고 중급 강의까지 여러번 반복하며 코드들을 연습하고 있습니다. 그런데 보통 개발자 1명이 앱을 제작할때 순서가 어떻게 될까요?중급강의 처럼 api, 백엔드를 먼저 설계해놓은 후 프런트를 개발 할까요? 막연하게 공부하기 전에는 프런트를 먼저 구현을 다 해놓은 후에 백엔드를 연결하는 것이 아닐까 했는데, 중급을 공부하다보니 그런것도 아닌것 같아서요, 실제 앱 개발에서는 어떤 방식과 순서로 개발하는지 궁금합니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
버전 문제
예제를 내려받아서 진행하는데버전 오류가 너무 많이 생기거든요전 안드로이드스튜디오(지라프), 플러터(3.13.8) 모두 최신 버전인데요,> Could not resolve all files for configuration ':classpath'. > Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.2. Searched in the following locations: 지금도 이렇게 떠서build gradle 파일에서 ext.kotlin_version = '1.7.2'classpath 'com.android.tools.build:gradle:8.1.3'로 바꾸고 gradle-wrapper.properties에서 distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip바꿔주었는데 오류가 계속 나네요.저렇게 바꾼 근거는 https://developer.android.com/studio/releases/gradle-plugin?hl=ko여기 보고 했고요.. 어떻게 해결해야할지요? 그리고 앞으로 버전 문제에 시간 너무 뺏기지 않으려면역시 fvm 으로 예제를 여는게 답일까요?꼭 코팩 강의의 문제가 아니라 앞으로도 발생할 문제라방향을 잡으려고 여쭈어봅니다...
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
섹션17 에러표현에서...
섹션17에서 스트림설명에서 에러를 표현할때I값이 0,1,2,3,4,5 가 되었을때 에러 표현 되는것이 아닌가요? 이해를 못했서요. 설명부탁합니다
-
해결됨[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
toSet(), Set.of(), Set.from() 차이점
toSet(), Set.of(), Set.from() 차이점이 있나요?
-
미해결Flutter 초입문 왕초보편
구글 맵 플랫폼
구글맵플랫폼 사용시 결제 계정을 등록하라고 합니다.무료로 사용하는 방법이 있는 지 문의 드립니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
u and i 예제 에러
네 핫릴로드 할스타트 활성화가 안되는걸 보면 에러는 맞는듯합니다Launching lib\main.dart on Android SDK built for x86 in debug mode... Running Gradle task 'assembleDebug'... Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01 Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:processDebugMainManifest'. > Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @3dc86b6d * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 4s Exception: Gradle task assembleDebug failed with exit code 1위가 에러메시지이고요유앤아이 만난지 몇일 예제와 똑같이 작성한듯 한데..메인다트import 'package:flutter/material.dart'; import 'package:u_and_i/screen/home_screen.dart'; void main() { runApp( MaterialApp( home: HomeScreen(), ), ); } 홈스크린import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Text( 'Home Screen', ), ), ); } } ㅠㅜㅜ코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
splash 이미지 질문
FutureOr<String?> redirectLogic(BuildContext context,GoRouterState state) { final UserModelBase? user = ref.read(userMeProvider); //로그인 중 final logginIn = state.location == '/login'; //회원가입 페이지 이동중인지 final joinIn = state.location == '/login/join'; //유저 정보가 없는데 //로그인중이면 그대로 로그인 페이지에 두고 //만약 로그인중이 아니라면 로그인 페이지로 이동 if(user == null && !joinIn){ return logginIn ? null : '/login'; } // //유저 정보가 없는데 // //로그인중이면 그대로 로그인 페이지에 두고 // //만약 로그인중이 아니라면 로그인 페이지로 이동 if(user is UserModelLoading){ return logginIn ? null : '/login'; } // // //user가 null이 아님 // // //UserModel // //사용자 정보가 있는상태면 // //로그인 중이거나 현재 위치가 SplashScreen이면 // //홈으로 이동 if(user is UserModel){ return logginIn || state.location == '/splash' ? '/' : null; } return null; }위와 같은 redirect 로직에서 처음final UserModelBase? user = ref.read(userMeProvider); 위와 같은 코드를 실행 할 떄 final userMeProvider = StateNotifierProvider<UserMeStateNotifier,UserModelBase?>((ref) { return UserMeStateNotifier(); }); class UserMeStateNotifier extends StateNotifier<UserModelBase?>{ UserMeStateNotifier() : super(UserModelLoading()) { get(); } Future<void> get() async{ //spalsh화면을 2초 보여주기 위한 스탑워치 await Future.delayed(Duration(milliseconds: 1800)); state = null; return; } Future<void> getMe(UserModel userModel) async { state = userModel; } }위의 코드에서 get 함수를 거치게 되는데 await를 걸어둔 delayed 로직이 다 끝나기도 전에 return을 해버려 splash 이미지가 다 뜨기도전에 로그인 화면으로 넘어갑니다 해결방법이 있을까요
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
그래들버전
만난지 며칠 예제를 내려받아 기본 코드를 작성하던 중Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01에러가 나 찾아보니 gradle 버전 문제인거같았습니다. android.app.build.grade에서 minSdkVersion flutter.minSdkVersion에 버전 숫자를 적어보려고 했으나 어디서 이 버전을 확인할 수 있는지 모르겠어요. 에러 나올때 버전이 뭐다 라고 나오지도 않기 때문에.loca.properties 가봐도flutter.versionName=1.0.0 flutter.versionCode=1이 정보로 뭘 어떻게 해야할지 모르겠습니다ㅜ코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GStateNotifier로 선언했는데, watch할때, provider명은 왜 다른가요?
class명을GStateNotifier로 만들었는데, 실제 사용할때는gStateNotifierProvider로 앞에 G대문자가 소문자가 되는 이유가 있나요? 강의 설명엔 뭘 써도 된다라고 하셨는데, 어떤 이름으로 쓰든, gStateNotifierProvider가 된다는것인지.이 부분이 명확하지 않아서 문의 드립니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
curve: Curves.linear가 동작을 안 합니다.
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State<HomeScreen> createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { Timer? timer; PageController controller = PageController( initialPage: 0, ); @override void initState() { super.initState(); timer = Timer.periodic(Duration(seconds: 4), (timer) { int currentPage = controller.page!.toInt(); int nextPage = currentPage + 1; if (nextPage > 4) { nextPage = 0; } controller.animateToPage( nextPage, duration: Duration(microseconds: 400), curve: Curves.linear ); }); } @override void dispose() { if (timer != null) { timer!.cancel(); } controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { // 상태바 색 변경 SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark); return Scaffold( // 스크롤 body: PageView( controller: controller, children: [1, 2, 3, 4, 5] .map( (e) => Image.asset( 'asset/img/image_$e.jpeg', fit: BoxFit.cover, ), ) .toList(), ), ); } } 전체 코드이고 controller.animateToPage 부분입니다. Curves.linear 대신 다른 여러 효과들을 적용해봐도어떠한 애니메이션 없이 모두 화면이 깜빡이고 그 후 다음 사진이 나오는 방식으로만 동작합니다. 애니메이션이 적용이 안 되네요 ㅠㅠ 윈도우에 안드로이드 시뮬, 실기기(갤럭시) 둘 다 테스트 해봐도 동일해서 코드 문제인가 싶은데 따로 강의 내용이랑 다르게 작성한 것 같지는 않습니다.검색해도 딱히 나오는 건 없어서 질문 드립니다 ㅠㅠ
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
버전 차이가..
안녕하세요, 강의를 듣는데예전 영상이라 그런지 스튜디오에서 명령어를 입력할 때마다코드가 너~~~~무 다르게 나와서 이걸 고친다고 시간을 다 잡아먹습니다.. 이따금 이걸 해결하는게 좋은 개발자가 된다고 하는 글을 봤는데, 취미로 배우는 직장인이라 큰 관심 없습니다. 예를들어 stful 위젯을 생성하는데 생기는 클래스들이 너무다른 모양으로 나와서 당황하는 와중에강의는 아주 빠르게 넘어가서 이건 뭐지.. 하는 거죠. 혹시 버전을 업데이트해서 올려주실 생각은 없으실까요?아니면, 플러그인 등으로 이런 작성 에러들을잡는 방법이 없을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
코팩님 카톡 보고 질문 드립니다 (키키아빠) 로그인 로직 관련입니다.
https://creative-mulberry-987.notion.site/d7d8c7b88276435cb205429289974c6d?pvs=4 코팩님 키키아빠입니다. 코드 올려 두었습니다. 인프런 게시판 이용이 미숙해서 노션에 올렸습니다.
-
미해결Flutter 중급 1편 - 클린 아키텍처
32강 질문 있습니다.
Navigator.push 에서 리턴받는 불리언값은 어떻게 정해지는것인가요?editnote init()에서 navigator.pop(context, true)에서 넘겨준 트루를 리턴받는 것인가요? 저는 이렇게 이해 했습니다.노트스크린(홈)에서 화면 푸시를 하면 edit페이지로 이동하고스트림으로 save 노트 이벤트를 상시 대기하다가 이벤트가 발생하면 true값과 동시에 pop을 하고 노트스크린(홈)에서 isSave에 pop에서 넘겨준 true를 리턴받고 if(isSaved !=null && isSaved){ viewModel.onEvent(NotesEvent.loadNotes()); } 을 수행하여 홈을 리로드하여 새로운 데이터를 받아주는것이라고 생각했습니다. 이게 맞을까요?이렇게되면 홈에서의 await Navigator.push()는 다음페이지에서 넘어갔다가 pop되는 것을 기다리는 await인가요? 아니면 무엇인가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
RestaurantRepository 생성에서 (String baseUrl} 변경
factory RestaurantRepository(Dio dio, {String url}) = _RestaurantRepository;이런식으로 baseUrl 대신 url을 넣으면, 에러가 발생하는데요.g.dart 파일을 지우고 다시 pub run을 해봐도, 동일하게 baseUrl로 생성이 되더라구요. 그러면서, 에러가 나오는데, 변경이 안되는 이유가 있나요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
저는 파란색 동그라미 안으로 안들어 옵니다.
파란색 동그라미 안쪽으로 안들어 옵니다. 강사분꺼와 달라서
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[Restaurant Pagination 요청해보기]에서 토큰값을 갱신하게 넣었는데도, 401에러가 나옵니다
void checkToken() async { final refreshToken = await storage.read(key: REFRESH_TOKEN_KEY); final accessToken = await storage.read(key: ACCESS_TOKEN_KEY); final dio = Dio(); try { final resp = await dio.post('http://$ip/auth/token', options: Options( headers: { 'authorization': 'Bearer $refreshToken', }, ), ); await storage.write(key: ACCESS_TOKEN_KEY, value: resp.data['accessToken']); Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( builder: (_) => RootTab(), ), (route) => false, ); } catch(e) { Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( builder: (_) => LoginScreen(), ), (route) => false, ); } }[Restaurant Pagination 요청해보기] 내용 중에accessToken이 갱신이 안되서 401 에러가 난다고 하시고, 갱신하는 코드를 넣어서 잘 된다고 하셨는데, 저는 여전히 401 에러가 나옵니다.DioError [DioErrorType.response]: Http status error [401] 에러가 자세하게 나오질 않아서 무슨 에러인지 알수가 없네요. 어떤 문제인가요?