A comprehensive, cross-platform path manipulation library for Dart.

Related tags

Utilities path
Overview

A comprehensive, cross-platform path manipulation library for Dart.

The path package provides common operations for manipulating paths: joining, splitting, normalizing, etc.

We've tried very hard to make this library do the "right" thing on whatever platform you run it on, including in the browser. When you use the top-level functions, it will assume the current platform's path style and work with that. If you want to explicitly work with paths of a specific style, you can construct a p.Context for that style.

Using

The path library was designed to be imported with a prefix, though you don't have to if you don't want to:

import 'package:path/path.dart' as p;

The most common way to use the library is through the top-level functions. These manipulate path strings based on your current working directory and the path style (POSIX, Windows, or URLs) of the host platform. For example:

p.join('directory', 'file.txt');

This calls the top-level join() function to join "directory" and "file.txt" using the current platform's directory separator.

If you want to work with paths for a specific platform regardless of the underlying platform that the program is running on, you can create a Context and give it an explicit [Style]:

var context = p.Context(style: Style.windows);
context.join('directory', 'file.txt');

This will join "directory" and "file.txt" using the Windows path separator, even when the program is run on a POSIX machine.

Stability

The path package is used by many Dart packages, and as such it strives for a very high degree of stability. For the same reason, though, releasing a new major version would probably cause a lot of versioning pain, so some flexibility is necessary.

We try to guarantee that operations with valid inputs and correct output will not change. Operations where one or more inputs are invalid according to the semantics of the corresponding platform may produce different output over time. Operations for which path produces incorrect output will also change so that we can fix bugs.

Also, the path package's URL handling is based on the WHATWG URL spec. This is a living standard, and some parts of it haven't yet been entirely solidified by vendor support. The path package reserves the right to change its URL behavior if the underlying specification changes, although if the change is big enough to break many valid uses we may elect to treat it as a breaking change anyway.

FAQ

Where can I use this?

The path package runs on the Dart VM and in the browser under both dart2js and Dartium. On the browser, window.location.href is used as the current path.

Why doesn't this make paths first-class objects?

When you have path objects, then every API that takes a path has to decide if it accepts strings, path objects, or both.

  • Accepting strings is the most convenient, but then it seems weird to have these path objects that aren't actually accepted by anything that needs a path. Once you've created a path, you have to always call .toString() on it before you can do anything useful with it.

  • Requiring objects forces users to wrap path strings in these objects, which is tedious. It also means coupling that API to whatever library defines this path class. If there are multiple "path" libraries that each define their own path types, then any library that works with paths has to pick which one it uses.

  • Taking both means you can't type your API. That defeats the purpose of having a path type: why have a type if your APIs can't annotate that they expect it?

Given that, we've decided this library should simply treat paths as strings.

How cross-platform is this?

We believe this library handles most of the corner cases of Windows paths (POSIX paths are generally pretty straightforward):

  • It understands that both "/" and "\" are valid path separators, not just "\".

  • It can accurately tell if a path is absolute based on drive-letters or UNC prefix.

  • It understands that "/foo" is not an absolute path on Windows.

  • It knows that "C:\foo\one.txt" and "c:/foo\two.txt" are two files in the same directory.

What is a "path" in the browser?

If you use this package in a browser, then it considers the "platform" to be the browser itself and uses URL strings to represent "browser paths".

