ありがたいことに、ネット上には便利なAPIが多数公開されていて、開発者はそれを使って簡単にいい感じの機能を実装することができます。
今回はランダムで猫の画像が表示されるアプリを作ってみました👇
ここにサンプルを置いておくので動かしてみてください。
https://github.com/sugawarakensuke/package_samples
こちらのrandom cat
APIを使わせてもらいました。猫画像のURLをJSON形式でランダムで返してくれるAPIです。ユニークですね〜
https://aws.random.cat/meow
まずhttpを使えるようにします。
ここからインストールします👉 https://pub.dev/packages/http/install
その後flutter pub get
そしたら実際に使うファイルにインポートします。
import 'package:http/http.dart' as http;
import 'package:http/http.dart';
このメソッドでAPIを叩いて、データを取得しています。まずはstatefulWidget
のinitState()
内で前もって取得します。
void initState() {
data = http.get(Uri.parse('https://aws.random.cat/meow'));
super.initState();
}
そしてそのdata
をFutureBuilder
のfuture
プロパティに設定します。FutureBuilder
については後述。
FutureBuilder(
future: data,
builder: (context, AsyncSnapshot<Response?> snapshot) {
//
}
)
非同期で取得した値を使って表示するにはFutureBuilder
というWidgetを使うとよいです。
FutureBuilder
を使えばFutureの最新の状態を特定でき、データの読み込み中と読み込み完了時の表示を選択することができます。
今回はsnapshot.connectionState != ConnectionState.done
つまり通信中の場合はぐるぐるを表示させて、
そうじゃない場合にデータをJSONからデコードして表示させています。
FutureBuilder(
future: data,
builder: (context, AsyncSnapshot<Response?> snapshot) {
//通信状態がdoneじゃない場合(=まだ通信中な場合)
if (snapshot.connectionState != ConnectionState.done) {
return Container(
height: 300,
alignment: Alignment.center,
child: CircularProgressIndicator(),
);
} else {
//通信が終わってる場合
final response = snapshot.data;
final url = jsonDecode(response!.body)['file'];
return Container(height: 300,child: Image.network(url));
}
},
),
FutureBuilderの使い方: https://www.youtube.com/watch?v=zEdw_1B7JHY
面白いAPIのまとめ記事: https://qiita.com/danishi/items/42d8adf6291515e62284
いろんなAPIがあって楽しいです!うまく使えば面白い機能を作れそうです!
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More