fluri 1.2.8

  • Readme
  • Changelog
  • Installing
  • 88

fluri #

Pub Build Status documentation

Examples/Usage #

Fluri is a fluent URI library for Dart built to make URI mutation easy.

The dart:core.Uri class provides an immutable representation of URIs, which makes it difficult to incrementally build them or update them at a later time. If you wanted to build a long URI from the individual pieces, you would do something like this:

Uri uri = new Uri(
  scheme: 'https',
  host: 'example.com',
  path: 'path/to/resource'

If you later wanted to update the path and add a query parameter, you'd have to do this:

uri = uri.replace(
  path: 'new/path',
  query: 'foo=true'

Now let's say you want update the query without losing what you already have:

Map query = new Map.from(uri.queryParameters);
query['bar'] = '10';
uri = uri.replace(queryParameters: query);

As you can see, incremental or fluent-style URI mutations become a hassle with the core Uri class.

With fluri, the above interactions are easy:

import 'package:fluri/fluri.dart';

Fluri fluri = new Fluri()
  ..scheme = 'https'
  ..host = 'example.com'
  ..path = 'path/to/resource';

  ..path = 'new/path'
  ..query = 'foo=true';

fluri.updateQuery({'bar': '10'});

Additional methods like appendToPath and setQueryParam make it easy to build on top of a base URL:

import 'package:fluri/fluri.dart';

Fluri base = new Fluri('https://example.com/base/');

Fluri fluri = new Fluri.from(base)
  ..setQueryParam('count', '10');

Fluri also supports multi-value parameters. To access the query parameters as Map<String, List<String>>, use queryParametersAll (just like the Uri class):

var fluri = new Fluri('/resource?format=json&format=text');
print(fluri.queryParameters); // {'format': 'text'}
print(fluri.queryParametersAll); // {'format': ['json', 'text']}

To set a single query parameter to multiple values:

var fluri = new Fluri('/resource');
fluri.setQueryParam('format', ['json', 'text']);
print(fluri.queryParametersAll); // {'format': ['json', 'text']}

Using setQueryParam will always replace existing values:

var fluri = new Fluri('/resource');
fluri.setQueryParam('format', ['json', 'text']);
fluri.setQueryParam('format', ['binary', 'text']);
print(fluri.queryParametersAll); // {'format': ['binary', 'text']}

You can use the queryParametersAll setter to set the entire query with multi-value param support:

var fluri = new Fluri('/resource');
fluri.queryParametersAll = {'format': ['json', 'text'], 'count': ['5']}
print(fluri.queryParametersAll); // {'format': ['json', 'text'], 'count': ['5']}

Again, if you need to preserve existing query parameters, you can use the updateQuery method to do so. Set mergeValues: true and any values that you provide will be merged with existing values:

var fluri = new Fluri('/resource?format=json');
fluri.updateQuery({'format': ['binary', 'text'], 'count': '5'}, mergeValues: true);
print(fluri.queryParametersAll); // {'format': ['binary', 'json', 'text'], 'count': ['5']}

Changelog #

1.2.8 #

  • Readme updates.

1.2.7 #

  • Readme updates.

1.2.6 #

  • Drop Dart 1 support.

1.2.5 #

  • Improvement: Dart 2 compatible! CI now runs on Dart 2 stable and Dart 1.

1.2.4 #

  • Improvement: Initial Dart 2 and DDC compatibility changes.

  • Documentation: Add a CODEOWNERS file.

1.2.3 #

  • Tech Debt: Update some dependency ranges for DDC compatibility.

1.2.2 #

  • Tech Debt: Add and address lints.

1.2.1 #

  • Bug Fix: Calling .appendToPath() will check for and prevent double slashes when joining the current path with the additional path.

  • Documentation: Add GitHub Issue and Pull Request templates.

1.2.0 #

  • Feature: Support for multi-value parameters.

  • Dart SDK: In order to support multi-value parameters, the minimum required Dart SDK version is now 1.15.0 since that is when the queryParametersAll field was added to the Uri class.

1.1.1 #

  • Bug Fix: FluriMixin now defaults to an empty URI when uri is set to null.

1.1.0 #

New Features:

  • appendToPath(path) - append a path literal to the current path.
  • addPathSegment(segment) - add a single path segment to the current path.
  • setQueryParam(param, value) - set a single query parameter.
  • Fluri.from(other) - construct a Fluri instance from another.
  • Fluri.fromUri(uri) - construct a Fluri instance from a Uri instance.

1.0.1 #

No source changes in this release.

  • Add code coverage reporting.
  • Minor fixes and improvements to the readme.
  • Code formatting improvements thanks to dartfmt.

1.0.0 #

  • Initial version of Fluri: a fluent URI library for Dart built to make URI mutation easy.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  fluri: ^1.2.8

2. Install it

You can install packages from the command line:

with pub:

$ pub get

with Flutter:

$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:fluri/fluri.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on May 24, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.8.1
  • pana: 0.13.8-dev

Maintenance suggestions

Maintain an example. (-10 points)

Create a short demo in the example/ directory to show how to use this package.

Common filename patterns include main.dart, example.dart, and fluri.dart. Packages with multiple examples should provide example/README.md.

For more information see the pub package layout conventions.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.2.0 <3.0.0
Dev dependencies
dependency_validator ^1.4.0
test ^1.9.2