くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

dartのRetrofitでファイルをダウンロードする

Dart/Flutterでretrofit.dartを使って、
画像をダウンロードしたいなとおもい、いろいろ調べたときの備忘録(*´ω`*)

アップロードはよく見るけど、ダウンロードはなかなかなくて困った。。

APIClientの定義

dioを直接使う形にすれば、
ファイルのダウンロードも対応できるっぽい

  • @DioResponseType(ResponseType.bytes)をつける
  • HttpResponse<List<int>>を返す
part 'rest_client.g.dart';

@RestApi(baseUrl: "https://www.phoca.cz/")
abstract class RestClient {
  factory RestClient(Dio dio, {String baseUrl}) = _RestClient;

  @GET("images/phocadownloadsite/phocadownload-category-view-bootstrap-mobile-mobile-view.png")
  @DioResponseType(ResponseType.bytes)
  Future<HttpResponse<List<int>>> downloadFile();
}

APIClientの使い方

使い方はこんな感じ。

Future<void> main() async {
  final dio = Dio();
  final client = RestClient(dio);
  final response = await client.downloadFile();
  WidgetsFlutterBinding.ensureInitialized();

  final List<int> image = response.response.data;
  runApp(MaterialApp(
    home: Scaffold(
      body: Center(
        child: Image.memory(image),
      ),
    ),
  ));
}

おまけ: http版

httpパッケージ版。たまに見るやつ。

import 'package:http/http.dart' as http;

final url = Uri.parse("https://www.example.com/Cards/GetRandom.png");
final response = await http.get(url);
Uint8List image = response.bodyBytes;

参考にしたサイトさま