말랑한 하루

[Flutter] Dio 시작하기 본문

개발/Flutter

[Flutter] Dio 시작하기

지수는말랑이 2023. 12. 30. 17:25
반응형

reference : https://pub.dev/packages/dio

 

Dio는 Dart/Flutter를 위한 강력한 HTTP Networking Package는 다음과 같은 기능을 지원합니다.

🍒 Global configuration

🍒 Interceptors

🍒 FormData

🍒 Request cancellation

🍒 File uploading/downloading

🍒 Timeout

🍒 Custom adapters

🍒 ransformers

이번 글귀에서는 가장 기본적인 dio의 get/post의 사용법과, 데이터에 따른 사용법 몇 가지를 알아보겠습니다. 추후 다른 강력한 기능은 개별적으로 포스팅 하려합니다.

🐇 Dio Install

※ reference : https://pub.dev/packages/dio/install

 

다음 명령문으로 설치를 시작할 때, 자신이 사용하는 Framework와 맞춰 진행하자.

dart/flutter pub add dio

이후 dart/flutter pub get 명령문을 입력하여 dio package를 사용하자.

🐇 Dio Start

사용법은 정말 쉽습니다.

🥕 Dio Create

final dio = Dio();

🥕 Dio GET

Response response;
// example 1, basic
response = await dio.get('/test?id=12&name=dio');
// example 2, using queryParameter
response = await dio.get('/test', queryParameters: {'id': 12, 'name': 'dio'});

🥕 Dio POST

response = await dio.post('/test', data: {'id': 12, 'name': 'dio'});

🥕 Dio GET+POST, 동시 실행

response = await Future.wait([dio.post('/info'), dio.get('/token')]);

🥕 Dio DOWNLOAD File

repsonse = await dio.download(
	'<https://pub.dev/>',
	(await getTempararyDirectory()).path + 'pub.html',
);

🥕 Dio Response Stream

final rs = await dio.get(
	url,
	option: Options(responseType: ResponseType.stream),
)

🥕 Dio Response for byte

final rs = await dio.get<List<int>>(
	url,
	options: Options(responseType: ResponseType.bytes),
)

🥕 Dio Post FormData

final formData = FormData.fromMap({
	'name': 'dio', 
	'date': DateTime.now().toIso8601String(),
	'file': await MultipartFile.fromFile('./text.txt', filename: 'upload.txt'),
	'files': [
		await MultipartFile.fromFile('./text.txt', filename: 'text1.txt'),
		await MultipartFile.fromFile('./text.txt', filename: 'text2.txt'),
	]
);
final response = await dio.post('/info', data: formData);

🥕 Dio Response Send Progress

final response = await dio.post(
	url: '<https://www.dtworkroom.com/doris/1/2.0.0/test>',
	data: {'aa': 'bb' * 22},
	onSendProgress: (int sent, int total) {
		print('$send $total');
	}
)

🥕 Dio Binary Cache, Using Stream

final postData = <int>[0, 1, 2];
await dio.post(
  url,
  data: Stream.fromIterable(postData.map((e) => [e])), // Creates a Stream<List<int>>.
  options: Options(
    headers: {
      Headers.contentLengthHeader: postData.length,
    },
  ),
);
반응형
Comments