搜尋套件、儲存庫與 APP 分類

GitHub 儲存庫mix1009/FlutterDropbox

FlutterDropbox

Flutter/Dart 的 Dropbox 客戶端 API

FlutterDropbox 專案封面
星標
16
分支
39
最近推送(UTC)
2026年8月3日
專案狀態
未封存

原始 README

以下為英文專案原文快照,最新內容請造訪 GitHub。

dropbox client

pub package

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 .

For iOS,

  1. add below in Info.plist

     <key>LSApplicationQueriesSchemes</key>
       <array>
           <string>dbapi-8-emm</string>
           <string>dbapi-2</string>
       </array>
    
  2. add below in Info.plist (replace DROPBOXKEY with your key)

     <key>CFBundleURLTypes</key>
       <array>
         <dict>
           <key>CFBundleURLSchemes</key>
           <array>
             <string>db-DROPBOXKEY</string>
           </array>
           <key>CFBundleURLName</key>
           <string></string>
         </dict>
       </array>
    

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;          
    }
  1. Update Deployment Target to iOS 9.0 or above from Xcode. (dropbox_client 0.7.0 and above)

  2. 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';

Future initDropbox() async {
    // Initialize a public client for PKCE. Call only once.
    await Dropbox.init(dropbox_clientId, dropbox_key);
}

The optional third argument is retained for legacy confidential-client flows:

await Dropbox.init(dropbox_clientId, dropbox_key, dropbox_secret);
// Legacy Authorization
String accessToken;

Future testLogin() async {
  // this will run Dropbox app if possible, if not it will run authorization using a web browser.
  await Dropbox.authorize();
}

Future getAccessToken() async {
  accessToken = await Dropbox.getAccessToken();
}

Future loginWithAccessToken() async {
  await Dropbox.authorizeWithAccessToken(accessToken);
}

Future testLogout() async {
  // unlink removes authorization
  await Dropbox.unlink();
}
// OAuth 2 code flow with PKCE that grants a short-lived token
String credentials;

Future testLogin() async {
  // this will run Dropbox app if possible, if not it will run authorization using a web browser.
  await Dropbox.authorizePKCE();
}

Future getCredentials() async {
  credentials = await Dropbox.getCredentials();
}

Future loginWithCredentials() async {
  await Dropbox.authorizeWithCredentials(credentials);
}

Future testLogout() async {
  // unlink removes authorization
  await Dropbox.unlink();
}
// List / Upload / Download

Future testListFolder() async {
  final result = await Dropbox.listFolder(''); // list root folder
  print(result);
  
  final url = await Dropbox.getTemporaryLink('/file.txt');
  print(url);
}

Future testUpload() async {
  final filepath = '/path/to/local/file.txt';
  final result = await Dropbox.upload(filepath, '/file.txt', (uploaded, total) {
    print('progress $uploaded / $total');
  });
}

Future testDownload() async {
  final filepath = '/path/to/local/file.txt';
  final result = await Dropbox.download('/dropbox_file.txt', filepath, (downloaded, total) {
    print('progress $downloaded / $total');
  });
}

Example can be found in example folder.

ChunKoo Park GitHub avatar
GitHub 作者

ChunKoo Park ↗

語言DartObjective-CJavaPythonRuby

此儲存庫發佈的套件

使用的依賴

依賴清單 3 項

  • flutter{"sdk":"flutter"}
  • http^1.1.0
  • flutter_test開發依賴{"sdk":"flutter"}

如何選擇適合專案的儲存庫?

先依使用情境篩選,再比較專案活躍情況,最後到原始儲存庫確認使用要求。

  1. 透過儲存庫名稱、作者或描述搜尋,再依技術分類縮小範圍。
  2. 綜合星標、分支與最近推送比較專案;星標反映社群關注,不保證品質。
  3. 使用前在 GitHub 確認 README、授權條款與 Issues。

來源與維護

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