简体   繁体   English

如何在 Flutter 中访问 Android 的内部存储

[英]How to access Internal Storage of Android in Flutter

In android we use getFileDir() and getCacheDir() for accessing the Internal Storage .在 android 中,我们使用getFileDir()getCacheDir()来访问Internal Storage I can see that there's a path_provider plugin that I can use but I can only figure out getTemporaryDirectory() which is analogous to getCacheDir() of android.我可以看到有一个我可以使用的path_provider插件,但我只能找出类似于 android 的getCacheDir()getTemporaryDirectory() So is there any alternative way of doing what getFileDir() does in Android.那么有没有其他方法可以做getFileDir()在Android中所做的事情。

Is there any other way to do this that I'm aware of, or I'm missing something.我知道有没有其他方法可以做到这一点,或者我错过了一些东西。

From Flutter sources:来自颤振来源:

  /// Examples:
  ///
  ///  * iOS: `NSDocumentsDirectory`
  ///  * Android: The AppData directory.
  static Future<Directory> getApplicationDocumentsDirectory() async {
    return new Directory((await _pathProviderProxy.ptr.applicationDocumentsDirectory()).path);

Use this dart package: https://pub.dev/packages/path_provider_ex#-example-tab-使用这个 dart 包: https : //pub.dev/packages/path_provider_ex#-example-tab-

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:path_provider_ex/path_provider_ex.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<StorageInfo> _storageInfo = [];

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    List<StorageInfo> storageInfo;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      storageInfo = await PathProviderEx.getStorageInfo();
    } on PlatformException {}

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _storageInfo = storageInfo;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
                'Internal Storage root:\n ${(_storageInfo.length > 0) ? _storageInfo[0].rootDir : "unavailable"}\n'),
            Text(
                'Internal Storage appFilesDir:\n ${(_storageInfo.length > 0) ? _storageInfo[0].appFilesDir : "unavailable"}\n'),
            Text(
                'Internal Storage AvailableGB:\n ${(_storageInfo.length > 0) ? _storageInfo[0].availableGB : "unavailable"}\n'),
            Text(
                'SD Card root: ${(_storageInfo.length > 1) ? _storageInfo[1].rootDir : "unavailable"}\n'),
            Text(
                'SD Card appFilesDir: ${(_storageInfo.length > 1) ? _storageInfo[1].appFilesDir : "unavailable"}\n'),
            Text(
                'SD Card AvailableGB:\n ${(_storageInfo.length > 1) ? _storageInfo[1].availableGB : "unavailable"}\n'),
          ],
        ) ,
      ),
    );
  }
}

Add path_provider to pubspec.yamlpath_provider添加到pubspec.yaml

import 'package:path_provider/path_provider.dart';

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();

  return directory.path;
}

final directory = await _localPath;

To get internal storage directory path : For Legacy Use these flutter plugin that provides external storage path and external public storage path, ext_storage: ^latest_ver获取内部存储目录路径:对于 Legacy 使用这些提供外部存储路径和外部公共存储路径的颤振插件, ext_storage:^latest_ver

String path = await ExtStorage.getExternalStoragePublicDirectory(
        ExtStorage.DIRECTORY_DOWNLOADS);

Details: https://pub.dev/packages/ext_storage详细信息: https ://pub.dev/packages/ext_storage

external_path:^latest_ver , For NullSafety external_path is a flutter plugin that provides internal, external storage path and external public storage path, external_path:^latest_ver ,对于 NullSafety external_path 是一个flutter插件,提供内部、外部存储路径和外部公共存储路径,

String path=await ExternalPath.getExternalStoragePublicDirectory(
        ExternalPath.DIRECTORY_DOWNLOADS);

Details: https://pub.dev/packages/external_path详细信息: https ://pub.dev/packages/external_path

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM