microCMSとFlutterを使ってメディアを作るチュートリアルを行ったときのことです。
puv.devのHTTPプラグインをインストールしてhttp.getしたときにエラーが出たのでその解消法を記述します。
microCMSさんおブログの通り進めて行くのですが、microCMSに対してHTTPリクエストを行う部分のhttp.getのところで下記のようなエラーが出てきました。
main.dart
void _loadListItem() async {
final result = await http.get(
'https://sample.microcms.io/api/v1/articles?fields=id,publishedAt,title,eyecatching',
headers: {"X-API-KEY": 'fvvav89v-0019-65f6-4rg2-vfvf9v08fvaf'});
List contents = json.decode(result.body)['contents'];
_listItems.clear();
_listItems.addAll(contents.map((content) => ListItem.fromJSON(content)));
}
※ APIは適当に書いています。
lib/main.dart:28:9: Error: The argument type 'String' can't be assigned to the parameter type 'Uri'.
- 'Uri' is from 'dart:core'.
'https://sample.microcms.io/api/v1/articles?fields=id,publishedAt,title,eyecatching',
^
メッセージ通り、Uri型な関数が必要なのに、String型として関数を受け取っているためエラーがでています。
package:http 0.13.0
では変更が行われ、以前はString
またはUri
を渡すことができたAPIは、すべてUriを必要とするようになりました。
ちょうどNull safetyが対応してきたやつですね。
解消法
Uri.parse
で置換することで解消することができます。
以前の書き方 | 置換する方法 |
---|---|
http.get('hogehoge') | http.get(Uri.parse('hogehoge')) |
※ http.post
の場合も同じです。
ということなので上のソースを書き換えるとこのようになります。
main.dart
void _loadListItem() async {
final result = await http.get(
Uri.parse(
'https://sample.microcms.io/api/v1/articles?fields=id,publishedAt,title,eyecatching'),
headers: {"X-API-KEY": 'fvvav89v-0019-65f6-4rg2-vfvf9v08fvaf'});
List contents = json.decode(result.body)['contents'];
_listItems.clear();
_listItems.addAll(contents.map((content) => ListItem.fromJSON(content)));
}
無事エラーが解消されました。
バージョンには気をつけてください。
参考: