Search packages, repositories and app categories

Package detailsv1.2.2

webdav_client

A simple WebDAV client that supports some common methods.

AndroidiOSmacOSWindowsLinux
30-day downloads
22K
Likes
63
Pub points
130

Install package

flutter pub add webdav_client

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A lightweight WebDAV client for Flutter applications, enabling interaction with WebDAV servers through common HTTP methods like GET, PUT, POST, and DELETE. It simplifies file management tasks such as uploading, downloading, and listing files on remote servers. Designed for cross-platform use, it supports Android, iOS, macOS, Windows, and Linux. The package is ideal for apps requiring cloud storage integration or remote file access without complex setup. Its straightforward API makes it accessible for developers seeking reliable WebDAV connectivity.

Use cases

  • Cloud file synchronization
  • Remote file management
  • Document storage integration
  • Backup systems
  • Collaborative document access

Key features

  • Supports standard WebDAV methods
  • Cross-platform compatibility
  • Simple and intuitive API
  • Secure authentication handling
  • Lightweight and minimal dependencies

Suitable for

  • Developers building file-centric apps
  • Apps needing cloud storage access
  • Projects using WebDAV servers
  • Teams integrating remote file systems

Considerations

  • Limited to basic WebDAV operations
  • No built-in caching or offline support
  • Authentication must be handled externally
  • Not suitable for high-performance bulk transfers

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

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(
    'http://localhost:6688/',
    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.
    client.setConnectTimeout(8000);

    // Set send data timeout time in milliseconds.
    client.setSendTimeout(8000);

    // Set transfer data time in milliseconds.
    client.setReceiveTimeout(8000);

    // Test whether the service can connect
    try {
      await client.ping();
    } catch (e) {
      print('$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) {
      prints(err.toString());
    });

    // in other
    cancel.cancel('reason')

Categories

Dependencies

Dependency list 3 items

Source repository

Projects using this package