[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요? 캘린더 프로젝트 관련 질문사항이 있습니다. 먼저 drift 패키지를 사용하기 위해 객체를 선언했습니다. - CategoryColors, Schedules 모두 뒤에 s가 붙은 이름으로 테이블을 사용하기 위한 ORM 객체를 선언한것 까지는 알겠는데요. (s 붙이는게 필수?) drift가 자동 생성한 소스에 보면 s가 빠진 클래스들이 생성이 되어 있습니다. - CategoryColor, Schedule 여기에 궁금함이 있습니다. 처음에 객체 선언에 반드시 s를 붙여야 하는 건지? 붙이지 않는다면 어떤 클래스 이름으로 자동 생성이 되는건지? Schedules 클래스 선언 -> (자동생성) Schedule 객체 s 가 빠진 원리를 알고 싶습니다.
flutter doctor 를 입력하라는 내용을 보고 따라 쳤는데 아래와 같은 문제가 발생하여 질문드립니다. flutter : 'flutter' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + flutter doctor + ~~~~~~~ + CategoryInfo : ObjectNotFound: (flutter:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
안녕하세요 저는 강사님 강의로 공부하고 파이썬으로 코테를 준비하고 있습니다. 저와 같은 상황에 계신분들과 공유하고 싶어 글을 올립니다. 파이썬 풀이에서 부족한 부분 알려주시면 수정하겠습니다.~ import sys sys.setrecursionlimit(10 ** 6) N, M = map(int, sys.stdin.readline().split()) MAX = 1000 + 10 graph = [[False for in range(MAX)] for in range(MAX)] visited = [False for in range(MAX)] for in range(M): x, y = map(int, sys.stdin.readline().split()) graph[x][y] = True graph[y][x] = True def dfs(idx): visited[idx] = True for j in range(1, N + 1): if not visited[j] and graph[idx][j]: dfs(j) cnt = 0 for i in range(1, N + 1): if not visited[i]: dfs(i) cnt += 1 print(cnt)
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코드를 작성하던 중 안드로이드 스튜디오에서 Navigator.of(context).pop() 을 Navigator.pop() 으로 자동완성 시켜주어 모르고 쓰던 도중 보니 Navigator.pop(true)라고 쓰면 add cast를 하라며 Navigator.pop(true as BuildContext)라고 고쳐주더군요. 찾아보니 Navigator.pop(true as BuildContext)와 Navigator.of(context).pop(true)는 완전히 같은 기능을 하는 것 같은데 공부가 필요한 내용일까요??
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요 선생님 해당 강의내용에서 당겨서 새로고침하는 리프레쉬 인디케이터를 사용하면 상단에 로딩바가 하나 도는데 다시 화면이 리프레쉬되면서 화면 중앙에 로딩바가 도는 것이 2중 로딩으로 보여지는 것 같아서 pagination_list_view.dart 파일내 RefreshIndicator( onRefresh: () async { ref.read(widget.provider.notifier).paginate(forceRefetch: true); }, 위 코드의 forceRefetch: true 를 삭제하는게 더 낫겠다는 판단에 RefreshIndicator( onRefresh: () async { ref.read(widget.provider.notifier).paginate(); }, 해당코드를 사용 하려 하는데요 근데 이렇게 포스리펫치를 삭제 하게 되면 [홈] 메뉴와 [음식] 메뉴에서는 정상적으로 REQ RES 포스트 겟 요청이 가는데 [주문] 메뉴에서는 아무런 응답이 없어서 새로고침이 되지 않습니다. 현재 강의에서 장바구니에서 주문완료를 눌러도 장바구니 내용이 비워지지 않는 문제와 로딩이 이중으로 되는 문제를 확인했는데 장바구니 부분은 주문완료버튼을 눌렀을때 주문내용을 비워버리면 해결 될 것 같다는 개념이라도 잡히는데 포스리펫치 부분은 어디서 손을 대야 될지 아직 개념이 잡히지 않는데요 홈메뉴와 음식메뉴에서는 forceRefetch:true가 아니더라도 서버에서 자료를 받는 로직이 있는데 주문메뉴에서는 앱에서 발생된 주문건에 대해서만 받아오는 로직이라 그게 아닌가? 싶은 생각만 듭니다. 1.앱을 처음 로딩해서 주문메뉴에 들어갔을때 -> 로딩이 강제로 되니 새로운 주문건이 화면에 표시됨 2.포스리팻치 true일경우 -> 강제 새로고침기능이 작동하니 새로운 주문건이 화면에 표시됨 3.포스리팻치를 삭제하고 리프레쉬인디게이터만 사용할경우 -> 새로운 주문건이 표시가 안됨. 어떤 부분을 확인하거나 살펴보는게 좋을지 힌트를 주셨으면 좋겠습니다. 만일 forceRefetch:true를 꼭 사용해야 되는 설계라면 로딩바 대신에 스켈레톤을 사용한다면 2중 로딩느낌이 안날 것 같다는 생각이 듭니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
아래 소스에서 질문 있는데요. final query = select(schedules).join([ innerJoin(categoryColors, categoryColors.id.equalsExp(schedules.colorId)) ]); query.where(schedules.date.equals(date)); return query.watch().map( (rows) => rows .map((row) => ScheduleWithColor( schedule: row.readTable(schedules), categoryColor: row.readTable(categoryColors), )) .toList(), ); 보통 테이블 조인을 하게 되면 SELECT a.*, b.* FROM schedule a, categorycolor b WHERE a.id = b.id; 이렇게 되어야 정상일텐데, 왜 drift 문법의 select 에서는 select(schedules)로 표현이 되었을까요?
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
AppBar 위젯 코드를 정리하실 때, stless위젯을 따로 만들지 않고 함수로 가져오셨는데 위젯을 함수로 가져올지 Expnade 위젯처럼 stless위젯으로 가져오는지 어떤 기준으로 나뉘는건가요? class AppBar extends StatelessWidget { const AppBar({super.key}); @override Widget build(BuildContext context) { return AppBar( title: Text( "App name", style: TextStyle( color: Colors.blueAccent, ), ), backgroundColor: Colors.white, ); } } 또한 AppBar를 Stless 위젯으로 만들어보려고 했을때 title 부분과 backgroundColor 부분에서 오류가 나는데 그 이유도 알 수 있을까요?
만약에 키나 몸무게 필드에 숫자가 아닌 값을 입력할 경우 '숫자를 입력하세요'라고 출력하고 싶은데 어떻게 하면 좋을까요? 그리고 입력된 숫자가 특정 범위를 넘길 경우 제한 하는 방법도 궁금합니다. 뭔가 아래와 같은 느낌으로 하고싶은데 방법이 궁금합니다. TextFormField( decoration: const InputDecoration( border: OutlineInputBorder(), hintText: '키', ), keyboardType: TextInputType.number, validator: (value){ if(value == null || value.isEmpty){ return '키를 입력하세요'; }else if(value의 타입 != TextInputType.number){ return '숫자를 입력하세요.'; }else if(value > 1000){ return '정상적인 값이 아닙니다.'; } return null; }, ),
완전탐색 강의 마지막 문제 1090번 문제 풀이 방법에 의문이 생겨서 질문 올려봅니다. 강의에서는 우리의 집 중에서 한 곳에 모이면 된다고 풀이를 하셨는데, 예시에 나온 4 15 14 15 16 14 15 16 15 4명이 모이기 위한 최적의 장소는 (15,15)입니다. 백준에서도 이것이 정답 좌표이고. 그래서 혹시 제가 1번 2번 3번 아이디어를 이해하는데에서 잘못 이해한 부분이 있을까 싶어 질문을 올립니다. (15 14) (15 16) (14 15) (16 15) 중에 하나에 모인다는 말이 아닌것인가요?
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Maps SDK for android --> enable Maps SDK for iOS --> enable 뭐가 문제일까요? E/Google Maps Android API(10009): Authorization failure. Please see https://developers.google.com/maps/documentation/android-api/start for how to correctly set up the map. E/Google Maps Android API(10009): In the Google Developer Console ( https://console.developers.google.com ) E/Google Maps Android API(10009): Ensure that the "Google Maps Android API v2" is enabled. E/Google Maps Android API(10009): Ensure that the following Android Key exists:
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 코드팩토리 디스코드 https://bit.ly/3HzRzUM Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 이런식으로 보이는데 이건 문제 없는건가요..?