묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Flutter 중급 3편 - 의존성 주입 가이드
remote data source impl
안녕하세요. 강의 잘 보고 있습니다. remote data source impl 관련해서 질문이 있습니다. @prod @Singleton(as: CommunityRemoteDataSource) class CommunityRemoteDataSourceApiImpl implements CommunityRemoteDataSource { final _dio = Session().dio; @override Future<CommunityResponseDTO> fetchCommunities() async { Response<dynamic> response = await _dio.get('get/community/path'); final responseDto = CommunityResponseDTO.fromJson(response.data); return responseDto; } } CommunityRemoteDataSource 의 구현체 CommunityRemoteDataSourceApiImpl 를 만들어서 사용중입니다.ApiImpl 은 실제 서버와 통신중 이며,http 라이브러리 Dio를 사용하고 있습니다. 여기서 테스트를 위해 DioMock 객체를 만들어서 사용하고자 합니다. 원래 CommunityRemoteDataSourceApiImpl 에 final _dio = Session().dio; 로 싱글턴으로 dio를 내부에 객체를 생성하고 있는데 이거를 주입받는 식으로 변경하여 테스트 시만 CommunityRemoteDataSourceApiImpl(DioMock()) 을 넣는 것인지, 아니면 CommunityRemoteDataSourceApiMockImpl 를 새로 또 만드는지 궁금합니다.만약 CommunityRemoteDataSourceApiImpl(DioMock()) 로 주입을 받는 식이라면Response<dynamic> response = await _dio.get('get/community/path'); final responseDto = CommunityResponseDTO.fromJson(response.data); 해당 코드들이 Dio() 일 때, DioMock() 일 때 달라야 할 것 같은데 어떻게 처리하는 것이 맞는지 궁금합니다. 감사합니다.
-
해결됨Flutter로 SNS 앱 만들기
댓글 입력 후 FeedCardWidget의 FeedCcount 업데이트 관련
안녕하세요 댓글 입력 후 메인 화면 코멘트카운트가 업데이트 되지 않고 있습니다. CommentScreen에 callback 멤버 추가해서 하면 될것 같은데. 잘안되네요.. 도움 부탁드리겠습니다.
-
미해결처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)
플러터 다트 질문
플러터 강의를 들으려고 하는데 로드맵대로 하지않고 바로 플러터를 들어도되나요? 플러터만 익히고싶고 파이썬부터 듣고싶진않아서요
-
해결됨Flutter로 SNS 앱 만들기
가입완료 메세지표시와 입력항목 비활성화에서 메세지가 안나와요.
가입완료 메세지표시와 입력항목 비활성화에서 메세지가 안나와요.
-
미해결Flutter 중급 1편 - 클린 아키텍처
freezed JsonKey 사용 예시 공유
import 'package:freezed_annotation/freezed_annotation.dart'; part 'photo.freezed.dart'; part 'photo.g.dart'; @freezed class Photo with _$Photo { factory Photo({ required int id, required String tags, @JsonKey(name: 'previewURL') required String previewUrl, }) = _Photo; factory Photo.fromJson(Map<String, dynamic> json) => _$PhotoFromJson(json); }
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
변수를 받는것은 상태변경이랑 상관이 없는건가요?
8:22 에 Calendar를 스테이트풀에서 스테이트리스로 변경하시는데요. selectedDay, focusedDay등의 변수를 외부에서 받는데 이건 위젯 상태관리에 포함 되지 않는건가요?
-
미해결Flutter 중급 1편 - 클린 아키텍처
아이폰에서 APP 실행 안되는 현상
안녕하세요.맥북에서 Android Studio와 아이폰간에 USB 케이블을 연결하여 앱 실행을 하면 아이폰에 Flutter APP 아이콘이 생깁니다.그리고 USB 케이블이 연결된 상태에서는 화면이 활성화되어 있을 때에는 앱 실행이 잘 됩니다.그런데 USB 케이블을 제거하고 APP을 실행하면 실행이 안됩니다.이 문제를 해결하려면 어떤 조치를 해야 할까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter 재빌드
리버팟 codegen을 쓰면서 강의를 듣다가 리버팟 codegen으로는 changeNotifier를 작성하지 못한다는 기사를 읽었습니다.다음 코드에서 막혔습니다.@riverpod GoRouter goRouter(GoRouterRef ref) { final provider = ref.read(authProvider.notifier); final user = ref.watch(userMeProvider); return GoRouter( routes: provider.routes, initialLocation: '/splash', // refreshListenable: ???, redirect: (_, state) { return provider.redirectLogic(state); }, ); }여기서 refreshListenable에 값을 넣어줘야 하는데 강의에서는 ChangeNotiferProvider로 했기 때문에 refreshListenable에 값을 넣어주는게 가능했는데 저는 codegen으로 하다보니 타입 에러가 뜨고 값을 넣어 줄 수가 없습니다.final user = ref.watch(userMeProvider);이 코드를 넣어서 user의 상태가 바뀌면 고라우터를 재빌드 시켜서 리다이렉트 함수를 다시 실행시키려고 했는데, user의 상태가 UserModelLoading에서 UserModel로 분명히 바뀜에도 불구하고 고라우터가 재빌드가 안됩니다. print() 넣어서 확인했습니다.그냥 리버팟 codegen 쓰지말고 v1처럼 하는게 나을까요? 아니면 refreshListenable에 넣어 줄 수 있는 다른 값이나 고라우터의 리다이렉트 함수를 또 실행시켜줄 장치가 있을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
비디오플레이어 강의 / initialize 함수의 쓰임?
비디오플레이어 강의 중 이 부분에서 질문할 것이 많습니다...질문1. initialize() 함수가 컨트롤러를 초기화하는 함수라고 말씀하셨는데, 바로 윗 줄에서 컨트롤러가 관리할 파일을 고른 것 아닌가요? 바로 초기화시키는 이유가 궁금합니다. 질문2. initState안에서 어떻게 바로 setState를 실행시킬 수 있는지 궁금합니다. setState는 build가 실행된 후 clean인 상태에서만 실행할 수 있는 것 아닌가요? 질문3. 질문2와 이어지는 질문인데요, 이 전체적인 state의 라이프사이클이 어떻게 돌아가는지 궁금합니다. 이 전 프로젝트까지는 어찌어찌 잘 따라왔는데 갑자기 벽에 막힌 기분이네요 ㅜㅜ 긴 글 읽어주셔서 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
riverpod v2 관련 질문
안녕하세요저는 강의처럼 리버팟 v1이 아닌 어노테이션을 사용하는 v2버전으로 코딩을 하며 배우는 중입니다.그리고 강의처럼 클래스 안에 변수를 선언해서 생성자를 통해 레포지토리를 받는걸 하려고 합니다.@riverpod class UserMe extends _$UserMe { final UserMeRepository repo; UserMe({ required this.repo, }); @override UserModelBase? build() { return UserModelLoading(); } }이후 user_me_privder.g.dart를 보면 빨간줄이 보입니다.저 빨간줄에 커서 가져다 대면The argument type 'UserMe Function({required UserMeRepository repo})' can't be assigned to the parameter type 'UserMe Function()'. 요런 메세지가 뜹니다.해결방법이 있을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
AppBar 하구 Button 모양이 이상합니다.
질문있습니다프로그램이 깨진건지 아님 업그레이드 해서 그런지 이상하네요증상: 첨부 사진 참조1. ElevatedButton 에서 둥그런 버튼 모양 나옴2. appBar 바탕색이 흰색으로 바뀜, 원래 파란색 임2일 전에 컴파일 에러가 계속 생겨서 찾아보니 flutter clean 하구 flutter upgrade 하라구 해서 했는데 안되구C: 드라이브 용량이 없어서 좀 늘렸더니 에러는 없어졌습니다. 그런데 그때부터 위 증상 이 생기네요.앱바에 color 명령주면 파란색으로 바뀌기는 합니다.혹시 최신 버전으로 업그레이드 되서 그런건가 해서 이전 버전으로 환원시킬려는데 방법이 있는지요.?아님 프로그램 일부가 깨져서 다시 깔아야 하는건가요. 다시 깐다면 어찌 깔아야 할지도 모르겠구 해서질문드립니다. pubspec.yaml 파일 내용중현재 :version: 1.0.0+1environment: sdk: '>=3.2.6 <4.0.0'-------2일 전에는version: 1.0.0+1environment:sdk: '>=3.1.3 <4.0.0'
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
webview 실행 시 빈화면
안녕하세요! 웹뷰를 처음 사용해봤는데, appbar는 적용이 잘되나, 사진과 같이 빈화면만 뜹니다.. import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.orange, title: Text('Code Factory'), centerTitle: true, ), body: WebView( initialUrl: 'https://blog.codefactory.ai', javascriptMode: JavascriptMode.unrestricted, ), ); } }
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
http 프로토콜 강의 관련
옛날 버전인 이번 섹션 강의에는 HTTP 관련 내용이 포함되어 있던데 이제는 신경 안써도 되는 내용일까요~?? 미리 답변 감사합니다
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
startTime, endTime,. content 값이 bottom_sheet에 안나옵니다!
startTime 프린트를 찍어보면 초기 로딩중일때 null이 나오고그 이후에는 "0" 값이 제대로 들어가있는데화면에는 null 값이 찍히네요.초기 초딩할때 값이 리턴되서 그런건가요?도저히 모르겠어요....
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Dio Interceptor 내부 onError 콜백
@override void onError(DioException err, ErrorInterceptorHandler handler) async { debugPrint('ERR [${err.response}] => PATH: ${err.requestOptions.path}'); return super.onError(err, handler);이렇게 인터셉터를 찍어보고 있는데 err.response가 null이 날라오네요,, 이유를 모르겠는데 혹시 추측가시는 이유가 있으신가요?서버에서는 정상적으로 리턴이 옵니다.URL도 일치합니다.request도 날라갑니다.
-
해결됨Flutter 앱 개발 실전
Lang Tile
Tile( icon: 'language', title: S.current.language, subTitle: IntlHelper.isKo ? S.current.ko : S.current.en, onPressed: () => langService.toggleLang(), )안녕하세요.강의 정말 큰 도움이 되고 있습니다!Lang Tile 구현에서 onPressed 콜백에서 context.watch<LangService>().toggleLang() 으로 쓰면 왜 에러가 나는건가요,,??(아래와 같은 에러가 발생합니다..)Tried to listen to a value exposed with provider, from outside of the widget tree.This is likely caused by an event handler (like a button's onPressed) that calledProvider.of without passing listen: false.To fix, write:Provider.of<LangService>(context, listen: false);It is unsupported because may pointlessly rebuild the widget associated to theevent handler, when the widget tree doesn't care about the value.The context used was: SettingBottomSheet(dependencies: [_InheritedProviderScope<LangService?>, _InheritedProviderScope<ThemeService?>])'package:provider/src/provider.dart':Failed assertion: line 274 pos 7: 'context.owner!.debugBuilding || listen == false || debugIsInInheritedProviderUpdate'
-
해결됨Flutter로 SNS 앱 만들기
프로필 이미지 저장
저는 바로 확인할수 없는데... 좀 불편한데요. 달라진것인가요
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
초록색원안을 클릭하니 새로운 페이지로 가네요...
완성된 프로그램 상에서초록색 원안을 마우스로 클릭하니 밑에 아이콘 2개 생성되구요요 아이콘을 클릭하니 새로운 페이지로 가네요.저만 그런가 해서 문의 드립니다.이것에 대한 코드는 없었는데 궁금해서요캡처 사진 첨부합니다.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
4강 마지막 yield* -> yield
4강 마지막 끝날 때요//stream 사용 위해 패키지 불러와서 써야 함 import 'dart:async'; void main() { playAllStream().listen((val){ print(val); }); } Stream<int> playAllStream() async* { //yield* 뒤에 따라오는 stream의 값이 다 return 될 때까지 기다린다. yield* calculate(1); yield* calculate(1000); } Stream<int> calculate(int number) async* { for(int i=0; i<5; i++){ yield i * number; //async* 로 await를 쓸 수 있다. await Future.delayed(Duration(seconds: 1)); } } playAllStream() 여기 안에 yield* 를 yield로 바꾸면 결과가001100022000이렇게 나올거라고 하셨거든요. 이론적으로 이해는 됐는데, 코드 실행이 안되어서요.어디서 문제인지 모르겠어요.에러는 아래와 같습니다.Error: A value of type 'Stream<int>' can't be assigned to a variable of type 'int'. - 'Stream' is from 'dart:async'. yield calculate(1);
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter v13
안녕하세요 코팩님!이제 드디어 GoRouter에 대한 강의를 들으려고 합니다.그런데 지금 GoRouter가 v13까지 업데이트 되어있네요 ㄷㄷ혹시 GoRouter v13 추가로 강의하실 계획 있으신가요??그리고 제가 v13으로 강의를 듣고 코딩을 해도 크게 문제 없을까요?