webdav_client 1.1.8 icon indicating copy to clipboard operation
webdav_client: ^1.1.8 copied to clipboard

A simple WebDAV client that supports some common methods.

webdav_client #

A dart WebDAV client library(support null-safety), use dio as http client.

pub.dev link

Main features #

web support #

see stackoverflow for CORSB problems needing attention

web #

Usage #

First of all you should create client instance using newClient() function:

var client = newClient(
    user: 'flyzero',
    password: '123456',
    debug: true,

Common settings #

    // Set the public request headers
    client.setHeaders({'accept-charset': 'utf-8'});

    // Set the connection server timeout time in milliseconds.

    // Set send data timeout time in milliseconds.

    // Set transfer data time in milliseconds.

    // Test whether the service can connect
    try {
      await client.ping();
    } catch (e) {

Read all files in a folder #

    var list = await client.readDir('/');
    list.forEach((f) {
        print('${f.name} ${f.path}');

    // can sub folder
    var list2 = await client.readDir('/sub/sub/folder');
    list2.forEach((f) {
        print('${f.name} ${f.path}');

Create folder #

    await client.mkdir('/新建文件夹');

    // Recursively create folders
    await client.mkdirAll('/new folder/new folder2');

Remove a folder or file #

If you remove the folder, some webdav services require a '/' at the end of the path.

    // Delete folder
    await client.remove('/new folder/new folder2/');

    // Delete file
    await client.remove('/new folder/新建文本文档.txt');

Rename a folder or file #

If you rename the folder, some webdav services require a '/' at the end of the path.

    // Rename folder
    await client.rename('/新建文件夹/', '/新建文件夹2/', true);

    // Rename file
    await client.rename('/新建文件夹2/test.dart', '/新建文件夹2/test2.dart', true);

Copy a file / folder from A to B #

If copied the folder (A > B), it will copy all the contents of folder A to folder B.

Some webdav services have been tested and found to delete the original contents of the B folder!!!

    // Copy all the contents of folderA to folder B
    await client.copy('/folder/folderA/', '/folder/folderB/', true);

    // Copy file
    await client.copy('/folder/aa.png', '/folder/bb.png', true);

Download file #

    // download bytes
    await client.read('/folder/folder/openvpn.exe', onProgress: (c, t) {
        print(c / t);

    // download 2 local file with stream 
    await client.read2File(
          '/folder/vpn.exe', 'C:/Users/xxx/vpn2.exe', onProgress: (c, t) {
        print(c / t);

Upload file #

    // upload local file 2 remote file with stream
    CancelToken c = CancelToken();
    await client.writeFromFile(
        'C:/Users/xxx/vpn.exe', '/f/vpn2.exe', onProgress: (c, t) {
        print(c / t);
      }, cancelToken: c);

Cancel request #

    CancelToken cancel = CancelToken();

    // Supports most methods
    client.mkdir('/新建文件夹', cancel)
    .catchError((err) {

    // in other
pub points


unverified uploader

A simple WebDAV client that supports some common methods.

Repository (GitHub)


API reference


Icon for licenses.BSD-3-Clause (LICENSE)


convert, dio, xml


Packages that depend on webdav_client