2017-08-23 8 views
1

書類によると、それはhttps://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4のForm Postルールに従う必要があります。その情報を見ても、複雑なオブジェクトやマップの点で私にはあまり働かなかった。ダーツURIクラスQueryParametersはどのようにマップ値を処理しますか?

たとえば、リストがある場合:リスト内の各アイテムをストリング化する必要があります。

var params = {"list": [1,2,3]}; 
// needs to be stringed. 
params["list"] = params["list"].map((item)=>item.toString()).toList(); 

シンプルです。また、すべての基本項目も文字列でなければなりません。

var params = {"number": 1, "boolean": true}; 
params = params.forEach((k,v)=> params[k].toString()); 

マップはどのように扱いますか?

var params = {"map": {"a":1,"b":"foo","c":false,"d":[]}}; 
// ?? 

私のアプリではとダーツパッドでテストした後、あなたはすべてが文字列であることを確認する必要があるようですので、私は効果的リスト、マップ、そしておそらくより複雑なをカバーする方法を考え出すしようとしていますエンコードするオブジェクト。

var params = {}; 
params["list"] = [1,2,3]; 
params["number"] = 1; 
params["boolean"] = true; 
params["map"] = {"a":1,"b":"foo","c":false,"d":[]}; 
params.forEach((String key, dynamic value){ 
    if(value is List){ 
    params[key] = value.map((v)=>v.toString()).toList(); 
    }else if(value is Map){ 
    // ???? 
    }else{ 
    params[key] = value.toString(); 
    } 
    //maybe have an additional one for custom classes, but if they are being passed around they should already have their own JSON Parsing implementations. 
} 

理想的には、この結果をに渡すことになります。私は、リストの問題を解決しながら、今

Uri myUri = new Uri(queryParameters: params); 

と、それがマップを受け取るようにしていません。私の一部は地図全体を文字列にしたいと思っていましたが、良い方法があるかどうかはわかりませんでした。私は誰かが誤って配列を文字列にしたとき、それは私に与えられていないことを知っています:?id = 1 & id = 2ではなく?id =%5B1%2C2%5Dです。

答えて

1

私はマップに特別なサポートはないと思います。クエリパラメータ自体です。文字列から文字列または文字列から文字列の一覧へのマップです。

他のすべては、クエリパラメータとして渡す前に、まずこの形式にする必要があります。

単純なアプローチは、JSONでマップをエンコードし、結果の文字列を単一のクエリパラメータとして渡すことです。

+1

これは実際には私が最終状態になると思っていたもので、マップをエンコードしてその途中で送信します。私は特定の基準があるかどうかはわかりませんでしたが、私はそれを遵守すべきです。 :)私は答えとして非常にまだそれをタグ付けしたくないのかもしれません。 – Fallenreaper

+1

確かに、心配はありません。答えを受け入れるかどうかはいつでもあなた次第です。 –

関連する問題