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;