inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

MaterialStateProperty.resolveWith 질문있습니다

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

stateless widget 같은 경우에는 상태가 변경되지 않고, 변경될 시에는 stateless widget이 새롭게 생성된다고 알고있는데요! 다음과 같이 버튼이 눌린 상태에 따라 버튼의 색깔이 바뀌는 경우에는 widget에 대한 상태 변화는 따로 나타나지 않는다고 보면될까요? 아니면 이 경우에도 버튼 색깔이 바뀔때마다 widget이 새롭게 생성되는 건가요?

  • flutter
  • 클론코딩
김영호 댓글 1 좋아요 0 조회수 323

프로바이더 위치 질문

미해결

Flutter 중급 1편 - 클린 아키텍처

마지막에 main 함수는 Provider 설정 이후, RunApp 함수가 실행이 되는 걸로 보입니다. 만약 Provider 초기화시 외부 DB와 통신하는 등의 통신시간이 길어진다면... runApp 이 실행되기 전이라서 어플이 동작하지 않을 수 있나요?

  • flutter
  • ios
  • android
Seung Min Liang 댓글 1 좋아요 0 조회수 320

섹션7 강의를 보고있어요

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

전체적으로이해가안가서그러는데 객체지향을 더봐야겠죠.함수편을봐야하나요.어느부분을봐야하나요

  • flutter
  • 클론코딩
vadain2000 댓글 2 좋아요 0 조회수 418

로고 이미지가 안불러와져요

미해결

Flutter + Firebase로 넷플릭스 UI 클론 코딩하기 [무작정 플러터]

pubspec.yaml 파일도 수정해보고, 강사님 한대로 코드 똑같이 적었는데.. 이미지가 안불러와져요. 오타 있는지 확인도 해보았는데 없었어요 home_screen.dart import '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
  • firebase
  • 클론코딩
ide2938 댓글 1 좋아요 1 조회수 592

스태틱으로 만든 메서드 빨간줄 안사라짐

미해결

[코드팩토리] [중급] 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
  • 하이브리드-앱
염호경(hokki) 댓글 1 좋아요 0 조회수 303

데이터 추상화 문제

해결됨

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
  • mvvm
  • provider
  • 클린-아키텍처
  • dependency
김보겸 댓글 2 좋아요 0 조회수 353

갑자기 '에러가 있습니다'라고 떠요!

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

원래 drawer 색상 변경하기 전에 스크롤컨트롤러 부분까지는 아무 문제 없었는데, 이제 futurebuilder안에 Scaffold를 넣고 나니까 restart 했을 때 '에러가 있습니다.'라고 뜹니다. 프로젝트상에는 에러가 하나도 없는 상태입니다. 혹시 몰라서 drawer 색상 변경 수정 전으로 코드를 돌려봐도 여전히 '에러가 있습니다.'라고 뜹니다. 정부 api를 받아오는데 문제가 발생한 경우인가요? api에서 에러가 발생하면 이 에러를 어떻게 확인할 수 있나요?

  • flutter
  • 클론코딩
zla_db 댓글 1 좋아요 0 조회수 283

로그인(auth)관련 데이터 흐름

해결됨

Flutter 중급 3편 - 의존성 주입 가이드

안녕하세요. 수업 잘 듣고 있습니다. 로그인 관련 부분을 구현하다가 궁금증이 생겨 질문드립니다. get 방식으로 약국의 마스크 수량을 가져오는 것은 약국 ViewModel 약국 UseCases fetch 마스크 수량 UseCase 마스크 Repository 마스크 (Local or Remote) Data Source 위의 과정으로 이해를 했습니다. 그런데 (학생)로그인 부분을 구현한다고 가정하면 로그인 ViewModel 로그인 UseCases fetch 학교목록 UseCase 학교목록 Repository 학교목록 (Local or Remote) Data Source post 로그인 입력정보 UseCase 로그인 Repository 로그인 Remote Data Source 이러한 흐름으로 진행하게 되는데 여기서 질문이 있습니다. 로그인 할 때 서버에서 제공하는 학교 목록을 받고 그 목록을 토대로 로그인을 하는 방식일 때 UseCase 를 저런 방식으로 설정하면 되는 것인지 repository 하면 뭔가 특정 데이터에 대한 CRUD 를 의미하는 것 같은데 로그인 정보를 제출하는 것도 이런식으로 처리해도 되는지 궁금합니다!

  • flutter
  • mvvm
  • provider
  • 클린-아키텍처
  • dependency
김보겸 댓글 1 좋아요 0 조회수 277

yaml 파일 수정 후 Pub get 눌렀더니...

해결됨

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

아래와 같은 빨간색 오류 메시지가 뜹니다. 확인 부탁드립니다^^

  • flutter
  • 클론코딩
권부영 댓글 1 좋아요 1 조회수 286

