Package selection guidance compiled from public package information, community data, and project usage.
A Flutter package that provides a client for interacting with the Dropbox API, enabling file and folder management in Dropbox from Android and iOS apps. It supports authentication via the Dropbox app or an external web browser, ensuring secure access to user accounts. The library is designed for seamless integration into mobile applications requiring cloud storage functionality. It simplifies common operations like uploading, downloading, and listing files, making it ideal for developers building cross-platform apps with Dropbox connectivity.
Use cases
File backup and sync
Cloud document storage
User file management
App data persistence
Integration with Dropbox workflows
Key features
Supports Android and iOS
Authentication via Dropbox app or browser
Simple file upload/download
Cross-platform compatibility
Secure OAuth2 authorization
Suitable for
Mobile apps needing cloud storage
Apps requiring user file access
Developers using Dropbox as backend
Flutter projects with cloud needs
Apps targeting both Android and iOS
Considerations
Requires Dropbox app or browser for auth
Limited to Dropbox ecosystem
Needs proper error handling for network issues
Depends on external Dropbox API stability
May require user consent for file access
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
dropbox client
A flutter plugin for accessing Dropbox.
Setup
Register a Dropbox API app from https://www.dropbox.com/developers .
You need a Dropbox app key. Public clients using PKCE do not need an app secret,
and must not embed one in the application.
For Android, add below in AndroidManifest.xml (replace DROPBOXKEY with your key)
<activity
android:name="com.dropbox.core.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask">
<intent-filter>
<!-- Change this to be db- followed by your app key -->
<data android:scheme="db-DROPBOXKEY" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
If you need more help setting up Android, please read https://github.com/dropbox/dropbox-sdk-java#setup .
3.a) If you are using Swift, add below code to AppDelegate.swift
import ObjectiveDropboxOfficial
// should be inside AppDelegate class
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if let authResult = DBClientsManager.handleRedirectURL(url) {
if authResult.isSuccess() {
print("dropbox auth success")
} else if (authResult.isCancel()) {
print("dropbox auth cancel")
} else if (authResult.isError()) {
print("dropbox auth error \(authResult.errorDescription)")
}
}
return true
}
// if your are linked with ObjectiveDropboxOfficial 6.x use below code instead
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
DBClientsManager.handleRedirectURL(url, completion:{ (authResult) in
if let authResult = authResult {
if authResult.isSuccess() {
print("dropbox auth success")
} else if (authResult.isCancel()) {
print("dropbox auth cancel")
} else if (authResult.isError()) {
print("dropbox auth error \(authResult.errorDescription)")
}
}
});
return true
}
3.b) If you are using Objective C, add below code to AppDelegate.m
#import <ObjectiveDropboxOfficial/ObjectiveDropboxOfficial.h>
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
DBOAuthResult *authResult = [DBClientsManager handleRedirectURL:url];
if (authResult != nil) {
if ([authResult isSuccess]) {
NSLog(@"Success! User is logged into Dropbox.");
} else if ([authResult isCancel]) {
NSLog(@"Authorization flow was manually canceled by user!");
} else if ([authResult isError]) {
NSLog(@"Error: %@", authResult);
}
}
return NO;
}
// if your are linked with ObjectiveDropboxOfficial 6.x use below code instead
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
BOOL result = [DBClientsManager handleRedirectURL:url completion: ^(DBOAuthResult *authResult) {
if (authResult != nil) {
if ([authResult isSuccess]) {
NSLog(@"Success! User is logged into Dropbox.");
} else if ([authResult isCancel]) {
NSLog(@"Authorization flow was manually canceled by user!");
} else if ([authResult isError]) {
NSLog(@"Error: %@", authResult);
}
}
}];
return NO;
}
Update Deployment Target to iOS 9.0 or above from Xcode. (dropbox_client 0.7.0 and above)
Add below permissions to your app from Dropbox App Console:
files.metadata.read
files.metadata.write
files.content.read
files.content.write
If you need more help setting up for iOS, please read https://github.com/dropbox/dropbox-sdk-obj-c#get-started .
Usage
import'package:dropbox_client/dropbox_client.dart';
FutureinitDropbox() async {
// Initialize a public client for PKCE. Call only once.awaitDropbox.init(dropbox_clientId, dropbox_key);
}
The optional third argument is retained for legacy confidential-client flows:
// Legacy AuthorizationString accessToken;
FuturetestLogin() async {
// this will run Dropbox app if possible, if not it will run authorization using a web browser.awaitDropbox.authorize();
}
FuturegetAccessToken() async {
accessToken = awaitDropbox.getAccessToken();
}
FutureloginWithAccessToken() async {
awaitDropbox.authorizeWithAccessToken(accessToken);
}
FuturetestLogout() async {
// unlink removes authorizationawaitDropbox.unlink();
}
// OAuth 2 code flow with PKCE that grants a short-lived tokenString credentials;
FuturetestLogin() async {
// this will run Dropbox app if possible, if not it will run authorization using a web browser.awaitDropbox.authorizePKCE();
}
FuturegetCredentials() async {
credentials = awaitDropbox.getCredentials();
}
FutureloginWithCredentials() async {
awaitDropbox.authorizeWithCredentials(credentials);
}
FuturetestLogout() async {
// unlink removes authorizationawaitDropbox.unlink();
}
// List / Upload / DownloadFuturetestListFolder() async {
final result = awaitDropbox.listFolder(''); // list root folderprint(result);
final url = awaitDropbox.getTemporaryLink('/file.txt');
print(url);
}
FuturetestUpload() async {
final filepath = '/path/to/local/file.txt';
final result = awaitDropbox.upload(filepath, '/file.txt', (uploaded, total) {
print('progress $uploaded / $total');
});
}
FuturetestDownload() async {
final filepath = '/path/to/local/file.txt';
final result = awaitDropbox.download('/dropbox_file.txt', filepath, (downloaded, total) {
print('progress $downloaded / $total');
});
}