Flutter文件扩展名处理插件flutter_file_extention的使用
Flutter文件扩展名处理插件flutter_file_extention
的使用
概述
flutter_file_extention
是一个用于在 Android 上管理文件的辅助工具包。它可以帮助开发者轻松地搜索、过滤、排序和管理文件。
开始使用
1. 添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
path: 1.6.2
path_provider: 0.5.0+1
flutter_file_extention: ^0.2.0
然后运行 flutter pub get
来安装依赖。
2. 配置权限
在 android/app/src/main/AndroidManifest.xml
中添加读写存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
此外,确保手动授予存储权限,或者通过 simple_permissions
插件自动请求权限:
SimplePermissions.requestPermission(Permission.ReadExternalStorage);
示例代码
以下是一个完整的示例,展示如何使用 flutter_file_extention
来搜索文件并显示其扩展名。
// framework
import 'dart:async';
import 'package:flutter/material.dart';
// packages
import 'package:path_provider/path_provider.dart';
import 'package:flutter_file_extention/flutter_file_extention.dart';
import 'package:simple_permissions/simple_permissions.dart';
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
// 请求存储权限
SimplePermissions.requestPermission(Permission.ReadExternalStorage);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Flutter 文件管理器示例"),
),
body: FutureBuilder(
future: _files(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
itemCount: snapshot.data?.length ?? 0,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data[index].path.split('/').last),
);
},
);
} else if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: Text("加载中..."));
}
},
),
),
);
}
// 获取外部存储目录中的所有文件
_files() async {
var root = await getExternalStorageDirectory();
var files = await FileManager(root: root).walk().toList();
return files;
}
}
功能示例
以下是一个更复杂的示例,展示如何搜索文件并显示其详细信息,包括扩展名。
// framework
import 'dart:async';
import 'package:flutter/material.dart';
// packages
import 'package:flutter_file_extention/flutter_file_extention.dart';
import 'package:flutter_file_extention/utils.dart';
import 'package:path/path.dart' as p;
void main() => runApp(new MyApp());
[@immutable](/user/immutable)
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return new MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Flutter 文件管理器演示"),
),
body: FutureBuilder(
future: _search(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Center(child: Text('按下按钮开始。'));
case ConnectionState.active:
return Center(child: Text('活动状态...'));
case ConnectionState.waiting:
return Center(child: Text('等待结果...'));
case ConnectionState.done:
if (snapshot.hasError)
return Text('错误: ${snapshot.error}');
return snapshot.data != null
? ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) => Card(
child: ListTile(
title: Column(
children: [
Text('大小: ${snapshot.data[index].statSync().size}'),
Text('路径: ${snapshot.data[index].path}'),
Text('修改日期: ${snapshot.data[index].statSync().modified.toUtc()}')
],
),
subtitle: Text(
"扩展名: ${p.extension(snapshot.data[index].absolute.path).replaceFirst('.', '')}"), // 获取扩展名
)))
: Center(
child: Text("无数据!"),
);
}
return null; // 不可到达
},
),
),
);
}
Future _search() async {
var root = await getStorageList();
var fm = FileManager(
root: root[1],
);
List founds = await fm
.search(
// 搜索关键字
"android",
sortedBy: FlutterFileUtilsSorting.Size,
)
.toList();
return founds;
}
}
更多关于Flutter文件扩展名处理插件flutter_file_extention的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复