Flutter 颤振:使用Dart检查设备的可用存储空间

Flutter 颤振:使用Dart检查设备的可用存储空间,flutter,dart,Flutter,Dart,如何检查设备存储是否可以在不进行本机操作的情况下在颤振中进行。我想知道设备是否有足够的存储空间来下载图像。如何实现这一点有一个名为的软件包,可以让您准确地获取所需的信息。您可以这样使用它: import 'package:disk_space/disk_space.dart'; void getDiskSpaceInfo() async{ print(await DiskSpace.getFreeDiskSpace); print(await DiskSpace.getTotalDis

如何检查设备存储是否可以在不进行本机操作的情况下在颤振中进行。我想知道设备是否有足够的存储空间来下载图像。如何实现这一点

有一个名为的软件包,可以让您准确地获取所需的信息。您可以这样使用它:

import 'package:disk_space/disk_space.dart';

void getDiskSpaceInfo() async{
  print(await DiskSpace.getFreeDiskSpace);
  print(await DiskSpace.getTotalDiskSpace);
}

编辑:该软件包已于2021年3月9日更新为Dart 2.12版本0.1.0+2。但是仍然没有到GitHub的链接。

测试是扩展存储空间

private fun getFreeDiskSpace():双精度{
val stat=StatFs(Environment.getExternalStorageDirectory().path)
可用变量字节:长
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.JELLY\u BEAN\u MR2)
bytesAvailable=stat.blockSizeLong*stat.availableBlocksLong
其他的
bytesAvailable=stat.blockSize.toLong()*stat.availableBlocks.toLong()
返回(字节可用/(1024f*1024f)).toDouble()
}
private fun getTotalDiskSpace():Double{
val stat=StatFs(Environment.getExternalStorageDirectory().path)
可用变量字节:长
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.JELLY\u BEAN\u MR2)
bytesAvailable=stat.blockSizeLong*stat.blockCountLong
其他的
bytesAvailable=stat.blockSize.toLong()*stat.blockCount.toLong()
返回(字节可用/(1024f*1024f)).toDouble()

}
其中一种可能性是使用前面提到的
磁盘空间

该库包含两个文件:
磁盘空间.dart

导入'dart:async';
导入“包:flifter/services.dart”;
类磁盘空间{
静态常量方法通道u通道=
const MethodChannel(“磁盘空间”);
静态未来获取平台版本异步{
最终字符串?version=await_channel.invokeMethod('getPlatformVersion');
返回版本;
}
静态未来获取getFreeDiskSpace异步{
final double?freeDiskSpace=wait_channel.invokeMethod('getFreeDiskSpace');
返回空闲磁盘空间;
}
静态未来获取getTotalDiskSpace异步{
final double?totalDiskSpace=wait_channel.invokeMethod('getTotalDiskSpace');
返回总磁盘空间;
}
}

DiskSpacePlugin.kt

package de.appgewaltig.disk\u空间
导入android.os.Environment
导入android.os.StatFs
导入io.flatter.plugin.common.MethodCall
导入io.flatter.plugin.common.MethodChannel
导入io.flatter.plugin.common.MethodChannel.MethodCallHandler
导入io.flatter.plugin.common.MethodChannel.Result
导入io.flatter.plugin.common.PluginRegistry.registrator
类DiskSpacePlugin:MethodCallHandler{
伴星{
@JvmStatic
娱乐登记员(登记员:登记员){
val channel=MethodChannel(registrator.messenger(),“磁盘空间”)
channel.setMethodCallHandler(DiskSpacePlugin())
}
}
private fun getFreeDiskSpace():Double{
val stat=StatFs(Environment.getExternalStorageDirectory().path)
可用变量字节:长
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.JELLY\u BEAN\u MR2)
bytesAvailable=stat.blockSizeLong*stat.availableBlocksLong
其他的
bytesAvailable=stat.blockSize.toLong()*stat.availableBlocks.toLong()
返回(字节可用/(1024f*1024f)).toDouble()
}
private fun getTotalDiskSpace():Double{
val stat=StatFs(Environment.getExternalStorageDirectory().path)
可用变量字节:长
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.JELLY\u BEAN\u MR2)
bytesAvailable=stat.blockSizeLong*stat.blockCountLong
其他的
bytesAvailable=stat.blockSize.toLong()*stat.blockCount.toLong()
返回(字节可用/(1024f*1024f)).toDouble()
}
重写方法调用(调用:方法调用,结果:结果){
when(call.method){
“getFreeDiskSpace”->result.success(getFreeDiskSpace())
“getTotalDiskSpace”->result.success(getTotalDiskSpace())
else->result.notImplemented()
}
}
}

我的变化: 我添加了另一个channel方法(并向KT文件添加了一个获取内部存储的方法):

class DiskSpacePlugin:MethodCallHandler{
...
private fun getFreeDiskSpace(字符串路径):双精度{
val stat=StatFs(path)//颤振的动态路径
可用变量字节:长
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.JELLY\u BEAN\u MR2)
bytesAvailable=stat.blockSizeLong*stat.availableBlocksLong
其他的
bytesAvailable=stat.blockSize.toLong()*stat.availableBlocks.toLong()
返回(字节可用/(1024f*1024f)).toDouble()
}
private fun getFreeInternalDiskSpace():Double{
val stat=StatFs(Environment.getDataDirectory().path)//更改为获取内部目录
...
}
private fun getFreeExternalDiskSpace():Double{…}//更改名称以反映外部目录
private fun getTotalDiskSpace():Double{…}
重写方法调用(调用:方法调用,结果:结果){
when(call.method){
“getFreeDiskSpace”->{
var path=call.argument(“path”)作为字符串
result.success(getFreeDiskSpace(path))//添加了这个
}
“getFreeInternalDiskSpace”->result.success(getFreeInternalDiskSpace())
“getFreeExternalDiskSpace”->result.success(getFreeExternalDiskSpace())
“getTotalDiskSpace”->result.success(getTotalDiskSpace())
else->result.notImplemented()
}
}
}
活动中注册插件

公共类main活动扩展了公共类main活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
生成带有(this)的pluginregistrant.registerWith;
DiskSpacePlugin.registerWith(registerFor(“.DiskSpacePlugin”));
}
}
添加了
存储
帮助程序:

导入'dart:io';
导入“包:路径证明”