inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Dio onRequest Interceptor 작업하기

restaurant_repository.g.dart header 생성 문제

265

맥북유저

작성한 질문수 9

0

import 'package:code_factory/restaurant/model/restaurant_detail_model.dart';
import 'package:dio/dio.dart' hide Headers;
// import 'package:retrofit/http.dart';
import
'package:retrofit/retrofit.dart';

part 'restaurant_repository.g.dart';

@RestApi()
abstract class RestaurantRepository {
factory RestaurantRepository(Dio dio, {String baseUrl}) =
_RestaurantRepository;

@GET('/{id}')
@Headers({'accessToken' : 'true'})
Future<RestaurantDetailModel> getRestaurantDetail({
@Path() required String id,
});
}

 

 

 

 

 

// GENERATED CODE - DO NOT MODIFY BY HAND

part of
'restaurant_repository.dart';

// **************************************************************************
// RetrofitGenerator
// **************************************************************************

// ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers

class
_RestaurantRepository implements RestaurantRepository {
_RestaurantRepository(
this._dio, {
this.baseUrl,
});

final Dio _dio;

String? baseUrl;

@override
Future<RestaurantDetailModel> getRestaurantDetail(
{required String id}) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{r'accessToken': 'true'};
_headers.removeWhere((k, v) => v == null);
final Map<String, dynamic>? _data = null;
final _result = await _dio.fetch<Map<String, dynamic>>(
_setStreamType<RestaurantDetailModel>(Options(
method: 'GET',
headers: _headers,
extra: _extra,
)
.compose(
_dio.options,
'/${id}',
queryParameters: queryParameters,
data: _data,
)
.copyWith(
baseUrl: _combineBaseUrls(
_dio.options.baseUrl,
baseUrl,
))));
final value = RestaurantDetailModel.fromJson(_result.data!);
return value;
}

RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
if (T != dynamic &&
!(requestOptions.responseType == ResponseType.bytes ||
requestOptions.responseType == ResponseType.stream)) {
if (T == String) {
requestOptions.responseType = ResponseType.plain;
} else {
requestOptions.responseType = ResponseType.json;
}
}
return requestOptions;
}

String _combineBaseUrls(
String dioBaseUrl,
String? baseUrl,
) {
if (baseUrl == null || baseUrl.trim().isEmpty) {
return dioBaseUrl;
}

final url = Uri.parse(baseUrl);

if (url.isAbsolute) {
return url.toString();
}

return Uri.parse(dioBaseUrl).resolveUri(url).toString();
}
}

생성된 repository.g.dart 파일을 보시면

final _headers = <String, dynamic>{r'accessToken': 'true'};

 

accessToken 앞에 계속 r 이 붙습니다.

왜이럴까요..

flutter 하이브리드-앱

답변 1

0

코드팩토리

안녕하세요!

정상입니다.

확인 해보시면 알게 되시겠지만 실제 보낼때는 accessToken이라는 헤더로 정상적으로 갑니다.

감사합니다!

0

맥북유저

넵 통신은 정상이지만 헤더에서 찾을 때 r'accessToken' 으로 찾아야 해서요
파일 생성시에 고칠 수 있는 방법은 없을까요>

0

코드팩토리

그런 방법은 없습니다. 플러그인에 작성돼있는 인스트럭션대로 생성되는 파일이라 원하는 변경사항이 있다면 직접 포크 떠서 만드셔야합니다.

Isar 마지막 업데이트는 2년전입니다.

0

30

0

FlutterSecureStorage 질문

0

31

0

Dio onError Interceptor 만드는 부분에 질문이 있습니다.

0

79

2

관리자 기능에 대한 질문

0

100

2

part 'restaurant_model.g.dart';

0

92

1

36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.

0

56

2

2번 반환 상황 관련 질문

0

61

2

riverpod 3.0

0

139

2

Asset folder??

0

82

2

디자이너와 협업 시 프레임 크기 설정 관련 질문

0

113

2

FutureProvider, StateNotifierProvider 선택 기준

0

70

2

컴포넌트 모델화

0

64

2

쿼리 파라미터

0

84

2

화면 안보임

0

68

2

PaginationListView

0

54

1

강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.

0

101

2

프로토타입이미지

0

62

2

여러 객체를 상태 관리하는 방법에 대한 질문

0

84

2

장바구니 결제하기 응답이 500이 옵니다.

0

105

2

removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?

0

67

2

이 두가지는 완전히 동일한 기능인가요?

0

106

3

내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...

0

77

2

_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?

0

86

2

코딩 작성 순서 관련 질문

0

88

2