Comments
  • Path and Dart SDK disagree about Windows behavior of absolute file URIs without drive names

    Path and Dart SDK disagree about Windows behavior of absolute file URIs without drive names

    The following script illustrates the problem:

    import 'package:path/path.dart' as path;
    
    void check(Uri uri) {
      print('For uri: $uri');
      print('  uri.toFilePath(windows: true) => "${uri.toFilePath(windows: true)}"');
      print('  path.windows.fromUri(uri) => "${path.windows.fromUri(uri)}"');
    }
    
    main() {
      check(Uri.parse('file:///foo'));
      check(Uri.parse('/foo'));
    }
    

    This produces the following output:

    For uri: file:///foo
      uri.toFilePath(windows: true) => "\foo"
      path.windows.fromUri(uri) => "foo"
    For uri: /foo
      uri.toFilePath(windows: true) => "\foo"
      path.windows.fromUri(uri) => "foo"
    

    I realize that these file URIs aren't especially Windows-like, but it would be nice if the SDK and the path package treated them in the same way. I tend to favor the behavior of uri.toFilePath(windows: true), because at least it produces something that doesn't look like a relative path.

    This bug is at the root of a unit test failure in analyzer--see https://github.com/dart-lang/sdk/issues/27870.

    opened by stereotype441 18
  • Methods relative() and isWithin() should be faster when work with absolute paths

    Methods relative() and isWithin() should be faster when work with absolute paths

    @munificent @nex3 @bwilkerson

    I tried to rollback our AbsolutePathContext and switch to package:path version 1.3.7. Unfortunately it is still slow. As you can see, it uses about 30% of total analysis time.

    image

    For comparison, with our AbsolutePathContext the method isWithin is barely visible. image

    enhancement 
    opened by scheglov 11
  • Make PathSet non-nullable

    Make PathSet non-nullable

    The only reason I originally wrote this to gracefully handle nulls was because it was difficult to statically guarantee that no nulls would sneak in. Now that it's possible to statically declare that, there's no real use-case for having this be a Set<String?>.

    cla: yes 
    opened by nex3 8
  • flutter_test from sdk depends on path 1.8.0

    flutter_test from sdk depends on path 1.8.0

    Not sure if I should post this on the Flutter repo but it's impossible to upgrade to 1.8.1 with Flutter 2.8.1 • channel stable because of flutter_test.

    Error message is: Because every version of flutter_test from sdk depends on path 1.8.0 and [app_name] depends on path ^1.8.1, flutter_test from sdk is forbidden.

    opened by Ruzo 7
  • relative() returns incorrect result

    relative() returns incorrect result

    We're seeing a failure in flutter's tests (https://github.com/flutter/flutter/issues/1709) which looks like a bug in path's relative() function:

    from: /var/folders/00/0w978000h01000cxqpysvccm003j4x/T/flutter_toolsZUIVMq
    to:   /Users/devoncarew/projects/flutter/flutter/packages
    
    result = path.relative(to, from: from);
    
    result: ../../../../../../Users/devoncarew/projects/flutter/flutter/packages
    

    The relative result isn't correct. It's off by one in the number of times it should traverse up to the parent directory. From flutter_toolsZUIVMq it can only go up 5 times to /, but it has 6 ..'s in the relative result.

    opened by devoncarew 7
  • Refactor a List.generate to List.filled

    Refactor a List.generate to List.filled

    The meaning is more clear without the indirection of a closure that always returns the same value, and it will have better performance.

    Also replace the List.insert by making the length longer to start with and conditionally setting the first value.

    cla: yes 
    opened by natebosch 6
  • relative() and isWithin() are not case insensitive on Windows

    relative() and isWithin() are not case insensitive on Windows

    This:

    import 'package:path/path.dart' as p;
    
    main() {
      print(p.windows.isWithin(r"a\b", r"a\B\c"));
      print(p.windows.isWithin(r"a:b\c", r"A:\b\c\d"));
      print(p.windows.relative(r"a:\b\c\d", from: r"a:\B\c"));
      print(p.windows.relative(r"a:\b\c\d", from: r"A:\b\c"));
    }
    

    Prints:

    false
    false
    ..\..\b\c\d
    d
    

    The first three are wrong. Interestingly, the last is right!

    So isWithin() is not handling case sensitivity of drive letters or paths. relative() is handling drive letters, but not paths.

    bug 
    opened by munificent 5
  • Handle parsing multiple extensions

    Handle parsing multiple extensions

    path.extension("main.dart.js"); // -> ".js"
    

    Maybe, add an optional parameter to ask it to return ".dart.js".

    Thanks.

    enhancement 
    opened by tejainece 5
  • Can the latest version be compatible with the latest stable version of Flutter?

    Can the latest version be compatible with the latest stable version of Flutter?

    Excuse me, I have a question: Can the latest version of path be compatible with the latest stable version of Flutter (which is 1.17.1)? because when I try to download the latest version of path, it say that flutter test required 1.6.4, so it failed to download ... Thank you!

    question 
    opened by dinhan1192 4
  • Drop implementation of `retype`

    Drop implementation of `retype`

    Technically it's possible that there exists a reference using PathSet and calling retype but the liklihood is very small and since we're in the -dev versions of the SDK it's not worth marking this a breaking change.

    cla: yes 
    opened by natebosch 4
  • canonicalize on MacOS is broken

    canonicalize on MacOS is broken

    canonicalize promises to "return the same path for two different input paths if and only if both input paths point to the same location" [1]. On Mac OS with its case insensitive file system this is not true: TEST.dart and test.dart reference the same file on Mac OS. However, canonicalize("TEST.dart") is not equal to canonicalize("test.dart"):

    print(canonicalize("TEST.dart"));  // this prints "TEST.dart"
    print(canonicalize("test.dart"));   // this prints "test.dart"
    

    [1] https://www.dartdocs.org/documentation/path/1.4.1/path/canonicalize.html

    bug 
    opened by goderbauer 4
  • Why does .dirname(String) return '.' instead of '' when passed an empty (non-null) string

    Why does .dirname(String) return '.' instead of '' when passed an empty (non-null) string

    Why does the .dirname() method return a period instead of an empty string when passed an empty string? It's a pain to filter when passing the output to the ui before the incoming path is populated by the user. Perhaps there is a good reason?

    This is the offending source code within the path package:

        final parsed = _parse(path);
        parsed.removeTrailingSeparators();
        if (parsed.parts.isEmpty) return parsed.root ?? '.';
        if (parsed.parts.length == 1) return parsed.root ?? '.';
        parsed.parts.removeLast();
        parsed.separators.removeLast();
        parsed.removeTrailingSeparators();
        return parsed.toString();
      }
    
    opened by sidetraxaudio 0
  • `isWithin` has surprising behavior when `base` ends with `/.` and `child` starts with `.`

    `isWithin` has surprising behavior when `base` ends with `/.` and `child` starts with `.`

    import 'package:path/path.dart';
    
    void main(List<String> args) {
      print(isWithin('/dir/.', '/dir/.file'));
      print(isWithin('/dir/.', '/dir/file'));
    }
    

    Prints

    > dart a.dart
    false
    true
    
    opened by sigurdm 0
  • Support \\?\ prefix in UNC Windows paths

    Support \\?\ prefix in UNC Windows paths

    See https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#win32-file-namespaces:

    For file I/O, the "\\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system.

    Currently, path supports UNC paths, but does not support this prefix.

    This prohibits Dart Sass from properly parsing such paths with toUri: https://github.com/sass/dart-sass/issues/1258

    enhancement help wanted 
    opened by Awjin 2
  • Exception: NoSuchMethodError: The method 'pathFromUri' was called on null.

    Exception: NoSuchMethodError: The method 'pathFromUri' was called on null.

    I'm running into issues running flutter test- sometimes it's successful and other times it's not. I'm wondering if anyone has any ideas as to whether this is an issue on my end or not. Thanks.


    This is an example of the output.

    Shell: [ERROR:flutter/shell/testing/tester_main.cc(302)] Unhandled exception
    Shell: Exception: NoSuchMethodError: The method 'pathFromUri' was called on null.
    Shell: Receiver: null
    Shell: Tried calling: pathFromUri(Instance of '_SimpleUri')
    Shell: Stack trace: #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
    Shell: #1      Context.fromUri (package:path/src/context.dart:1006:19)
    Shell: #2      Context.prettyUri (package:path/src/context.dart:1068:28)
    Shell: #3      prettyUri (package:path/path.dart:458:34)
    Shell: #4      Frame.library (package:stack_trace/src/frame.dart:105:12)
    Shell: #5      Frame.location (package:stack_trace/src/frame.dart:119:14)
    Shell: #6      Chain.toString.<anonymous closure>.<anonymous closure> (package:stack_trace/src/chain.dart:256:33)
    Shell: #7      MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
    Shell: #8      ListIterable.fold (dart:_internal/iterable.dart:195:30)
    Shell: #9      Chain.toString.<anonymous closure> (package:stack_trace/src/chain.dart:257:12)
    Shell: #10     MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
    Shell: #11     ListIterable.fold (dart:_internal/iterable.dart:195:30)
    Shell: #12     Chain.toString (package:stack_trace/src/chain.dart:258:8)
    Shell: #13     LazyChain.toString (package:stack_trace/src/lazy_chain.dart:32:31)
    Shell: #14     RemoteException.serialize (package:test_api/src/util/remote_exception.dart:51:48)
    Shell: #15     RemoteListener._sendError (package:test_api/src/remote_listener.dart:158:32)
    Shell: #16     RemoteListener.start.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:130:11)
    Shell: #17     _rootRunBinary (dart:async/zone.dart:1222:13)
    Shell: #18     _CustomZone.runBinary (dart:async/zone.dart:1107:19)
    Shell: #19     runZonedGuarded.<anonymous closure> (dart:async/zone.dart:1601:18)
    Shell: #20     _CustomZone.handleUncaughtError (dart:async/zone.dart:1076:19)
    Shell: #21     Future._propagateToListeners (dart:async/future_impl.dart:610:16)
    Shell: #22     Future._completeError (dart:async/future_impl.dart:537:5)
    Shell: #23     Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:593:7)
    Shell: #24     _rootRun (dart:async/zone.dart:1190:13)
    Shell: #25     _CustomZone.run (dart:async/zone.dart:1093:19)
    Shell: #26     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
    Shell: #27     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
    Shell: #28     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
    Shell: #29     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
    Shell:
    

    I have put some logging in place and noticed that style is sometimes null during the execution, but not always which you can see below: style.pathFromUri(_parseUri(uri))

    flutter test test/integration-tests

    00:02 +0: loading <path>/test/integration-tests/ui/apps/forgot_password_test.dart                                                                                                                                                                                         
    STYLE: posix
    00:03 +0: loading <path>/test/integration-tests/ui/apps/settings_test.dart                                                                                                                                                                                                
    STYLE: posix
    Shell: STYLE: null
    Shell: [ERROR:flutter/shell/testing/tester_main.cc(302)] Unhandled exception
    Shell: Exception: NoSuchMethodError: The method 'pathFromUri' was called on null.
    Shell: Receiver: null
    Shell: Tried calling: pathFromUri(Instance of '_SimpleUri')
    Shell: Stack trace: #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
    Shell: #1      Context.fromUri (package:path/src/context.dart:1006:19)
    Shell: #2      Context.prettyUri (package:path/src/context.dart:1068:28)
    Shell: #3      prettyUri (package:path/path.dart:458:34)
    Shell: #4      Frame.library (package:stack_trace/src/frame.dart:105:12)
    Shell: #5      Frame.location (package:stack_trace/src/frame.dart:119:14)
    Shell: #6      Chain.toString.<anonymous closure>.<anonymous closure> (package:stack_trace/src/chain.dart:256:33)
    Shell: #7      MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
    Shell: #8      ListIterable.fold (dart:_internal/iterable.dart:195:30)
    Shell: #9      Chain.toString.<anonymous closure> (package:stack_trace/src/chain.dart:257:12)
    Shell: #10     MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
    Shell: #11     ListIterable.fold (dart:_internal/iterable.dart:195:30)
    Shell: #12     Chain.toString (package:stack_trace/src/chain.dart:258:8)
    Shell: #13     LazyChain.toString (package:stack_trace/src/lazy_chain.dart:32:31)
    Shell: #14     RemoteException.serialize (package:test_api/src/util/remote_exception.dart:51:48)
    Shell: #15     RemoteListener._sendError (package:test_api/src/remote_listener.dart:158:32)
    Shell: #16     RemoteListener.start.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:130:11)
    Shell: #17     _rootRunBinary (dart:async/zone.dart:1222:13)
    Shell: #18     _CustomZone.runBinary (dart:async/zone.dart:1107:19)
    Shell: #19     runZonedGuarded.<anonymous closure> (dart:async/zone.dart:1601:18)
    Shell: #20     _CustomZone.handleUncaughtError (dart:async/zone.dart:1076:19)
    Shell: #21     Future._propagateToListeners (dart:async/future_impl.dart:610:16)
    Shell: #22     Future._completeError (dart:async/future_impl.dart:537:5)
    Shell: #23     Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:593:7)
    Shell: #24     _rootRun (dart:async/zone.dart:1190:13)
    Shell: #25     _CustomZone.run (dart:async/zone.dart:1093:19)
    Shell: #26     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
    Shell: #27     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
    Shell: #28     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
    Shell: #29     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
    Shell: 
    

    Some additional info: flutter doctor -v

    flutter doctor -v
    [✓] Flutter (Channel stable, 1.22.5, on macOS 11.1 20C69 darwin-x64, locale en-US)
        • Flutter version 1.22.5 at /Users/nick/Code/flutter
        • Framework revision 7891006299 (3 weeks ago), 2020-12-10 11:54:40 -0800
        • Engine revision ae90085a84
        • Dart version 2.10.4
    
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
        • Android SDK at /Users/nick/Library/Android/sdk
        • Platform android-29, build-tools 29.0.2
        • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 12.3)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Xcode 12.3, Build version 12C33
        • CocoaPods version 1.9.3
    
    [✓] Android Studio (version 3.5)
        • Android Studio at /Applications/Android Studio.app/Contents
        • Flutter plugin version 42.1.1
        • Dart plugin version 191.8593
        • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    
    [✓] VS Code (version 1.52.1)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.18.0
    
     
    [!] Connected device                          
        ! No devices available
    
    ! Doctor found issues in 1 category.
    
    needs info 
    opened by ncb000gt 4
  • Windows paths shouldn't be canonicalized to lower-case

    Windows paths shouldn't be canonicalized to lower-case

    Although most paths on Windows are case-insensitive, it's possible to set certain directories as case-sensitive. This means that canonicalize() as currently implemented—converting all Windows paths to lower case—can cause a valid path to become invalid. It should probably instead match the behavior of other filesystems (including Mac OS which is also sometimes case-sensitive) and leave the case as-is.

    Note that this means that, in general, paths cannot be truly canonicalized (in the sense of "guaranteeing that two paths that refer to the same location on disk will have the same string") without actually interacting with the filesystem on Windows (or Mac OS). This should probably be called out in the documentation.

    bug 
    opened by nex3 1
  • Provide clearer documenation on use age of / as root

    Provide clearer documenation on use age of / as root

    The documentation doesn't provide clear guidance on how you stipulate a root path in a cross platform manner. Whist \tmp isn't an absolute path on windows it does describe a path that is relative to the root directory of the current drive and below I will refer to this as an root relative path.

    Reading the documentation its not clear how to stipulate a root relative path.

    For instance are each of the following the same:

    join('/tmp'); join('/', 'tmp'); join('\tmp'); join('', 'tmp');

    It would be useful if the documentation was explicit on this point.

    opened by bsutton 1
