Flutter文件查看插件flutter_file_view的使用
Flutter文件查看插件flutter_file_view的使用
语言: 中文 | English
当前插件仅适用于Android和iOS。
Android由Tencent X5实现。
iOS由WKWebView实现。
✅ 支持的文件类型
- Android
docx, doc, xlsx, xls, pptx, ppt, pdf, txt
- iOS
docx, doc, xlsx, xls, pptx, ppt, pdf, txt
⏰ 初始化
在应用启动时初始化插件:
FlutterFileView.init();
💼 2.0.x -> 2.1.0 版本更新
过期方案
@override
Widget build(BuildContext context) {
return LocalFileViewer(filePath: localPath ?? '');
}
当前方案
@override
Widget build(BuildContext context) {
return FileView(
controller: FileViewController.asset('assets/files/$filePath'),
);
}
FileViewController
还有许多其他用法,例如表示某些状态等。
📲 使用第三方插件
使用dio
进行网络请求。
⏳ 准备使用
版本约束
sdk: ">=2.14.0 <3.0.0"
flutter: ">=2.5.0"
依赖
- 在
pubspec.yaml
中添加flutter_file_view
依赖:
dependencies:
flutter_file_view: ^latest_version
- 执行以下命令获取包:
flutter pub get
- 引入包:
import 'package:flutter_file_view/flutter_file_view.dart';
本地化配置
在MaterialApp
中添加:
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
...
localizationsDelegates: const <LocalizationsDelegate<dynamic>>[
...
ViewerLocalizationsDelegate.delegate,
],
...
);
}
}
🤖 Android
Android P 无法下载内核解决方案
在AndroidManifest.xml
文件的application
标签中添加以下代码:
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true"
在res/xml
目录下创建一个名为network_security_config.xml
的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
注意事项
- 后续TBS升级不会执行。详情请参阅TBS文档接口问题说明。
- 不支持Google Play,原因见Issues 1.11。
- 不支持在Android模拟器上运行。
示例Demo
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_file_view/flutter_file_view.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
FlutterFileView.init();
super.initState();
}
@override
Widget build(BuildContext context) {
return const MaterialApp(
localizationsDelegates: <LocalizationsDelegate<dynamic>>[
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
FileViewLocalizationsDelegate.delegate,
],
supportedLocales: <Locale>[Locale('en', 'US'), Locale('zh', 'CN')],
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<String> files = [
'FileTest.docx',
'FileTest.doc',
'FileTest.xlsx',
'FileTest.xls',
'FileTest.pptx',
'FileTest.ppt',
'FileTest.pdf',
'FileTest.txt',
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('File View')),
body: _buildBodyWidget(),
);
}
Widget _buildBodyWidget() {
return ListView.builder(
itemCount: files.length,
itemBuilder: (BuildContext context, int index) {
final String filePath = files[index];
String fileShowText = '';
final int i = filePath.lastIndexOf('/');
if (i <= -1) {
fileShowText = filePath;
} else {
fileShowText = filePath.substring(i + 1);
}
final Widget child = ElevatedButton(
onPressed: () {
FileViewController? controller;
if (filePath.contains('http://') || filePath.contains('https://')) {
controller = FileViewController.network(filePath);
} else {
controller = FileViewController.asset('assets/files/$filePath');
}
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (_) => FileViewPage(controller: controller!),
),
);
},
child: Text(fileShowText),
);
return Container(
margin: const EdgeInsets.only(top: 10),
padding: const EdgeInsets.symmetric(horizontal: 15),
child: child,
);
},
);
}
}
如果你喜欢这个项目,请在项目的右上角点击“Star”。你的支持是我最大的鼓励!^_^
以上是关于Flutter文件查看插件`flutter_file_view`的使用指南和完整示例代码。希望对你有所帮助!
更多关于Flutter文件查看插件flutter_file_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文件查看插件flutter_file_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_file_view
插件来查看文件的示例代码。这个插件允许你在Flutter应用中打开和查看各种类型的文件。
首先,确保你的Flutter项目已经创建,并且你已经在pubspec.yaml
文件中添加了flutter_file_view
依赖:
dependencies:
flutter:
sdk: flutter
flutter_file_view: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_file_view
插件:
- 导入插件:
在你的Dart文件中导入flutter_file_view
插件:
import 'package:flutter_file_view/flutter_file_view.dart';
- 请求存储权限(如果需要):
如果你的应用需要访问设备的存储来读取文件,你可能需要请求存储权限。这通常是在Android和iOS上必需的。以下是一个简单的权限请求示例:
import 'package:permission_handler/permission_handler.dart';
Future<void> requestPermissions() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
var result = await Permission.storage.request();
if (!result.isGranted) {
// 处理权限被拒绝的情况
throw Exception('存储权限被拒绝');
}
}
}
注意:你需要添加permission_handler
依赖来处理权限请求。
- 使用
FlutterFileView
小部件:
现在,你可以使用FlutterFileView
小部件来查看文件。假设你有一个文件的路径,这里是如何显示它的代码示例:
import 'package:flutter/material.dart';
import 'package:flutter_file_view/flutter_file_view.dart';
import 'package:permission_handler/permission_handler.dart'; // 仅用于权限请求
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter File View Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FileViewerScreen(),
);
}
}
class FileViewerScreen extends StatefulWidget {
@override
_FileViewerScreenState createState() => _FileViewerScreenState();
}
class _FileViewerScreenState extends State<FileViewerScreen> {
@override
void initState() {
super.initState();
_requestPermissionsAndViewFile();
}
Future<void> _requestPermissionsAndViewFile() async {
try {
await requestPermissions();
// 假设这是你要查看的文件路径
String filePath = '/path/to/your/file.txt';
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(
title: Text('查看文件'),
),
body: FlutterFileView(
filePath: filePath,
fileTypeHint: 'text/plain', // 根据你的文件类型设置
),
),
),
);
} catch (e) {
// 处理异常,例如权限被拒绝
print('Error: $e');
}
}
Future<void> requestPermissions() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
var result = await Permission.storage.request();
if (!result.isGranted) {
throw Exception('存储权限被拒绝');
}
}
}
}
在这个示例中,我们首先请求存储权限,然后使用FlutterFileView
小部件来显示指定路径的文件。注意,fileTypeHint
参数应该根据你要查看的文件类型来设置,以便插件能够正确地渲染文件内容。
请确保替换/path/to/your/file.txt
为你实际要查看的文件的路径,并且根据你的文件类型调整fileTypeHint
的值。
这个示例展示了如何在Flutter应用中使用flutter_file_view
插件来查看文件。根据你的具体需求,你可能需要进一步定制这个示例。