从外部存储器获取JSON

从外部存储器获取JSON,json,flutter,dart,Json,Flutter,Dart,我正在尝试从外部存储(Android)读取json文件。但是做不到 我已经在清单中设置了权限,并且在阅读之前检查了权限。虽然文件已在目录中,但无法读取它 ModelTestModel modelTestModel; List<ModelTests> listModelTests; Future<bool> get readPermission async { await new Future.delayed(new Duration(seconds: 1));

我正在尝试从外部存储(Android)读取json文件。但是做不到

我已经在清单中设置了权限,并且在阅读之前检查了权限。虽然文件已在目录中,但无法读取它

ModelTestModel modelTestModel;
List<ModelTests> listModelTests;

Future<bool> get readPermission async {
    await new Future.delayed(new Duration(seconds: 1));
    bool checkResult = await SimplePermissions.checkPermission(
        Permission.ReadExternalStorage);
    if (!checkResult) {
      var status = await SimplePermissions.requestPermission(
          Permission.ReadExternalStorage);
      if (status == PermissionStatus.authorized) {
        var res = await fetchModelTest;
        return res != null;
      }
    } else {
      var res = await fetchModelTest;
      return res != null;
    }
    return false;
  }


  Future<List<ModelTests>> get fetchModelTest async {
    var dir = await getExternalStorageDirectory();      
    print(dir);
    final data =
        await rootBundle.loadString("${dir.path}/BCS/bsc.json");
    print(data);    
    // var data = await rootBundle.loadString('assets/database/bcs-preparation.json'); this is working when when the file is inside assets 
    var jsonData = json.decode(data);
    modelTestModel = ModelTestModel.fromJson(jsonData);
    listModelTests = modelTestModel.modelTests;

    return listModelTests;
  }

ModelTestModel;
列表模型测试;
Future get readPermission异步{
等待新的未来。延迟(新的持续时间(秒:1));
bool checkResult=等待SimplePermissions.checkPermission(
权限。ReadExternalStorage);
如果(!checkResult){
var status=wait SimplePermissions.requestPermission(
权限。ReadExternalStorage);
if(status==PermissionStatus.authorized){
var res=等待获取模型测试;
返回res!=null;
}
}否则{
var res=等待获取模型测试;
返回res!=null;
}
返回false;
}
未来获取fetchModelTest异步{
var dir=await getExternalStorageDirectory();
印刷(dir);
最终数据=
等待rootBundle.loadString(“${dir.path}/BCS/bsc.json”);
打印(数据);
//var data=await-rootBundle.loadString('assets/database/bcs-preparation.json');当文件位于资产内时,此选项有效
var jsonData=json.decode(数据);
modelTestModel=modelTestModel.fromJson(jsonData);
listModelTests=modelTestModel.modelTests;
返回列表模型测试;
}
日志

I/SimplePermission(17862):检查权限: android.permission.READ_外部_存储I/flatter(17862):目录: “/storage/emulated/0”


权限已成功,但无法读取文件。rootBundle用于访问应用程序的资源,不能用于访问手机存储器中的文件

使用打开文件

File jsonFile = await File("${dir.path}/BCS/bsc.json");
然后使用

var jsonData = json.decode(jsonFile.readAsStringSync());

您是否收到任何错误或空数据?Futurebuilder中的快照错误