如何在 flutter 中将文件大小转换为 mb、kb、gb 等

Fai*_*ash 3 dart flutter flutter-test flutter-web

我想从存储中获取文件后获取文件的大小这 是我获取大小的代码

 trailing: FutureBuilder<int>(
                        builder: (context, snapshot) {
                          return Text(snapshot.data.toString());
                        },
                        future: files[index].length(),
                      ),
Run Code Online (Sandbox Code Playgroud)

RK *_*ios 6

嘿,这是我编辑的与你的问题相关的代码。我已经使用 [file_picker][1] 这个包从我的设备存储中选取文件。

使用以下函数来获取所选文件的大小

static String getFileSizeString({required int bytes, int decimals = 0}) {
      const suffixes = ["b", "kb", "mb", "gb", "tb"];
      if (bytes == 0) return '0${suffixes[0]}';
      var i = (log(bytes) / log(1024)).floor();
      return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + suffixes[i];
    }
Run Code Online (Sandbox Code Playgroud)

我从 PlatformFile 获取了文件大小 int ,如下所示

getFileSizeString(bytes: snapshot.data!.files[0].size);
Run Code Online (Sandbox Code Playgroud)

并得到了预期的文件大小结果。这里分享了完整的代码,请查看。

import 'dart:io';
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:file_picker/file_picker.dart';


class imagePicker extends StatefulWidget {
  imagePicker({Key? key}) : super(key: key);

  @override
  State<imagePicker> createState() => _imagePickerState();
  
}

class _imagePickerState extends State<imagePicker> {


File? fileName;

Future<FilePickerResult?> pickFiles()async{
  final result = await FilePicker.platform.pickFiles(
    allowMultiple: false,
  );
  return result;
}

static String getFileSizeString({required int bytes, int decimals = 0}) {
      const suffixes = ["b", "kb", "mb", "gb", "tb"];
      var i = (log(bytes) / log(1024)).floor();
      return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + suffixes[i];
    }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      builder: (context, snapshot) {
        if (snapshot.hasData){
          getFileSizeString(bytes: snapshot.data!.files[0].size);
          
          return Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(snapshot.data!.files[0].name),
              Text(getFileSizeString(bytes: snapshot.data!.files[0].size)),
            ],
          );
        }else{
          return Text("waiting");
        }
      },
      future: pickFiles(),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

编码愉快![1]: https: //pub.dev/packages/file_picker