Класс Uri в Dart имеет хорошую документацию, но иногда просмотр примеров упрощает понимание. В этой статье будут показаны примеры для всех основных параметров, чтобы сделать их более понятными.

Создание URI

Вы можете создать Uri, проанализировав строку следующим образом:

Uri uri = Uri.parse('http://www.example.com');

В следующих примерах будет ссылка на uri, но я опущу строку выше для экономии места. Каждый пример будет начинаться со строки URL, которую нужно проанализировать.

Свойства Ури

схема

Схема выглядит примерно так: http, https или file. Есть намного больше.

http://www.example.com
String scheme = uri.scheme;
print(scheme); // http

орган власти

Авторитетом в URL-адресе обычно является основной веб-сайт без схемы, пути или чего-либо еще.

http://www.example.com/bananas
String authority = uri.authority;
print(authority); // www.example.com

Однако обратите внимание, что полномочия также могут включать информацию о пользователе и порт:

http://user:[email protected]:8080/bananas
String authority = uri.authority;
print(authority); // user:[email protected]:8080

userInfo

Это информация о пользователе.

http://user:password@www.example.com
String userInfo = uri.userInfo;
print(userInfo); // user:password

Не помещайте пароли в URI в виде обычного текста. Это угроза безопасности, и она также устарела.

хозяин

В то время как полномочия могут включать информацию о пользователе и порт, хост - нет.

http://user:password@www.example.com:8080
String host = uri.host;
print(host); // www.example.com

порт

Это число, которое следует после двоеточия после имени хоста.

http://www.example.com:8080
int port = uri.port;
print(port); // 8080

дорожка

Это адрес какого-то ресурса после авторитета.

http://www.example.com/fruit/bananas
String path = uri.path;
print(path); //  /fruit/bananas

pathSegments

Путь часто состоит из нескольких сегментов, поэтому вместо того, чтобы разбирать их самостоятельно, вы можете получить их в виде следующего списка:

http://www.example.com/fruit/bananas
List<String> pathSegments = uri.pathSegments;
print(pathSegments); // [fruit, bananas]

запрос

Это часть, которая идет после ?.

http://www.example.com/fruit?q=yellow
String query = uri.query;
print(query); // q=yellow

Обратите внимание, что он закодирован в URL (см. %20):

http://www.example.com/fruit?q=yellow&size=very%20big
String query = uri.query;
print(query); // q=yellow&size=very%20big

queryParameters

Это декодирует параметры запроса и возвращает карту пар ключ-значение:

http://www.example.com/fruit?q=yellow&size=very%20big
Map<String, String> queryParameters = uri.queryParameters;
print(queryParameters); // {q: yellow, size: very big}

queryParametersAll

Вы можете использовать это для сбора нескольких параметров запроса с одним и тем же ключом. Например, следующий URI имеет один user с именем bob и другой user с именем mary.

http://www.example.com/fruit?user=bob&user=mary&job=doctor
Map<String, List<String>> all = uri.queryParametersAll;
print(all); // {user: [bob, mary], job: [doctor]}

Если бы вы использовали только queryParameters, то повторяющиеся ключи были бы отброшены:

http://www.example.com/fruit?user=bob&user=mary&job=doctor
Map<String, String> queryParameters = uri.queryParameters;
print(queryParameters); // {user: mary, job: doctor}

фрагмент

Это часть, которая идет после #, также называемая привязкой для ссылки на контент на странице.

http://www.example.com/fruit#bananas
String fragment = uri.fragment;
print(fragment); // bananas

Заключение

Понимание компонентов URI упрощает анализ. Это особенно полезно при создании сервера.

Полный код

Хотите поиграться с этим сами? Начни здесь:

void main() async {
  final uri = Uri.parse('http://[email protected]:8080/fruit/bananas?q=ripe');
  final value = uri.scheme;
  print(value);
}

Смотрите также