2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DartAdvent Calendar 2018

Day 13

URIの構築をいい感じにする

Posted at

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

今回は以上になります。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?