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

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

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

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

Laravel

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

PHP

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

解決済

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

bws
bws

総合スコア98

Flutter

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

Laravel

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

PHP

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

1回答

0評価

0クリップ

239閲覧

投稿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ログ

=========HTTP Request logging========= baseUrl: http://localhost/api url: /customer_orders/create 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']} method: POST headers: {Authorization: 〇〇} body: null multipart: false parts: [] ======================================

customer_order_service.dart

import 'package:chopper/chopper.dart'; import '../model_response.dart'; import '../../config/settings.dart'; import 'customer_order_model.dart'; import 'customer_order_model_converter.dart'; part 'customer_order_service.chopper.dart'; @ChopperApi() abstract class CustomerOrderService extends ChopperService { @Post(path: '/api/customer_orders/create') Future<Response<Result<APICustomerOrderQuery>>> queryCustomerOrder( @QueryMap() Map<String, dynamic> params, ); static CustomerOrderService create(String apiToken) { final client = ChopperClient( baseUrl: Settings.apiUrl, interceptors: [ HttpLoggingInterceptor(), (Request request) async { return applyHeader(request, 'Authorization', 'Bearer $apiToken'); }, (Request request) async { print(""" =========HTTP Request logging========= baseUrl: ${request.baseUrl} url: ${request.url} parameter: ${request.parameters} method: ${request.method} headers: ${request.headers} body: ${request.body} multipart: ${request.multipart} parts: ${request.parts} ====================================== """); return request; }, (Response response) async { print(""" =========HTTP Response logging========= url: ${response.base.request!.url} status: ${response.statusCode} headers: ${response.headers} body: ${response.body} ====================================== """); return response; }, ], converter: CustomerOrderModelConverter(), errorConverter: const JsonConverter(), services: [ _$CustomerOrderService(), ], ); return _$CustomerOrderService(client); } }

customer_order_model_converter.dart

import 'dart:convert'; import 'package:chopper/chopper.dart'; import '../model_response.dart'; import 'customer_order_model.dart'; class CustomerOrderModelConverter implements Converter { @override Request convertRequest(Request request) { print('request: ' + request.toString()); final req = applyHeader( request, contentTypeKey, jsonHeaders, override: false, ); return encodeJson(req); } Request encodeJson(Request request) { final contentType = request.headers[contentTypeKey]; if (contentType != null && contentType.contains(jsonHeaders)) { print('request.body: ' + request.body.toString()); return request.copyWith(body: json.encode(request.body)); } return request; } Response<BodyType> decodeJson<BodyType, InnerType>(Response response) { final contentType = response.headers[contentTypeKey]; var body = response.body; // print(contentType); if (contentType != null && contentType.contains(jsonHeaders)) { body = utf8.decode(response.bodyBytes); } // print('body:' + body.toString()); try { final mapData = json.decode(body); if (mapData['status'] != null) { return response.copyWith<BodyType>( body: Error(Exception(mapData['status'])) as BodyType); } print('mapData: ' + mapData.toString()); final apiQuery = APICustomerOrderQuery.fromJson(mapData); print('apiQuery:' + apiQuery.toString()); return response.copyWith<BodyType>(body: Success(apiQuery) as BodyType); } catch (e) { chopperLogger.warning(e); return response.copyWith<BodyType>( body: Error(e as Exception) as BodyType); } } @override Response<BodyType> convertResponse<BodyType, InnerType>(Response response) { return decodeJson<BodyType, InnerType>(response); } }

customer_order_model.dart

import 'package:json_annotation/json_annotation.dart'; part 'customer_order_model.g.dart'; @JsonSerializable() class APICustomerOrderQuery { factory APICustomerOrderQuery.fromJson(Map<String, dynamic> json) => _$APICustomerOrderQueryFromJson(json); Map<String, dynamic> toJson() => _$APICustomerOrderQueryToJson(this); APICustomerOrder customer_order; List<APICustomerOrderItem> customer_order_items; int status_code; String message; APICustomerOrderQuery({ required this.customer_order, required this.customer_order_items, required this.status_code, required this.message, }); } @JsonSerializable() class APICustomerOrder { factory APICustomerOrder.fromJson(Map<String, dynamic> json) => _$APICustomerOrderFromJson(json); Map<String, dynamic> toJson() => _$APICustomerOrderToJson(this); int id; int status; String customer_name; String kana; int send_id; String postal_code; String address; String address_second; String phone; int payment; DateTime deadline; int shop; int staff; String memo; DateTime created_at; DateTime updated_at; APICustomerOrder({ required this.id, required this.status, required this.customer_name, required this.kana, required this.send_id, required this.postal_code, required this.address, required this.address_second, required this.phone, required this.payment, required this.deadline, required this.shop, required this.staff, required this.memo, required this.created_at, required this.updated_at, }); } @JsonSerializable() class APICustomerOrderItem { factory APICustomerOrderItem.fromJson(Map<String, dynamic> json) => _$APICustomerOrderItemFromJson(json); Map<String, dynamic> toJson() => _$APICustomerOrderItemToJson(this); int product_id; int item; int quantity; APICustomerOrderItem({ required this.product_id, required this.item, required this.quantity, }); }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Flutter

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

Laravel

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

PHP

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