묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)
DTO 작성시 freezed 3.0 변경 부분 문의
이전 강의에서 freezed 3.0 변경점으로 default 사용시 일반 생성자 초기화하듯 사용하는 방법으로진행해도 된다고 하셨는데 @JsonKey 사용법도 기존 생성자 작성과 동일하기 하고 아래 *참고소스1과 동일하게 진행해도 되는지 문의드립니다. 참고소스1import 'package:freezed_annotation/freezed_annotation.dart'; part 'company_info_dto.freezed.dart'; part 'company_info_dto.g.dart'; // ignore_for_file: annotate_overrides @freezed @JsonSerializable() class CompanyInfoDto with _$CompanyInfoDto { @JsonKey(name: 'Symbol') final String? symbol; @JsonKey(name: 'Name') final String? name; @JsonKey(name: 'Description') final String? description; @JsonKey(name: 'Industry') final String? country; @JsonKey(name: 'Country') final String? industry; const CompanyInfoDto({ this.symbol, this.name, this.description, this.industry, this.country, }); factory CompanyInfoDto.fromJson(Map<String, dynamic> json) => _$CompanyInfoDtoFromJson(json); Map<String, dynamic> toJson() => _$CompanyInfoDtoToJson(this); } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!
구글 로그인 구현 관련
안녕하세요! 카카오 로그인 강의를 보고 많은 도움을 받은 개발자 입니다!현재 플러터 플로우에서 기본으로 제공하는 구글 로그인은 구현을 완료하였습니다. 다만 구글에서 제공되는 기본 사용자정보에서 제가 개발하는 앱에서는 성별,출생연도 등을 추가로 받아오고 싶은데, 구글 클라우드에서 Oauth 동의화면이 안들어가지네요... 혹시 구글 oauth로그인으로 추가 사용자 정보를 받아오려면 봐야하는 문서나 정보가 있으시면 알려주시면 감사하겠습니다!
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
geolocator 가 import 가 안되는데 어떡하죠?
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM geolocator 가 import 가 안되는데 어떡하죠? 오류는 아래와 같이 나오구요. Target of URI doesn't exist: 'package:geolocator/geolocator.dart'. 소스는 아래와 같습니다. import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:geolocator/geolocator.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State<HomeScreen> createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { final CameraPosition initialPosition = CameraPosition( target: LatLng( 37.5214, 126.9246 ), zoom: 15, ); checkPermission() async{ final isLocationEnabled = await Geolocator.isLocationServiceEnabled(); } @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [Expanded(child: GoogleMap(initialCameraPosition: initialPosition))], ), ); } } pubspec.yaml 은 아래와 같이 되어 있습니다.name: chool_check description: "A new Flutter project." # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 environment: sdk: ^3.7.2 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions # consider running `flutter pub upgrade --major-versions`. Alternatively, # dependencies can be manually updated by changing the version numbers below to # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_maps_flutter: ^2.6.0 geolocator: ^14.0.0 dev_dependencies: flutter_test: sdk: flutter # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter packages. flutter: # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true # To add assets to your application, add an assets section, like this: # assets: # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/to/resolution-aware-images # For details regarding adding assets from package dependencies, see # https://flutter.dev/to/asset-from-package # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a # list giving the asset and other descriptors for the font. For # example: # fonts: # - family: Schyler # fonts: # - asset: fonts/Schyler-Regular.ttf # - asset: fonts/Schyler-Italic.ttf # style: italic # - family: Trajan Pro # fonts: # - asset: fonts/TrajanPro.ttf # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 # # For details regarding fonts from package dependencies, # see https://flutter.dev/to/font-from-package
-
미해결Flutter로 메신저앱 만들기
채팅목록 스크린에서 ref.listen ()말고 ref.watch().when()을 쓰는 이유는?
채팅목록화면을 만들때 final chatListProvider = StreamProvider.autoDispose<List<ChatModel>>((ref) { final currentUserModel = ref.watch(authProvider).userModel; return ref.watch(chatRepositoryProvider).getChatList( currentUserModel: currentUserModel, );});ref.watch(chatListProvider).when()을 사용하여 채팅목록화면을 만듭니다. when 문을 쓰게 되면 데이터 변화가 있을때마다 getChatList 함수가 실행됩니다. 매번 데이터에 변화가 있을때마다 getChatList함수가 실행이되면 너무 많은 데이터를 불러올 것으로 생각이 되어집니다. 여기서 궁금한 건, 채팅화면에서는 페이지네이션을 적용해서 초기화면을 조회할때는 limit를 설정해서 몇개의 데이터만 불러오고 화면을 올렸을때 lastid를 기준으로 데이터를 추가적으로 불러오는 형태로 화면을 구상하였는데, 채팅목록도 마찬가지고 처음에는 몇개의 데이터만 가져오고 사용자가 화면을 스크롤했을때 추가적으로 데이터를 불러오게 하면 안 되는건가요...?
-
해결됨Flutter 앱 개발 실전
수강 기간 연장 요청
수강 기간 연장 요청을 드리고 싶습니다...
-
미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 사용시 기능은 동작하지만 Radio위젯에 선택 표시가 안되는 부분 질문
sealed class 사용시 Radio위젯에 선택 표시가 안되는 이유는 Radio위젯에 value == groupValue 값이 같아도 객체 참고가 다르기 때문에 발생되는 것으로 확인했습니다. orderType비교시 == 값이 같은 경우 가능하도록 내용을 수정했는데 제대로 수정했는지 궁금해서 문의드립니다. *참조코드 2 내용 1.*참조코드 2 내용 수정이 잘되었는지 확인2.freezed 사용시 자동으로 만들어 주는 부분인데 seald 클래스 사용시 팁이 있는지 궁금합니다. 3.copyWith 부분도 추가하는 형태도 궁금합니다. 참조코드 1import 'package:flutter/material.dart'; import 'package:flutter_note_app/domain/model/util/note_order.dart'; class OrderSection extends StatelessWidget { final NoteOrder noteOrder; final Function(NoteOrder noteOrder) onOrderChanged; const OrderSection({ super.key, required this.noteOrder, required this.onOrderChanged, }); @override Widget build(BuildContext context) { return Column( children: [ Row( children: [ Radio<NoteOrder>( value: NoteOrder.title(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.title(noteOrder.orderType)); }, activeColor: Colors.white, ), const Text('제목'), Radio<NoteOrder>( value: NoteOrder.date(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.date(noteOrder.orderType)); }, activeColor: Colors.white, ), const Text('날짜'), Radio<NoteOrder>( value: NoteOrder.color(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.color(noteOrder.orderType)); }, activeColor: Colors.white, ), const Text('색상'), ], ), ], ); } } 참조코드 2import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder { final OrderType orderType; const NoteOrder(this.orderType); factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; @override bool operator ==(Object other) { return runtimeType == other.runtimeType && other is NoteOrder && other.orderType == orderType; } @override int get hashCode => Object.hash(runtimeType, orderType); } class NoteOrderTitle extends NoteOrder { NoteOrderTitle(super.orderType); } class NoteOrderDate extends NoteOrder { NoteOrderDate(super.orderType); } class NoteOrderColor extends NoteOrder { NoteOrderColor(super.orderType); } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
에러 요청드립니다.
안녕하세요동영상 선택하는 기능구현하기 강좌를 듣고 있습니다.강사님께서 multidex 에러가 발생했을때flutter clean하고 재실행을 하라고 말씀해주셨는데재실행을 하면아래와 같은 오류가 발생하고 있습니다.무시가능 오류로 나오는데 무시해도 상관 없는 걸까요?---------------------------------------Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...Running Gradle task 'assembleDebug'...Your project is configured with Android NDK 26.3.11579264, but the following plugin(s) depend on a different Android NDK version:- flutter_plugin_android_lifecycle requires Android NDK 27.0.12077973- image_picker_android requires Android NDK 27.0.12077973- video_player_android requires Android NDK 27.0.12077973Fix this issue by using the highest Android NDK version (they are backward compatible).Add the following to C:\Users\jht56\Desktop\study\vid_player\android\app\build.gradle.kts: android { ndkVersion = "27.0.12077973" ... }√ Built build\app\outputs\flutter-apk\app-debug.apkInstalling build\app\outputs\flutter-apk\app-debug.apk...Debug service listening on ws://127.0.0.1:55495/0oC0d7AhJV4=/wsSyncing files to device sdk gphone64 x86 64...
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
SDK Tools에 intel x86 emulator accelerator (haxm installer) 문제 ?
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzU앱 실행 할때 이런 오류가 떠서 재다운로드 해도 계속 오류가 뜨면서 실행이 되지않고 window개발 시 SDK Tools에 intel x86 emulator accelerator (haxm installer) 체크박스 체크 해야하는데 아예 목록에 나오지 않아요.. 해결해보려 했는데 잘되지 않아 글올립니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
연결 관련
Project uses Firebase Auth (+2 other Firebase features) but Firebase config files are not uploaded.이건 왜 안대는건가요..?
-
해결됨[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
닉네임관련
프로필 수정 시 닉네임을 계속 입력해야하는데, 닉네임은 기존꺼를 불러오는 방법이 있을까요?
-
해결됨[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
기본 이미지 프로필 설정
이미지를 넣기전에 사용자가 이미지를 안넣으면 기본 이미지는 자동으로 설정이 되는건가요? 아니면 안보이는 상태로 나오는건가요?안보이는 상태로 나오면 기본 프로필 이미지를 지정해야하는데 방법이 있을까요>?
-
미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 사용시 The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류
The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류 관련으로 문의드립니다. sealed class에서 noteOrder.orderType를 접근할때 *참고사진1의 오류가 발생했습니다.해당 오류는 sealed class 내부에 noteOrder.orderType에 접근 할수 없다라는 내용으로 *참고코드 2에서 *참고코드 3와 같이 sealed class에서 getter를 선언하고 각 클래스에서 해당 값을 사용할수 있도록 @override로 수정했으나 의문점이 생겨 문의드립니다. 1.*참고코드3 sealed class 수정사항이 맞는지 궁금합니다.2.*참고코드3 사항이 맞는 경우 sealed class에서 getter로 OrderType get orderType; 사용했다면나머지 class부분에서 orderType를 강제로 구현을 해야하기 때문에 orderType를 사용하지 않는 class 작성시 문제가 될것 같습니다. 혹시 해당 사항에서는 어떻게 해야할찌 궁금합니다. *오류 내용*참고사진1 *order_section.dart*참고 수정코드1import 'package:flutter/material.dart'; import 'package:flutter_note_app/domain/model/util/note_order.dart'; class OrderSection extends StatelessWidget { final NoteOrder noteOrder; final Function(NoteOrder noteOrder) onOrderChanged; const OrderSection({ super.key, required this.noteOrder, required this.onOrderChanged, }); @override Widget build(BuildContext context) { return Column( children: [ Row( children: [ Radio<NoteOrder>( value: NoteOrder.title(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.title(noteOrder.orderType)); }, ), ], ), ], ); } } *note_order.dart*참고 코드2import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder<T> { factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { OrderType orderType; NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { OrderType orderType; NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { OrderType orderType; NoteOrderColor(this.orderType); } *참고 코드3(수정함)import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder<T> { OrderType get orderType; factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { @override OrderType orderType; NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { @override OrderType orderType; NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { @override OrderType orderType; NoteOrderColor(this.orderType); } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
어려움!! 써있어서 긴장했는데
하나도 안 어렵고 그전의 Controller 사용하는게 10배는 더 어려웠어요
-
미해결Flutter 중급 1편 - 클린 아키텍처
유즈케이스 관련하여 질문 드립니다.
강의 정말 잘 듣고 있습니다! 혹시 유즈케이스 같은 경우는 레포지토리의 함수가 10개라고 가정하면 10개 다 만들어주는 편인가요??
-
미해결Flutter 중급 1편 - 클린 아키텍처
mockito사용시 오류 해결법
mockito 사용시 최신버전 mockito: ^5.4.6으로 사용했을때 freeze와 동일한 오류가 나는 경우analyzer문제 인것 같은데 mockito 상위버전 사용시 analyzer 높아서 빌드가 불가능한 현상이 있었습니다. clean후 아래 방법을 이용해서 빌드 진행하면 해결됩니다.! dependencies: analyzer: ^6.0.0dev_dependencies: mockito: ^5.0.6 사용 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 사용 문의2
알려주신 sealed class으로 내용 작성 중에 선생님이 의도하신 부분으로 작성을 했는지 문의드립니다. 1.get_notes_use_case.dart 부분 switch case 이중 작성 부분2.switch case 이중 작성 부분 *참고코드4 처럼 final을 안쓰고 사용가능 여부 note_order.dart*NoteOrder sealed class 구현부*참고 코드1import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder<T> { factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { OrderType orderType; NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { OrderType orderType; NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { OrderType orderType; NoteOrderColor(this.orderType); } order_type.dart*OrderType 구현부 sealed class 구현부*참고 코드2sealed class OrderType<T> { factory OrderType.ascending() = Ascending; factory OrderType.descending() = Descending; } class Ascending<T> implements OrderType<T> { Ascending(); } class Descending<T> implements OrderType<T> { Descending(); } get_notes_use_case.dart*notes use case 구현부*참고 코드3import 'package:flutter_note_app/domain/model/note.dart'; import 'package:flutter_note_app/domain/model/util/note_order.dart'; import 'package:flutter_note_app/domain/model/util/order_type.dart'; import 'package:flutter_note_app/domain/repository/note_repository.dart'; class GetNotesUseCase { final NoteRepository repository; GetNotesUseCase(this.repository); Future<List<Note>> call(NoteOrder noteOrder) async { List<Note> notes = await repository.getNotes(); switch (noteOrder) { case NoteOrderTitle(orderType: final orderType): switch (orderType) { case Ascending(): notes.sort((a, b) => a.title.compareTo(b.title)); break; case Descending(): notes.sort((a, b) => -a.title.compareTo(b.title)); break; } break; case NoteOrderDate(orderType: final orderType): switch (orderType) { case Ascending(): notes.sort((a, b) => a.timestamp.compareTo(b.timestamp)); break; case Descending(): notes.sort((a, b) => -a.timestamp.compareTo(b.timestamp)); break; } break; case NoteOrderColor(orderType: final orderType): switch (orderType) { case Ascending(): notes.sort((a, b) => a.color.compareTo(b.color)); break; case Descending(): notes.sort((a, b) => -a.color.compareTo(b.color)); break; } break; } return notes; } } *저번 질문에서 선생님이 알려준 final 안쓰고 사용할수 있는 팁*참고 코드4switch (event) { case ChangeColor(): _changeColor(event.color); break; case SaveNote(): _saveNote(event.id, event.title, event.content); break; } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video_call 에서 아래와 같은 에러가 발생합니다.
video_call 에서 아래와 같은 에러가 발생합니다. Launching lib/main.dart on sdk gphone64 arm64 in debug mode...Running Gradle task 'assembleDebug'...FAILURE: Build failed with an exception.* What went wrong:A problem occurred configuring project ':agora_uikit'.> Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl. > Namespace not specified. Specify a namespace in the module's build file: /Users/nana/.pub-cache/hosted/pub.dev/agora_uikit-1.3.10/android/build.gradle. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about setting the namespace. If you've specified the package attribute in the source AndroidManifest.xml, you can use the AGP Upgrade Assistant to migrate to the namespace value in the build file. Refer to https://d.android.com/r/tools/upgrade-assistant/agp-upgrade-assistant for general information about using the AGP Upgrade Assistant.* 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 845msError: Gradle task assembleDebug failed with exit code 1<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> agora_rtc_engine: ^6.3.0 agora_uikit: ^1.3.8 permission_handler: ^11.3.0
-
해결됨Flutter로 웹 서비스 개발하기 (1) - Responsive Web
contentBox 에서 한글 입력 오류 문의
서비스 문의 / 문의 내용 * 에서 한글 입력을 해보면 첨부한 그림과 같이 커서 아래에 푸른 _ 가 하나 계속 커서를 따라 다닙니다. 테스트 개발은 문제 없지만, 실제 업무에서는 사용이 불가할 것 같은데요. 해결책이 궁금한데요. 혹시 방법이 있을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
npm i 오류
안녕하세요, 선생님.프로젝트를 진행하면서 npm install을 실행했는데, 위와 같은 오류가 발생했습니다.이 오류는 npm이 특정 디렉토리를 만들 수 없다는 내용인데, 여러 가지 방법을 시도했지만 해결되지 않았습니다.node_modules 폴더와 package-lock.json 파일을 삭제한 후 다시 설치했으나 여전히 같은 오류가 발생하고 있습니다.npm cache clean --force 명령어로 캐시를 정리한 후에도 문제가 해결되지 않았습니다.혹시 이 문제를 해결할 수 있는 방법에 대해 조언을 주실 수 있을까요?감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
handler.reject(err) 질문
안녕하세요 강사님. 강의 잘 듣고 있습니다.handler.reject(err)를 발생시키는 경우가 총 3가지인 것 같은데요. 1번째는 secureStorage에 refreshToken이 없을 때, 2번째는 dio 요청 실패했을 때 즉 서버의 refresh 토큰의 기간이 만료되었을 때, 3번째는 토큰과 관계없는 서버의 예외 상황이 발생했을 때인 것 같은데요. 2번째 상황에서는 login 화면으로 다시 redirect 시키지만, 1, 3번째의 경우에는 따로 예외 스크린을 만들어서 여기로 라우팅시키는 것이 적합할까요? 만약 이렇게 처리하지 않는다면, 레드 스크린에 예외 로그가 남게 되는 것인가요?또한 handler.reject(err)를 통해 예외가 전파되는 것 같은데, 2번째 상황에서는 어차피 로그인 화면으로 바로 넘어가므로 이를 굳이 발생시킬 필요는 없지 않나요?