'Flutter Dependency problem with advance_pdf_viewer and firebase_storage

Can't able to complie the app when advance_pdf_viewer and firebase_storage package is used. At first it works fine but later its version changed and i dont know the exact version which matches.

Publicspec.yaml file

  cupertino_icons: ^1.0.3
  flutter_svg: ^0.22.0 # help us to use SVG in our app
  provider: ^5.0.0 # for State management
  getwidget: ^2.0.2
  shared_preferences: ^2.0.5
  firebase_auth: ^1.0.1
  firebase_core: ^1.0.2
  cloud_firestore: ^1.0.3
  firebase_storage: ^8.0.1
  advance_pdf_viewer:
  date_time_picker: ^2.0.0
  file_picker:
  intl: ^0.17.0
  path: ^1.8.0
  http:

Error message

Running "flutter pub get" in appT...
Launching lib/main.dart on SDKPhone in debug mode...
Running Gradle task 'assembleDebug'...
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
../../flutter/.pub-cache/hosted/pub.dartlang.org/advance_pdf_viewer-2.0.0/lib/src/document.dart:64:14: Error: The class 'File' is abstract and can't be instantiated.
      file = File("${dir.path}/file.pdf");
             ^^^^
../../flutter/.pub-cache/hosted/pub.dartlang.org/advance_pdf_viewer-2.0.0/lib/src/document.dart:72:26: Error: Non-nullable variable 'file' must be assigned before it can be used.
    document._filePath = file.path;
                         ^^^^
../../flutter/.pub-cache/hosted/pub.dartlang.org/advance_pdf_viewer-2.0.0/lib/src/document.dart:75:58: Error: Non-nullable variable 'file' must be assigned before it can be used.
          .invokeMethod('getNumberOfPages', {'filePath': file.path});
                                                         ^^^^


FAILURE: Build failed with an exception.

* Where:
Script '/home/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1035

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command '/home/flutter/bin/flutter'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 48s
Exception: Gradle task assembleDebug failed with exit code 1


Solution 1:[1]

#It's Works

In detailed manner from the above link answer.

Edited the /flutter/.pub-cache/hosted/pub.dartlang.org/advance_pdf_viewer-2.0.0/lib/src/document.dart

//edit the import line like this
//import 'dart:io'; - > import 'dart:io' as io; : line 2
import 'dart:io' as io;
....
....
....

static Future fromAsset(String asset) async {
    io.File file; // Edited
    try {
        var dir = await getApplicationDocumentsDirectory();
        file = io.File("${dir.path}/file.pdf"); // Edited
        var data = await rootBundle.load(asset);
        var bytes = data.buffer.asUint8List();
        await file.writeAsBytes(bytes, flush: true);
    } catch (e) {
        throw Exception('Error parsing asset file!');
    }
    PDFDocument document = PDFDocument();
    document._filePath = file.path;
    try {
        var pageCount = await _channel
        .invokeMethod('getNumberOfPages', {'filePath': file.path});
        document.count = document.count = int.parse(pageCount);
    } catch (e) {
        throw Exception('Error reading PDF!');
    }
    return document;
}

Solution:

Import the package as "io" and change only in "fromAsset" function call the Class(File) as "io.File" then It works fine.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mufazmi