【发布时间】:2021-09-01 16:19:51
【问题描述】:
我是菜鸟,我尝试重新创建这个散文,create, save then launch pdf,这个应用程序有 2 个 dart 文件:
1. main.dart
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_pdf/pdf.dart';
import 'mobile.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {...}
class MyHomePage extends StatefulWidget {...}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
child: Text('Cliick Me'),
onPressed: _createPDF,
),
),
);
}
Future<void> _createPDF() async {
PdfDocument document = PdfDocument();
final page = document.pages.add();
page.graphics.drawString(
'welcome',
PdfStandardFont(PdfFontFamily.helvetica, 30)
);
List<int> bytes = document.save();
document.dispose();
//FileSaveHelper.saveAndLaunchFile(bytes, 'Outfile.pdf');
saveAndLaunchFile(bytes, 'Outfile.pdf');
}
2.mobile.dart
import 'dart:io' as io;
import 'dart:io';
import 'package:open_file/open_file.dart';
import 'package:path_provider/path_provider.dart';
Future<void> saveAndLaunchFile(List<int> bytes, String fileName) async {
try {
final path = (await getExternalStorageDirectory())!.path;
print('filepath : $path/$fileName');
String data='empty';
print('data pos1= $data');
data = (await io.File('$path/$fileName').exists()).toString();
final file = File('$path/$fileName');
await file.writeAsBytes(
bytes,
flush: true
);
print('data pos2= $data');
OpenFile.open('$path/$fileName');
print('done');
}
catch (e) {
print('error : $e');
}
}
现在当我按下“点击我”时,它什么也不做,它应该显示来自 main.dart 的“欢迎”字符串
mobile.dart 的输出如下:
Syncing files to device Android SDK built for x86...
Reloaded 1 of 955 libraries in 310ms.
I/flutter ( 3688): filepath : `/storage/emulated/0/Android/data/com.cg2.my_first_try/files/Outfile.pdf`
I/flutter ( 3688): data pos1= empty
I/flutter ( 3688): data pos2= true
I/flutter ( 3688): done
有趣的是,前一天,当我第一次安装 android studio,颤动并运行这个程序时,它正在工作。然后我更新了对 yaml 文件的依赖,然后在 mobile.dart 上的这一行上,询问
final path = (await getExternalStorageDirectory()).path; generate error ....potentialy null.
所以我变成了:
final path = (await getExternalStorageDirectory())!.path;
最后,我使用的是 ubuntu 20.04,我只需要了解发生了什么,是 androdi studio 还是模拟器问题,还是 linux 需要权限才能获取外部存储目录。谢谢。
【问题讨论】:
-
检查您的应用程序对外部存储的权限。按照这个manual 去做。如果应用程序具有存储权限,它就可以工作,如果没有,你在说什么
-
感谢您的输入。但我正在模拟器中尝试它,而不是在安卓手机上。
-
手机上没试过,模拟器上跑了
标签: flutter android-studio dart