質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Q&A

解決済

1回答

2362閲覧

Flutter - Http.post 「intはStringのサブタイプではありません」っていうエラーが出る

ludolf

総合スコア39

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

0グッド

0クリップ

投稿2021/09/24 04:44

分からないこと

表題の通りですが、FlutterのHttp.postを使用してPHP側に値を投げようとする表題のようなエラーになります。実際のエラーコードは下記です。

E/flutter (26285): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: type 'int' is not a subtype of type 'String' in type cast

試したこと

json.encodeを使用して送るとPHP側で以下のようにKeyに全て値が入るようになったので、エンコードはしていません。

I/flutter (26285): Array
I/flutter (26285): (
I/flutter (26285): [{"id":1,"hoge":"hoge"}] =>
I/flutter (26285): )

またDataLogにあるidをString形で宣言すれば思うような動きになりました。

実際に書いているコード

重要箇所だけ抜粋しています。

dart

1//HttpでPostを投げる処理 2Future<void> onClickButton(DataLog dataLog) async { 3 response = await http.post(requestUrl, 4 body:dataLog.toMap(), 5 headers: {"Content-Type": "application/x-www-form-urlencoded"}); 6 if (response.statusCode == 200) { 7 print(response.body); 8 print("Success"); 9 } else { 10 print("response Error"); 11 } 12}

dart

1class DataLog { 2 int? id; 3 String? hoge; 4 5//<editor-fold desc="Data Methods" defaultstate="collapsed"> 6 7 DataLog({ 8 this.id, 9 this.hoge, 10 }); 11 12 DataLog copyWith({ 13 int? id, 14 String? hoge, 15 }) { 16 return new DataLog( 17 id: id ?? this.id, 18 hoge: hoge ?? this.hoge, 19 ); 20 } 21 22 23 String toString() { 24 return 'DataLog{id: $id, hoge: $hoge}'; 25 } 26 27 28 bool operator ==(Object other) => 29 identical(this, other) || 30 (other is DataLog && 31 runtimeType == other.runtimeType && 32 id == other.id && 33 hoge == other.hoge); 34 35 36 int get hashCode => id.hashCode ^ hoge.hashCode; 37 38 factory DataLog.fromMap(Map<String, dynamic> map) { 39 return new DataLog( 40 id: map['id'] as int?, 41 hoge: map['hoge'] as String?, 42 ); 43 } 44 45 Map<String, dynamic> toMap() { 46 // ignore: unnecessary_cast 47 return { 48 'id': this.id, 49 'hoge': this.hoge, 50 } as Map<String, dynamic>; 51 } 52 53//</editor-fold> 54 55}

このままだとStringで投げるようになってしまうため、分かる方ご教授頂ければ幸いです!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

http.post()は、body の型が Map であった場合、キーも値も String にキャストしています。(body.cast<String, String>()

toMap()メソッド内で、int を String に変換してください。

  • 参考

https://github.com/dart-lang/http/blob/0.13.4/lib/src/base_client.dart#L87

投稿2021/10/05 05:30

satokei

総合スコア1217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ludolf

2021/10/12 06:51

回答があったのに気づきませんでした、、 お礼が遅くなり申し訳ございません。 >Map であった場合、キーも値も String にキャストしています。 Map型だとStringにすべてキャストしないといけないんですね! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問