【问题标题】:Flutter open_file.dart not opening pdf fileFlutter open_file.dart没有打开pdf文件
【发布时间】: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


【解决方案1】:

似乎是 java 版本导致了这种情况。谷歌搜索后,发现 openJdk16 存在可兼容问题,弄乱了 gradle 创建。所以我降级到 11,到目前为止看起来不错。

【讨论】:

    【解决方案2】:

    要使用 jdk 16,您应该升级到:

    android/gradle/wrapper/gradle-wrapper.properties

    distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
    

    android/build.gradle

    classpath 'com.android.tools.build:gradle:7.0.1'
    

    我的jdk

    java 16.0.1 2021-04-20
    Java(TM) SE Runtime Environment (build 16.0.1+9-24)
    Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 2018-08-20
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多