簡體   English   中英

顫振:getApplicationDocumentsDirectory() 返回 null

[英]Flutter: getApplicationDocumentsDirectory() returns null

方法 getApplicationDocumentsDirectory() 返回 null。 我不明白為什么......

getApplicationDocumentsDirectory().then((directory) {
  print(_directory);
  _directory = directory;
});

null 打印到控制台...

我需要注冊某些東西或請求許可嗎?

您需要詢問 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 權限。

在您的清單中添加如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.yyy">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
</manifest>

並且還需要運行時請求權限,通過使用 simple_permissions 包。 參考以下代碼:

    import 'package:simple_permissions/simple_permissions.dart';

    PermissionStatus permissionResult = await SimplePermissions.requestPermission(Permission. WriteExternalStorage);
    if (permissionResult == PermissionStatus.authorized){
      // code of read or write file in external storage (SD card)
      getApplicationDocumentsDirectory().then((directory) {
        print(_directory);
        _directory = directory;
     });
    }

有關在 flutter 中使用運行時權限的更多信息,請參閱本教程。

在我這邊,我用getTemporaryDirectory替換了getApplicationDocumentsDirectory ,它有效,我猜第一個沒有錯誤捕獲!

在 AndroidManifest.xml 中,在

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.yyyy.zzz.www">
...
</manifest>

標簽,把以下幾行授予權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

如果您按照建議添加了 android 權限但它仍然不起作用,請嘗試添加WidgetsFlutterBinding.ensureInitialized(); 作為main函數中的第一件事。 這為我修好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM