Flutter : HttpClient
Xamarin –> Flutter の準備ができたので、
https://www.typea.info/blog/index.php/2019/10/03/xamarin_flutter
なれるために、基本的な機能を試してみる。
に続いて、HttpClient
HttpClient
ボタンを押したら、GAEに置いた疎通用のAPIを呼び出して、結果をダイアログに表示してみる。
合わせて、HTTPヘッダの内容をログに吐き出す。
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
class SecondRoute extends StatelessWidget{
Future<void> _handleHello(BuildContext context) async {
String message;
HttpClient client = new HttpClient();
await client.getUrl(Uri.parse("https://favophrase.com/api/hello"))
.then((HttpClientRequest request) {
return request.close();
})
.then((HttpClientResponse response) {
print("<status> ${response.statusCode}");
response.headers.forEach((k, v){
print("<header> $k:$v");
});
response.transform(utf8.decoder).listen((contents){
print("<contents> $contents");
message = contents;
});
});
return showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Hello'),
content: Column(
children: <Widget>[
Text(message),
],
),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Column(
children: <Widget>[
Text(
'Second Screen.',
),
RaisedButton(
onPressed: (){
_handleHello(context);
},
child: Text('Hello'),
),
RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Back'),
),
]
),
),
);
}
}
ログに、ステータスコード、HTTPヘッダ、コンテンツを出力
10-03 22:57:23.773 7372-7459/info.typea.favo_phrase I/flutter: <status> 200 10-03 22:57:23.773 7372-7459/info.typea.favo_phrase I/flutter: <header> x-cloud-trace-context:[12a5548da17d4857f598d572e6a7437d;o=1] 10-03 22:57:23.773 7372-7459/info.typea.favo_phrase I/flutter: <header> content-type:[text/plain;charset=utf-8] 10-03 22:57:23.773 7372-7459/info.typea.favo_phrase I/flutter: <header> date:[Thu, 03 Oct 2019 13:57:21 GMT] 10-03 22:57:23.773 7372-7459/info.typea.favo_phrase I/flutter: <header> content-length:[42] 10-03 22:57:23.773 7372-7459/info.typea.favo_phrase I/flutter: <header> server:[Google Frontend] 10-03 22:57:23.793 7372-7459/info.typea.favo_phrase I/flutter: <contents> Hello. This is FavoPhrase Web Service API.
アラートダイアログにコンテンツを表示
なかなかいい感じだな。