Owner
Dart
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Dart
A library for YAML manipulation with comment and whitespace preservation.

Yaml Editor A library for YAML manipulation while preserving comments. Usage A simple usage example: import 'package:yaml_edit/yaml_edit.dart'; void

Dart 17 Dec 26, 2022
A set of commands for coverage info files manipulation.

Coverage Utils A set of commands for coverage info files manipulation. Installing $ dart pub global activate

Karlo Verde 22 Oct 9, 2022
Easy to use cross-platform regex replace command line util

replace Easy to use cross-platform regex replace command line util. Can't remember the arguments to the find command? or how xargs works? Maybe sed is

Rob Becker 3 Feb 1, 2022
Uproot(uprt) is a multi-platform (Windows, MacOs, and Linux) command line utility written in Dart to convert a router's DHCP IP Reservations between routers

UPROOT Uproot(uprt) is a multi-platform (Windows, MacOs, and Linux) command line utility written in Dart to convert a router's DHCP IP Reservations be

GeekVisit 73 Jan 1, 2023
A Dart library to parse Portable Executable (PE) format

pefile A Dart library to parse Portable Executable (PE) format Usage A simple usage example: var pe = pefile.parse('C:\\Windows\\System32\\notepad.exe

null 4 Sep 12, 2022
An alternative random library for Dart.

Randt Randt library for Dart... Description Use Randt to get a random integer from a list, generate random integer in a specific range and generate ra

Bangladesh Coding Soldierz 3 Nov 21, 2021
The Dart Time Machine is a date and time library for Flutter, Web, and Server with support for timezones, calendars, cultures, formatting and parsing.

The Dart Time Machine is a date and time library for Flutter, Web, and Server with support for timezones, calendars, cultures, formatting and parsing.

null 2 Oct 8, 2021
A fast algorithm for finding polygon pole of inaccessibility implemented as a Dart library.

polylabel Dart port of https://github.com/mapbox/polylabel. A fast algorithm for finding polygon pole of inaccessibility implemented as a Dart library

André Sousa 2 Nov 13, 2021
Dart library for unescaping HTML-encoded strings

html_unescape A Dart library for unescaping HTML-encoded strings. Supports: Named Character References ( ) 2099 of them Decimal Character Referen

Filip Hracek 36 Dec 20, 2022
This is a dart library covering nearly 100% of the latest Planning Center public API.

Planning Center API for Dart Planning Center is an online platform for church management. It provides multiple apps for things like check-ins, service

null 1 Oct 6, 2022
A JMAP client library in Dart to make JMAP method calls and process the responses

JMAP Dart client A JMAP client library to make JMAP method calls and process the responses. We most notably use it to write the TMail Flutter applicat

LINAGORA 18 Dec 19, 2022
Library for help you make userbot or bot telegram and support tdlib telegram database and only support nodejs dart and google-apps-script

To-Do telegram client dart ✅️ support multi token ( bot / userbot ) ✅️ support bot and userbot ✅️ support telegram-bot-api local server ✅️ support tel

Azka Full Snack Developer:) 73 Jan 7, 2023
A Pure Dart Utility library that checks for an Active Internet connection