children: [1,2,3] 을 다른 파일로 넘길때 [1,2,3] 통으로 말고 1만 따로 넘기고 싶은데 어떻게 해야하나요?

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

children: [1,2,3] 을 다른 파일로 넘길때 [1,2,3] 을 변수로 바꾸고상단에 final List<Widget> children; required this.children, 이렇게 넘기는데요. 받는건 return 클래스명 ( childtrn : [1,2,3]) [1,2,3] 말고 1만 넘기고/받고 싶으면 어떻게 해야하나요?

  • flutter
  • 클론코딩
View K 댓글 1 좋아요 0 조회수 224

안드로이드 스튜디오 자동완성 관련해서 질문이 있습니다.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

안드로이드 스튜디오를 순서대로 깔았는데 자동완성이 제대로 시행되지 않고 있습니다. Control+SpaceBar를 눌러야만 자동완성이 뜨고 있어요,, 그냥 입력만 해도 자동완성을 띄우고싶은데 방법이 없을까요?

  • flutter
  • 클론코딩
  • 자동완성
  • androidstudio
규현김 댓글 1 좋아요 0 조회수 590

const HomeScreen({super.key}) 에러 발생되었습니다.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

const HomeScreen({super.key}) 에러 발생되었습니다. StatelessWidget 하면 const HomeScreen({super.key}); 자동으로const가 생성되는데요. 지우면 에러가 없어집니다. 무슨 이유인가요?

  • flutter
  • 클론코딩
vadain2000 댓글 1 좋아요 0 조회수 341

버튼 길이 정의

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

Button 길이를 정의할 때 MediaQuery랑 double.infinity 둘 중 어떤 것을 사용하는게 더 좋을까요?

  • flutter
  • 클론코딩
이우길 댓글 1 좋아요 0 조회수 259

webview 강의 진행중입니다.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

webview 강의 진행중입니다. 그냥 진행할까요? 그냥 돌아가서 진행했습니다. 결과는 나왔네요. 빨강색 에러는 뭔가요

  • flutter
  • 클론코딩
vadain2000 댓글 2 좋아요 0 조회수 536

개남님 초기 페이지 연결하기 부분 질문입니다!

해결됨

[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter

개남님 좋은 강의 감사합니다. 현재 초기 페이지 연결하기까지 진행했습니다. 조금 오류가 있는 것 같은데 순수하게 궁금해서 여쭙니다! main.dart에서 AppDataLoadCubit을 lazy:false로 뒀잖아요? 그럼 앱을 처음 다운 받았을 때 init page가 보여지고 lazy가 false이기 때문에 스플래시 화면에 도달하기 전 이미 데이터를 로드해서, 시작하기 버튼을 눌러 스플래시 화면에 도달했을 때면, 바로 로그인 체크 중 입니다..가 보여야 하는 것 아닌가요?? 제 에뮬레이터에는 데이터 로드 중 입니다..가 보이길래 영상을 다시 돌려봤는데 개남님도 같은 현상이십니다. 그리고 시작하기 버튼을 통해 init -> splash에 도달했을 때 새로고침하지 않으면 데이터 로드 중 입니다..에서 로그인 확인 중 입니다..로 바뀌지 않습니다. 단순 오류인가 해서 앱을 지워 hydrated bloc을 초기화하고 다시 확인해 보았지만 같은 현상이 일어납니다.

  • flutter
  • firebase
  • bloc
박진혁 댓글 2 좋아요 0 조회수 359

개남님 equatable에 대한 보충 설명 좀 부탁드릴게요 !

해결됨

[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter

개남님 좋은 강의 감사합니다. equatable을 계속 사용하셔서 알아봤는데 잘 이해되지 않습니다. 클래스 인스턴스 비교에 활용된다는 것과, 그 원리는 이해했는데, 모델 클래스랑 관련이 있나요??

  • flutter
  • firebase
  • bloc
박진혁 댓글 1 좋아요 0 조회수 387

Flexible에서 flex 쓰는것이 너무 헷갈립니다. 기준을 못잡겠습니다.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

Expanded에서 flex를쓰면 전체적인 비율에 적용되는건 이해했습니다. Flexible 적용하면 container안에 heigth크기를 잡아먹고 나머지는 빈공간으로 되는데요. flex 적용하면 헷갈립니다. 구체적인 예좀 들어주세요 버리는공간이 많아 지잖아요. 왜 많아지는지 모르겠습니다.

  • flutter
  • 클론코딩
vadain2000 댓글 1 좋아요 0 조회수 577

주문하기 클릭 시 Order 생성 안 되고 500에러가 뜹니다.

해결됨

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

질문 내용 주문 시 계속해서 주문에 실패했다고 떠서, 무엇이 문제이지 하고 봤는데, 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
  • 하이브리드-앱
limazero14 댓글 1 좋아요 0 조회수 415

인기 태그

인프런 TOP Writers

주간 인기글