묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Go_router 최신 버전 사용시 에러
final routerProvider = Provider<GoRouter>((ref) { final provider = ref.watch(authProvider); return GoRouter( initialLocation: '/splash', routes: provider.routes, redirect: provider.redirectLogic, ); }); flutter refreshListenable 은 v7에서 없던 내용 같은데 어떻게 처리하면 될까요?그리고 redirect:provider.redirectLogic 에서에러가 납니다. redirect: (context, state){ return provider.redirectLogic(state); }, 이렇게 수정해주면 될까요? 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Restaurant Card 컴포넌트 내의 factory에 대한 질문
factory RestaurantCard.fromModel({ required RestaurantModel model }) { return RestaurantCard(image: image, name: name, deliveryFee: deliveryFee, deliveryTime: deliveryTime, ratingsCount: ratingsCount, ratings: ratings, tags: tags) }RestaurantCard내에 fromModel로 만드는 방법은 매우 편해보이긴 하지만 페이지마다, 특정 조건에 의해 해당 컴포넌트를 재사용하지만 어떤 데이터는 추가로 들어가고 어떤 데이터는 빠져야할 경우가 생길 수 있는데 그럴 경우를 대비하여 굳이 해당 컴포넌트 내에는 fromModel로 만들지 않는 것이 더 좋지 않나요??예를 들어 홈에서는 태그가 있지만 음식 페이지에서 동일한 컴포넌트를 사용하면서 태그 데이터가 필요하지 않는 경우가 있을 것 같아 여쭤봅니다코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
마우스이벤트 형식이 제네릭이아닙니다 오류 해결 못하고 있습니다 어떤 거 인지 알 수 잇을까여?
import { ChangeEvent, useState } from "react"; // 리팩토링 const Board = () => { const [writer, setWriter] = useState(""); const [title, setTitle] = useState(""); const [content, setContent] = useState(""); const [isActive, setIsActive] = useState(false); const onChangewriter = (event:ChangeEvent<HTMLInputElement>) => { setWriter(event.target.value); if (event.target.value !== "" && title && content) return setIsActive(true); setIsActive(false); }; const onChangeTitile = (event:ChangeEvent<HTMLInputElement>) => { setTitle(event.target.value); if (writer && event.target.value && content) return setIsActive(true); setIsActive(false); }; const onChangeContent = (event:ChangeEvent<HTMLInputElement>) => { setContent(event.target.value); if (writer && title && event.target.value) return setIsActive(true) setIsActive(false); }; const onClickSubmit = (event:MouseEvent<HTMLButtonElement>) => [ console.log(writer), console.log(title), console.log(content), alert("게시물 등록이 완료되었습니다"), ]; return ( <> 작성자 : <input type="text" onChange={onChangewriter} /> <br /> 제목 : <input type="text" onChange={onChangeTitile} /> <br /> 내용: <input type="text" onChange={onChangeContent} /> <br /> <button onClick={onClickSubmit} style={{ backgroundColor: isActive === true ? "yellow" : "none" }} > 등록 </button> </> ); }; export default Board;
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
마우스이벤트 형식이 제네릭이아닙니다 오류 해결 못하고 있습니다 어떤 거 인지 알 수 잇을까여?
import { ChangeEvent, useState } from "react"; // 리팩토링 const Board = () => { const [writer, setWriter] = useState(""); const [title, setTitle] = useState(""); const [content, setContent] = useState(""); const [isActive, setIsActive] = useState(false); const onChangewriter = (event:ChangeEvent<HTMLInputElement>) => { setWriter(event.target.value); if (event.target.value !== "" && title && content) return setIsActive(true); setIsActive(false); }; const onChangeTitile = (event:ChangeEvent<HTMLInputElement>) => { setTitle(event.target.value); if (writer && event.target.value && content) return setIsActive(true); setIsActive(false); }; const onChangeContent = (event:ChangeEvent<HTMLInputElement>) => { setContent(event.target.value); if (writer && title && event.target.value) return setIsActive(true) setIsActive(false); }; const onClickSubmit = (event:MouseEvent<HTMLButtonElement>) => [ console.log(writer), console.log(title), console.log(content), alert("게시물 등록이 완료되었습니다"), ]; return ( <> 작성자 : <input type="text" onChange={onChangewriter} /> <br /> 제목 : <input type="text" onChange={onChangeTitile} /> <br /> 내용: <input type="text" onChange={onChangeContent} /> <br /> <button onClick={onClickSubmit} style={{ backgroundColor: isActive === true ? "yellow" : "none" }} > 등록 </button> </> ); }; export default Board;
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
super.repository에 대해 궁금합니다.
class RestaurantRatingStateNotifier extends PaginationProvider<RatingModel, RestaurantRatingRepository> { RestaurantRatingStateNotifier({ required super.repository, });}super는 부모쪽의 것을 받아온다고 알고 있는데제네릭으로 상속받을 클래스에 레포지토리를 명시해서 RestaurantRatingRepository 를 가져올 수 있는걸까요?제네릭에 대해 이해가 쉽지 않네요. 어떻게 자동으로 제네릭에 두개를 입력해놨는데 그중 하나를 가져올 수 있는건지 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
[js section07-2-2] 타이머 값 변경에 대해서
if(타이머 === "아직실행안함") 상태에서스크롤퍼센트가 >= 0.7 이면 타이머 값을 다른 값으로 변경해주어야타이머 = setTimeout(()=>{타이머="아직실행안함"},1000)이 코드로 스로틀링 되는게 아닌가요?영상에서는 타이머 값을 다른 값으로 변경해주지 않는데 이러면 타이머 = setTimeout(()=>{타이머="아직실행안함"},1000)이 코드를 추가하기 전과 같지 않나요?
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
이 강좌를 수강 하면 게시판을 만들수 있나요?
강좌 목록에는 페이징 게시글 관련사항이 있는데 Db와 연결해서게시판을 만들 수 있나요
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
위에 적으신 _testProvider는 지워도 상관이 없다는 뜻이겠죠?
_testProvider 와 gState가 같은 코드고 아래 코드가 위를 대신한다는 뜻이니 위는 지워도 되겠죠? 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
강의자료가 안뜹니다
강의 자료가 있는 항목을 누르면이렇게 아무것도 뜨지 않습니다 ㅜ
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
백엔드도 '완벽한' 시리즈 코스가 나오나요?
백엔드도 나온다면 완벽한 시리즈로 듣고 싶어서요
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
질문드립니다
안녕하세요,수업 잘 듣고 따라가고 있습니다~~!! 다름이 아니라 , 아무래도 graphQL를 이용한것보다 취직하고싶은 회사에서 대부분REST API를 사용하는거같아 혹시 fetch 또는 axios를 사용하는 방법은 강의에 추가할 계획이 없으실까요?그리고 nextjs에서는 axios를 사용하는 대신에 fetch를 사용하는것이 맞을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
안녕하세요
안녕하세요,혹시 최초 프로젝트 생성할때, nextjs15버전으로 설정되었는데 괜찮을까요?14로 다운그레이드 해야할까요?
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
강의 자료 내용 확인 부탁드립니다.
안녕하세요. 수강생 입니다. 좋은 강의 잘 수강하면서 열심히 공부하고 있습니다.노션 페이지 내용 관련으로 문의드립니다.[입문] 시작은 프리캠프 - 섹션 3 CSS의 기본과 싸이월드 실습 1CSS 사용방법 3가지 예시 이미지 중 해당 내용들에 대한 이미지가 이상해문의 남깁니다. 감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
강의 자료 내용 맞는지 확인 부탁드립니다.
[입문] 시작은 프리캠프 - 섹션 2 HTML과 기술스택 이해하기 노션 페이지 내용 중 종속태그 예시 부분의 이미지에 태그 내용은 없고 글자만 표기되어 있습니다. 이 부분이 오류인지 확인 부탁드립니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Provider 내에 Provider 2개를 이용할 때 화면 업데이트 궁금한점.
김치,라면,삼겹살 등등의 값을 바꾼뒤에 filter 를 하면 가끔씩 필터가 안되는 아이들이 보이는 문제가 왜 발생되는지 궁금합니다! 강의 영상에서도 보였구요, 두 번째로는, toggleHasBought() 로 값을 변경하면 화면이 다시 그려지는데 왜 필터는 적용되지 않는지 이유도 알고싶습니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Flutter 중급강의 소스코드는 링크는 어디에 있는 건가요?
Flutter 중급강의 소스코드는 링크는 어디에 있는 건가요? [강의 소개]에서도 없고 [기본 UI 작업하기] 강의 듣고 있는데 그런 설명없이 바로 진행되네요.초급 강의에서는 초반에 바로 말씀해주셔서 좋았는데 아쉽네요.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
마지막 xxx
강의 마지막 xxx는 빈공간 인건가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Gorouter 메인함수 호출관련 질문
Gorouter를 활용하여class _App extends ConsumerWidget { const _App({Key? key}) : super(key: key); @override Widget build(BuildContext context,WidgetRef ref) { final router = ref.watch(routerProvider); return MaterialApp.router( // 시스템 설정에 따른 Theme // themeMode: ThemeMode.system, theme: TAppTheme.lightTheme, // darkTheme: TAppTheme.darkTheme, debugShowCheckedModeBanner: false, routerDelegate: router.routerDelegate, routeInformationParser: router.routeInformationParser, routeInformationProvider: router.routeInformationProvider, ); } }final routerProvider = Provider<GoRouter>((ref){ final provider = ref.watch(authProvider); return GoRouter( routes: provider.routes, initialLocation: '/splash', refreshListenable: provider, redirect: provider.redirectLogic ); }); 위와 같이 메인함수를 호출하고 있습니다. 여기서 푸쉬 알림을 받을때 특정 경로로 이동하게 하고 싶다면 GoRouter의 initiallocation을 활용해서 특정 경로로 보내야할거같은데 스플래시화면에서 로그인 검증하여 로그인 되어있다면 특정경로로 이동하고 로그인 안되어있다면 특정경로를 이동하지않고 로그인화면으로 이동하고싶은데 방법을 잘 모르겠습니다
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
paginate() 에 대한 질문입니다.
void paginate({ int fetchCount = 20, // 추가로 데이터 더 가져오기 // true = 더 가져오기 // false = 새로고침 bool fetchMore = false, // 강제로 다시 로딩하기 // true - CursorPaginationLoading() bool forceRefetch = false, }) async { // 5가지 가능성 // State의 상태 // 1) CursorPagination - 정상적으로 데이터가 있는 상태 // 2) CursorPaginationLoading - 데이터 로딩중(현재 캐시 없음 // 3) CursorPaginationError = 에러가 있는 상태 // 4) CursorPaginationRefetching = 첫번째 페이지부터 다시 데이터를 가져올때 // 5) CursorPaginationFetchMore - 추가 데이터를 paginate 해오라는 요청을 받았을때 // 바로 반환하는 상황 // 1) hasMore == false(기존 상태에서 이미 다음 데이터가 없다는 값을 들고 있다면) // 2) 로딩중 - fetchMore : true // fetchMore : false - 새로고침의 의도가 있음. try { if (state is CursorPagination && !forceRefetch) { final pState = state as CursorPagination; if (!pState.meta.hasMore) { return; } } final isLoading = state is CursorPaginationLoading; final isRefetching = state is CursorPaginationRefetching; final isFetchingMore = state is CursorPaginationFetchingMore; if (fetchMore && (isLoading || isRefetching || isFetchingMore)) { return; } // PaginationParams 생성 PaginationParams paginationParams = PaginationParams( count: fetchCount, ); // fetchMore if (fetchMore) { final pState = state as CursorPagination; state = CursorPaginationFetchingMore( meta: pState.meta, data: pState.data, ); paginationParams = paginationParams.copyWith( after: pState.data.last.id, ); } final resp = await repository.paginate( paginationParams: paginationParams, ); if (state is CursorPaginationFetchingMore) { final pState = state as CursorPaginationFetchingMore; // 기존 데이터에 새로운 데이터 추가 state = resp.copyWith(data: [ ...pState.data, ...resp.data, ]); } else { state = resp; } } catch (e) { state = CursorPaginationError(message: '데이터를 가져오지 못했습니다.'); } } 이부분이 있는데왜 하위의 fetchMore의 else문에서 또 조건을 걸어놓는지 궁금합니다. // fetchMore if (fetchMore) { final pState = state as CursorPagination; state = CursorPaginationFetchingMore( meta: pState.meta, data: pState.data, ); paginationParams = paginationParams.copyWith( after: pState.data.last.id, ); } // 데이터를 처음부터 가져오는 상황 else { // 만약 데이터가 있는 상황이라면 기존 데이터 보존한 채로 Fetch(API 요청)을 진행 if (state is CursorPagination && !forceRefetch) { final pState = state as CursorPagination; state = CursorPaginationRefetching( meta: pState.meta, data: pState.data, ); } else { state = CursorPaginationLoading(); } }
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
컨텍스트에 대한 질문
강의 보면 로그인 스크린의 빌드 컨텍스트 내부에 storage를 선언하셨는데, class _LoginScreenState extends State<LoginScreen> { String user = ""; String password = ""; @override Widget build(BuildContext context) { final storage = FlutterSecureStorage(); final dio = Dio(); final emulatorIp = '10.0.2.2:3000'; final simulatorIp = '127.0.0.1:3000'; final ip = Platform.isIOS ? simulatorIp : emulatorIp; return ...; } } 이 부분에서 왜 빌드컨텍스트 내부에 작성했는지 궁금합니다.