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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1128閲覧

flutterでListをpostするとサーバー側でString型になってしまう

bws

総合スコア98

Flutter

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/06/12 05:16

Flutter 2.10.5
Tools • Dart 2.16.2 • DevTools 2.9.2

バックエンド
Laravel Framework 8.83.11
PHP 8.0.17

Flutterのchopperを使用してpostリクエストをしたいです。
パラメーターにList<APICustomerOrderItem> customer_order_itemsというリストがあるのですが、バックエンド側ではただのString型のInstance of 'APICustomerOrderItem'になってしまいます。
FlutterでパラメーターにListが含まれている場合どのように値を渡したら良いでしょうか?
よろしくお願いします。

Requestログ

1=========HTTP Request logging========= 2 baseUrl: http://localhost/api 3 url: /customer_orders/create 4 parameter: {customer_name: 〇〇, kana: 〇〇, send_id: 2, postal_code: null, address: null, address_second: null, phone: 〇〇, shop: 118, staff: 1, customer_order_items: [Instance of 'APICustomerOrderItem']} 5 method: POST 6 headers: {Authorization: 〇〇} 7 body: null 8 multipart: false 9 parts: [] 10 ======================================

customer_order_service.dart

1import 'package:chopper/chopper.dart'; 2 3import '../model_response.dart'; 4import '../../config/settings.dart'; 5import 'customer_order_model.dart'; 6import 'customer_order_model_converter.dart'; 7part 'customer_order_service.chopper.dart'; 8 9@ChopperApi() 10abstract class CustomerOrderService extends ChopperService { 11 @Post(path: '/api/customer_orders/create') 12 Future<Response<Result<APICustomerOrderQuery>>> queryCustomerOrder( 13 @QueryMap() Map<String, dynamic> params, 14 ); 15 16 static CustomerOrderService create(String apiToken) { 17 final client = ChopperClient( 18 baseUrl: Settings.apiUrl, 19 interceptors: [ 20 HttpLoggingInterceptor(), 21 (Request request) async { 22 return applyHeader(request, 'Authorization', 'Bearer $apiToken'); 23 }, 24 (Request request) async { 25 print(""" 26 =========HTTP Request logging========= 27 baseUrl: ${request.baseUrl} 28 url: ${request.url} 29 parameter: ${request.parameters} 30 method: ${request.method} 31 headers: ${request.headers} 32 body: ${request.body} 33 multipart: ${request.multipart} 34 parts: ${request.parts} 35 ====================================== 36 """); 37 return request; 38 }, 39 (Response response) async { 40 print(""" 41 =========HTTP Response logging========= 42 url: ${response.base.request!.url} 43 status: ${response.statusCode} 44 headers: ${response.headers} 45 body: ${response.body} 46 ====================================== 47 """); 48 return response; 49 }, 50 ], 51 converter: CustomerOrderModelConverter(), 52 errorConverter: const JsonConverter(), 53 services: [ 54 _$CustomerOrderService(), 55 ], 56 ); 57 return _$CustomerOrderService(client); 58 } 59}

customer_order_model_converter.dart

1import 'dart:convert'; 2import 'package:chopper/chopper.dart'; 3 4import '../model_response.dart'; 5import 'customer_order_model.dart'; 6 7class CustomerOrderModelConverter implements Converter { 8 @override 9 Request convertRequest(Request request) { 10 print('request: ' + request.toString()); 11 final req = applyHeader( 12 request, 13 contentTypeKey, 14 jsonHeaders, 15 override: false, 16 ); 17 18 return encodeJson(req); 19 } 20 21 Request encodeJson(Request request) { 22 final contentType = request.headers[contentTypeKey]; 23 if (contentType != null && contentType.contains(jsonHeaders)) { 24 print('request.body: ' + request.body.toString()); 25 return request.copyWith(body: json.encode(request.body)); 26 } 27 return request; 28 } 29 30 Response<BodyType> decodeJson<BodyType, InnerType>(Response response) { 31 final contentType = response.headers[contentTypeKey]; 32 var body = response.body; 33 // print(contentType); 34 35 if (contentType != null && contentType.contains(jsonHeaders)) { 36 body = utf8.decode(response.bodyBytes); 37 } 38 // print('body:' + body.toString()); 39 40 try { 41 final mapData = json.decode(body); 42 if (mapData['status'] != null) { 43 return response.copyWith<BodyType>( 44 body: Error(Exception(mapData['status'])) as BodyType); 45 } 46 print('mapData: ' + mapData.toString()); 47 48 final apiQuery = APICustomerOrderQuery.fromJson(mapData); 49 50 print('apiQuery:' + apiQuery.toString()); 51 return response.copyWith<BodyType>(body: Success(apiQuery) as BodyType); 52 } catch (e) { 53 chopperLogger.warning(e); 54 return response.copyWith<BodyType>( 55 body: Error(e as Exception) as BodyType); 56 } 57 } 58 59 @override 60 Response<BodyType> convertResponse<BodyType, InnerType>(Response response) { 61 return decodeJson<BodyType, InnerType>(response); 62 } 63} 64

customer_order_model.dart

1import 'package:json_annotation/json_annotation.dart'; 2 3part 'customer_order_model.g.dart'; 4 5@JsonSerializable() 6class APICustomerOrderQuery { 7 factory APICustomerOrderQuery.fromJson(Map<String, dynamic> json) => 8 _$APICustomerOrderQueryFromJson(json); 9 10 Map<String, dynamic> toJson() => _$APICustomerOrderQueryToJson(this); 11 12 APICustomerOrder customer_order; 13 List<APICustomerOrderItem> customer_order_items; 14 int status_code; 15 String message; 16 17 APICustomerOrderQuery({ 18 required this.customer_order, 19 required this.customer_order_items, 20 required this.status_code, 21 required this.message, 22 }); 23} 24 25@JsonSerializable() 26class APICustomerOrder { 27 factory APICustomerOrder.fromJson(Map<String, dynamic> json) => 28 _$APICustomerOrderFromJson(json); 29 30 Map<String, dynamic> toJson() => _$APICustomerOrderToJson(this); 31 32 int id; 33 int status; 34 String customer_name; 35 String kana; 36 int send_id; 37 String postal_code; 38 String address; 39 String address_second; 40 String phone; 41 int payment; 42 DateTime deadline; 43 int shop; 44 int staff; 45 String memo; 46 DateTime created_at; 47 DateTime updated_at; 48 49 APICustomerOrder({ 50 required this.id, 51 required this.status, 52 required this.customer_name, 53 required this.kana, 54 required this.send_id, 55 required this.postal_code, 56 required this.address, 57 required this.address_second, 58 required this.phone, 59 required this.payment, 60 required this.deadline, 61 required this.shop, 62 required this.staff, 63 required this.memo, 64 required this.created_at, 65 required this.updated_at, 66 }); 67} 68 69@JsonSerializable() 70class APICustomerOrderItem { 71 factory APICustomerOrderItem.fromJson(Map<String, dynamic> json) => 72 _$APICustomerOrderItemFromJson(json); 73 74 Map<String, dynamic> toJson() => _$APICustomerOrderItemToJson(this); 75 76 int product_id; 77 int item; 78 int quantity; 79 80 APICustomerOrderItem({ 81 required this.product_id, 82 required this.item, 83 required this.quantity, 84 }); 85} 86

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

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

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

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

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

guest

回答1

0

自己解決

@Queryで値を渡そうとしていたからでした。
@Bodyで値を渡したところ問題ありませんでした。

投稿2022/06/12 05:52

bws

総合スコア98

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問