Dart Advent Calendar 2018 13日目の記事です。
本当はAngularDartの事書こうと考えてたんですが仕事とか飲み会とかで思うように時間が取れなかったのでURIライブラリーの事を簡単に書きます。
ざっくり説明
プログラム書いていると何処ぞのサーバーにリクエストを送ったりすると思うのですが、その時指定するURIを単純に文字列で連結させたりしていると柔軟性に欠けたりするため、URIの構築をオブジェクトを操作しながらプログラミング出来るようにするためのライブラリーです。Builderを使ってDartコアライブラリーにおけるURIを生成するのですが、このURIは現状だと動的なURI生成にはちょっと不便な所があるのでこのようなライブラリーを使うと良い感じでプログラミング出来るかと。
ソースはこちら
pubはこちら
ちなみに似たようなライブラリーにfluriというのがあります。以前はこちらを使っていたのですが最近は今回紹介する方のライブラリーを使ってます。
pubspec.yaml
下記のようにpubspec.yamlにuriの依存関係を追加します。
name: uri_sample
environment:
sdk: '>=2.0.0 <3.0.0'
dependencies:
uri: ^0.11.3+1
使い方
URI構築
基本的な使い方はDart特有のメソッドカスケーディングを活用してBuilderを操作してく感じです。
絶対パス
import 'package:uri/uri.dart';
void main() {
var builder = UriBuilder()
..scheme = 'http'
..host = 'localhost'
..port = 8080
..path = 'sample'
..fragment = 'test'
..queryParameters['param1'] = 'value1';
print(builder.build().toString());
}
出力結果は下記です。
http://localhost:8080/sample?param1=value1#test
相対パス
相対パスを構築したい場合は単純にhostとかを設定しなければOKです。
void main() {
var builder = UriBuilder()
..path = 'sample'
..fragment = 'test'
..queryParameters['param1'] = 'value1';
print(builder.build().toString());
}
出力結果は下記です。
sample?param1=value1#test
URLエンコーディング
これはこのライブラリーというかDartのUriクラスの恩恵です。(UriBuilder#buildにてUriが取得出来るため)
void main() {
var builder = UriBuilder()
..scheme = 'http'
..host = 'localhost'
..port = 8080
..path = 'テスト'
..queryParameters['param1'] = '値';
print(builder.build().toString());
}
出力結果は下記です。
http://localhost:8080/%E3%83%86%E3%82%B9%E3%83%88?param1=%E5%80%A4
build()を省略
単純に文字列にしたい場合はUriBuilder#toStringを呼びだせばOKです。(内部でbuild().toString()
している)
void main() {
var builder = UriBuilder()
..scheme = 'http'
..host = 'localhost'
..port = 8080;
print(builder.toString());
}
出力結果は下記です。
http://localhost:8080
今回は以上になります。