묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Flutter 중급 1편 - 클린 아키텍처
프로바이더 위치 질문
마지막에 main 함수는Provider 설정 이후, RunApp 함수가 실행이 되는 걸로 보입니다.만약 Provider 초기화시 외부 DB와 통신하는 등의 통신시간이 길어진다면... runApp 이 실행되기 전이라서 어플이 동작하지 않을 수 있나요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
섹션7 강의를 보고있어요
전체적으로이해가안가서그러는데 객체지향을 더봐야겠죠.함수편을봐야하나요.어느부분을봐야하나요
-
미해결Flutter + Firebase로 넷플릭스 UI 클론 코딩하기 [무작정 플러터]
로고 이미지가 안불러와져요
pubspec.yaml 파일도 수정해보고, 강사님 한대로 코드 똑같이 적었는데.. 이미지가 안불러와져요.오타 있는지 확인도 해보았는데 없었어요home_screen.dartimport 'package:flutter/material.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override _HomeScreenState createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return const TopBar(); } } class TopBar extends StatelessWidget { const TopBar({super.key}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.fromLTRB(20, 7, 20, 7), child: Row( children: <Widget>[ Image.asset( 'assetsimages\bbongflix_logo.png', fit: BoxFit.contain, height: 25, ), ], ), ); } }
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
스태틱으로 만든 메서드 빨간줄 안사라짐
클래스 1번 GestureDetector( onTap: () { Schedule.onTap(context); }, ---------------------------------------------- 클래스 2번 class Schedule { static void onTap(BuildContext context) async { (데이터불러오기) return AlertDialog 입니다. 약간에 변형을 줘서 공부중인데 1번클래스에서 온탭 누르면 알림창은 문제 없이 뜨고있습니다 그러나 onTab 밑에 빨간줄이 영~신경쓰이는데 마우스 대보면 The method 'onTap' isn't defined for the type 'Schedule 이렇게 나오는데 관련 자료 부터 구글 다뒤져봐도 onTab에 빨간줄이 안사라집니다 방법좀 알려주세요 ㅠ
-
해결됨Flutter 중급 3편 - 의존성 주입 가이드
데이터 추상화 문제
안녕하세요. 코드를 작성하다가 궁금증이 생겨 질문을 올립니다.사용자 입장에서 인터넷이 되나 안되나 비슷한 경험을 제공하려고 합니다. 아래 데이터 흐름을 예로 들겠습니다.뷰모델학교 디테일 정보 fetch use case학교 repository(interface fetch)remote data source - 학교repository확장 local data source - 학교 repository 확장 이런 상황에서 인터넷이 되면 4번에서 데이터를 가져오고 안되면 5번에서 가져오려고 합니다. 이럴때 인터넷이 되는지 안되는 지 판단하는 클래스는 use case 내 execute 안에서 하는 것이 옳은지 아니면 use case 와 data source 사이에 로컬 및 리모트 데이터 소스를 주입 받는 새로운 클래스를 새로만드는 것이 옳은지 아니면 다른 접근이 있는 지 궁금합니다. 또한 인터넷이 안되는 것 뿐만 아니라 인터넷이 되는 상황에서도 로컬의 값과 서버의 값이 같으면 로컬 데이터를 사용하도록 하고 싶은데 어디 클래스에서 어떤 방식으로(더티비트?) 구현하는 것이 좋을 지 궁금합니다. 감사합니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
갑자기 '에러가 있습니다'라고 떠요!
원래 drawer 색상 변경하기 전에 스크롤컨트롤러 부분까지는 아무 문제 없었는데, 이제 futurebuilder안에 Scaffold를 넣고 나니까 restart 했을 때 '에러가 있습니다.'라고 뜹니다. 프로젝트상에는 에러가 하나도 없는 상태입니다. 혹시 몰라서 drawer 색상 변경 수정 전으로 코드를 돌려봐도 여전히 '에러가 있습니다.'라고 뜹니다. 정부 api를 받아오는데 문제가 발생한 경우인가요?api에서 에러가 발생하면 이 에러를 어떻게 확인할 수 있나요?
-
해결됨Flutter 중급 3편 - 의존성 주입 가이드
로그인(auth)관련 데이터 흐름
안녕하세요. 수업 잘 듣고 있습니다.로그인 관련 부분을 구현하다가 궁금증이 생겨 질문드립니다.get 방식으로 약국의 마스크 수량을 가져오는 것은 약국 ViewModel 약국 UseCasesfetch 마스크 수량 UseCase마스크 Repository마스크 (Local or Remote) Data Source 위의 과정으로 이해를 했습니다. 그런데 (학생)로그인 부분을 구현한다고 가정하면 로그인 ViewModel로그인 UseCasesfetch 학교목록 UseCase학교목록 Repository학교목록 (Local or Remote) Data Sourcepost 로그인 입력정보 UseCase로그인 Repository로그인 Remote Data Source이러한 흐름으로 진행하게 되는데 여기서 질문이 있습니다.로그인 할 때 서버에서 제공하는 학교 목록을 받고 그 목록을 토대로 로그인을 하는 방식일 때 UseCase 를 저런 방식으로 설정하면 되는 것인지repository 하면 뭔가 특정 데이터에 대한 CRUD 를 의미하는 것 같은데 로그인 정보를 제출하는 것도 이런식으로 처리해도 되는지 궁금합니다!
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
yaml 파일 수정 후 Pub get 눌렀더니...
아래와 같은 빨간색 오류 메시지가 뜹니다. 확인 부탁드립니다^^
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
children: [1,2,3] 을 다른 파일로 넘길때 [1,2,3] 통으로 말고 1만 따로 넘기고 싶은데 어떻게 해야하나요?
children: [1,2,3] 을 다른 파일로 넘길때[1,2,3] 을 변수로 바꾸고상단에final List<Widget> children; required this.children,이렇게 넘기는데요. 받는건 return 클래스명 ( childtrn : [1,2,3]) [1,2,3] 말고1만 넘기고/받고 싶으면 어떻게 해야하나요?
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Flutter Hello World --> 수업은 잘 따라갔는데 가상폰화면 바탕화면을 검은색으로 바꾸고 나니...
위와 같이, 가상폰화면 상단에 기본적으로 보여야 하는 시간정보, 전파아이콘, 배터리아이콘이 보이지 않아요. 왜 그런걸까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
http와 https 셋팅 하였으나 에러발생되었음니다 무었지 문제인가요?
http와 https 사용할수있게 코드 추가 하였으나 다음 에러발생되었습니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드 스튜디오 자동완성 관련해서 질문이 있습니다.
안드로이드 스튜디오를 순서대로 깔았는데 자동완성이 제대로 시행되지 않고 있습니다. Control+SpaceBar를 눌러야만 자동완성이 뜨고 있어요,, 그냥 입력만 해도 자동완성을 띄우고싶은데 방법이 없을까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
const HomeScreen({super.key}) 에러 발생되었습니다.
const HomeScreen({super.key}) 에러 발생되었습니다.StatelessWidget 하면const HomeScreen({super.key});자동으로const가 생성되는데요. 지우면 에러가 없어집니다. 무슨 이유인가요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
버튼 길이 정의
Button 길이를 정의할 때 MediaQuery랑 double.infinity 둘 중 어떤 것을 사용하는게 더 좋을까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
webview 강의 진행중입니다.
webview 강의 진행중입니다.그냥 진행할까요? 그냥 돌아가서 진행했습니다.결과는 나왔네요. 빨강색 에러는 뭔가요
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
개남님 초기 페이지 연결하기 부분 질문입니다!
개남님 좋은 강의 감사합니다. 현재 초기 페이지 연결하기까지 진행했습니다. 조금 오류가 있는 것 같은데 순수하게 궁금해서 여쭙니다! main.dart에서 AppDataLoadCubit을 lazy:false로 뒀잖아요? 그럼 앱을 처음 다운 받았을 때 init page가 보여지고 lazy가 false이기 때문에 스플래시 화면에 도달하기 전 이미 데이터를 로드해서, 시작하기 버튼을 눌러 스플래시 화면에 도달했을 때면, 바로 로그인 체크 중 입니다..가 보여야 하는 것 아닌가요?? 제 에뮬레이터에는 데이터 로드 중 입니다..가 보이길래 영상을 다시 돌려봤는데 개남님도 같은 현상이십니다. 그리고 시작하기 버튼을 통해 init -> splash에 도달했을 때 새로고침하지 않으면 데이터 로드 중 입니다..에서 로그인 확인 중 입니다..로 바뀌지 않습니다. 단순 오류인가 해서 앱을 지워 hydrated bloc을 초기화하고 다시 확인해 보았지만 같은 현상이 일어납니다.
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
개남님 equatable에 대한 보충 설명 좀 부탁드릴게요 !
개남님 좋은 강의 감사합니다. equatable을 계속 사용하셔서 알아봤는데 잘 이해되지 않습니다. 클래스 인스턴스 비교에 활용된다는 것과, 그 원리는 이해했는데, 모델 클래스랑 관련이 있나요??
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Flexible에서 flex 쓰는것이 너무 헷갈립니다. 기준을 못잡겠습니다.
Expanded에서 flex를쓰면 전체적인 비율에 적용되는건 이해했습니다. Flexible 적용하면 container안에 heigth크기를 잡아먹고 나머지는 빈공간으로 되는데요.flex 적용하면 헷갈립니다. 구체적인 예좀 들어주세요버리는공간이 많아 지잖아요. 왜 많아지는지 모르겠습니다.
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
주문하기 클릭 시 Order 생성 안 되고 500에러가 뜹니다.
질문 내용주문 시 계속해서 주문에 실패했다고 떠서, 무엇이 문제이지 하고 봤는데, Status 500 에러가 던져집니다.그래서 서버 쪽 로그를 봤는데, 서버에서 이런 Exception이 던져지고 있습니다.[Nest] 63134 - 2023. 08. 13. 오전 2:35:36 ERROR [ExceptionsHandler] Cannot read properties of undefined (reading 'restaurant') TypeError: Cannot read properties of undefined (reading 'restaurant') at OrderService.postOrder (/Users/nx006/Documents/vscode/flutter-lv2-server/src/order/order.service.ts:36:8) at OrderController.postOrder (/Users/nx006/Documents/vscode/flutter-lv2-server/src/order/order.controller.ts:63:30) at /Users/nx006/Documents/vscode/flutter-lv2-server/node_modules/@nestjs/core/router/router-execution-context.js:38:29 at processTicksAndRejections (node:internal/process/task_queues:95:5) 'restaurant' 속성을 읽지 못한다는 게 무슨 말일까요? 애초에 Request Body에 Restaurant 속성 자체가 없는데, 400 에러도 아니고 왜 이런 에러가 서버 쪽에서 나는 지 모르겠습니다.코드 전문일단은, 현재 PostBody와 Response Body에 대한 모델입니다:// ignore_for_file: invalid_annotation_target /// order_model.dart import 'package:delivery_app/common/model/model_with_id.dart'; import 'package:delivery_app/common/utils/data_utils.dart'; import 'package:delivery_app/restaurant/model/restaurant_model.dart'; import 'package:flutter/foundation.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'order_model.freezed.dart'; part 'order_model.g.dart'; @freezed class OrderProductModel with _$OrderProductModel { factory OrderProductModel({ required String id, required String name, required String detail, @JsonKey(fromJson: DataUtils.pathToUrl) required String imgUrl, required int price, }) = _OrderProductModel; factory OrderProductModel.fromJson(Map<String, dynamic> json) => _$OrderProductModelFromJson(json); } @freezed class OrderProductAndCountModel with _$OrderProductAndCountModel { factory OrderProductAndCountModel({ required OrderProductModel product, required int count, }) = _OrderProductAndCount; factory OrderProductAndCountModel.fromJson(Map<String, dynamic> json) => _$OrderProductAndCountModelFromJson(json); } @freezed class OrderModel with _$OrderModel implements IModelWithId { factory OrderModel({ required String id, required RestaurantModel restaurant, required List<OrderProductAndCountModel> products, required int totalPrice, @JsonKey(fromJson: DataUtils.stringToDateTime) required DateTime createdAt, }) = _OrderModel; factory OrderModel.fromJson(Map<String, dynamic> json) => _$OrderModelFromJson(json); } /// post_order_body.dart import 'package:freezed_annotation/freezed_annotation.dart'; part 'post_order_body.freezed.dart'; part 'post_order_body.g.dart'; @freezed class PostOrderBody with _$PostOrderBody { const factory PostOrderBody({ required String id, required List<PostOrderBodyProduct> products, required int totalPrice, required String createdAt, }) = _PostOrderBody; factory PostOrderBody.fromJson(Map<String, dynamic> json) => _$PostOrderBodyFromJson(json); } @freezed class PostOrderBodyProduct with _$PostOrderBodyProduct { const factory PostOrderBodyProduct({ required String id, required int count, }) = _PostOrderBodyProduct; factory PostOrderBodyProduct.fromJson(Map<String, dynamic> json) => _$PostOrderBodyProductFromJson(json); } 그리고 다음은 Repository 코드입니다./// order_provider.dart import 'package:delivery_app/common/const/data.dart'; import 'package:delivery_app/common/dio/dio.dart'; import 'package:delivery_app/order/model/order_model.dart'; import 'package:delivery_app/order/model/post_order_body.dart'; import 'package:dio/dio.dart' hide Headers; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:retrofit/retrofit.dart'; part 'order_repository.g.dart'; final orderRepositoryProvider = Provider((ref) { final dio = ref.watch(dioProvider); return OrderRepository(dio, baseUrl: 'http://$ip/order'); }); // baseUrl : http://$ip/order @RestApi() abstract class OrderRepository { factory OrderRepository(Dio dio, {String baseUrl}) = _OrderRepository; @POST('/') @Headers({'accessToken': 'true'}) Future<OrderModel> postOrder({ @Body() required PostOrderBody body, }); } 다음은 Provider 입니다./// order_provider.dart // ignore_for_file: public_member_api_docs, sort_constructors_first import 'package:delivery_app/order/model/post_order_body.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:uuid/uuid.dart'; import 'package:delivery_app/order/model/order_model.dart'; import 'package:delivery_app/order/repository/order_repository.dart'; import 'package:delivery_app/user/provider/basket_provider.dart'; final orderProvider = StateNotifierProvider<OrderStateNotifier, List<OrderModel>>( (ref) => OrderStateNotifier( ref: ref, repository: ref.watch(orderRepositoryProvider), )); class OrderStateNotifier extends StateNotifier<List<OrderModel>> { final Ref ref; final OrderRepository repository; OrderStateNotifier({ required this.ref, required this.repository, }) : super([]); Future<bool> postOrder() async { const uuid = Uuid(); final id = uuid.v4(); final state = ref.read(basketProvider); try { await repository.postOrder( body: PostOrderBody( id: id, products: state .map((e) => PostOrderBodyProduct( id: e.product.id, count: e.count, )) .toList(), totalPrice: state.fold<int>( 0, (previousValue, element) => previousValue + element.product.price * element.count, ), createdAt: DateTime.now().toString(), ), ); return true; } catch (e) { print('error: $e'); return false; } } } 그리고 View 단, 특 주문하기 버튼입니다:ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: primaryColor, ), onPressed: basket.isEmpty ? null : () async { final response = await ref .read(orderProvider.notifier) .postOrder(); if (context.mounted) { if (response) { context.goNamed(OrderDonePage.routeName); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('주문에 실패했습니다.'), ), ); } } }, child: const Text('결제하기'), ),서버 쪽 코드혹시 몰라서, 에러가 발생하는 서버 쪽 코드 역시 첨부합니다. 일단 제가 건든 코드는 없습니다.import { Injectable } from '@nestjs/common'; import { CreateOrderDto } from './dto/create-order.dto'; import { CacheService } from '../cache/cache.service'; import { User } from '../user/entities/user.entity'; import { Order } from './entities/order.entity'; import { CoreService } from '../core/core.service'; import { PaginationDto } from '../core/dto/pagination.dto'; import { Pagination } from '../core/entity/pagination.entity'; import { OrderProduct } from './entities/order-product-entity'; @Injectable() export class OrderService { constructor( private cacheService: CacheService, private coreService: CoreService, ) {} paginateOrders(user: User, paginationDto: PaginationDto): Pagination<Order> { const result = this.coreService.paginate( this.cacheService.orders, paginationDto, ); return { ...result, data: result.data.map((item) => new Order(item)), }; } postOrder(user: User, createOrderDto: CreateOrderDto): Order { const newOrder = new Order({ id: createOrderDto.id, user, restaurant: this.cacheService.products.find( (x) => createOrderDto.products[0].productId === x.id, ).restaurant, products: createOrderDto.products.map((basketItem) => ({ product: new OrderProduct( this.cacheService.products.find( (product) => basketItem.productId === product.id, ), ), count: basketItem.count, })), totalPrice: createOrderDto.totalPrice, createdAt: createOrderDto.createdAt, }); this.cacheService.orders = [newOrder, ...this.cacheService.orders]; return newOrder; } } @ApiTags('order') @ApiExtraModels(PaginationDto, Order) @Controller('order') export class OrderController { constructor(private readonly orderService: OrderService) {} @UseGuards(AccessTokenGuard) @ApiOperation({ summary: '주문 Pagination', }) @ApiPaginatedOkResponseDecorator(Order, { description: 'Pagination 결과', }) @Get() paginateOrder( @Request() req, @Query() paginationDto: PaginationDto, ): Pagination<Order> { return this.orderService.paginateOrders(req.user, paginationDto); } @UseGuards(AccessTokenGuard) @Post() @ApiOperation({ summary: '주문 생성하기', }) @ApiBody({ type: CreateOrderDto, }) @ApiOkResponse({ status: 201, type: Order, }) postOrder(@Request() req, @Body() body: CreateOrderDto): Order { return this.orderService.postOrder(req.user, body); } }
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
android setup 안해도 되나요
저는 mac을 사용하는데 adroid로는 배포할 일이 없어서요 혹시 android setup은 지나쳐도 될까요??!