This Code comes from https://github.com/komapeb/data_connection_checker * ?? Internet Connection Checker A Pure Dart Utility library that checks for a

Rounak Tadvi 61 Nov 25, 2022
Dart common utils library. DateUtil, EncryptUtil, JsonUtil, LogUtil, MoneyUtil, NumUtil, ObjectUtil, RegexUtil, TextUtil, TimelineUtil, TimerUtil.

Dart common utils library. DateUtil, EncryptUtil, JsonUtil, LogUtil, MoneyUtil, NumUtil, ObjectUtil, RegexUtil, TextUtil, TimelineUtil, TimerUtil.

null 1.3k Dec 22, 2022
Reflectable is a Dart library that allows programmers to eliminate certain usages of dynamic reflection by specialization of reflective code to an equivalent implementation using only static techniques

Reflectable is a Dart library that allows programmers to eliminate certain usages of dynamic reflection by specialization of reflective code to an equivalent implementation using only static techniques. The use of dynamic reflection is constrained in order to ensure that the specialized code can be generated and will have a reasonable size.

Google 318 Dec 31, 2022
A library for Dart that generates fake data

faker A library for Dart that generates fake data. faker is heavily inspired by the Python package faker, and the Ruby package ffaker. Usage A simple

Jesper Håkansson 193 Dec 18, 2022
A Open Source Dart Library

A Open Source Dart Library

Debojyoti Singha 2 Apr 19, 2022
A Dart build script that downloads the Protobuf compiler and Dart plugin to streamline .proto to .dart compilation.

A Dart build script that downloads the Protobuf compiler and Dart plugin to streamline .proto to .dart compilation.

Julien Scholz 10 Oct 26, 2022