web-dev-qa-db-fra.com

Afficher PDF Fichier en ligne pour iOS dans Flutter

Je développe une application en flutter spécialement pour iOS (à ce stade) et je dois y ajouter des fichiers PDF. Le problème est que flutter n'a aucun moyen natif d'afficher les fichiers PDF (pour autant que j'ai fait des recherches).

De cette bande de roulement il semble qu'il ne devrait pas être trop difficile d'ajouter la prise en charge de PDF aux appareils iOS à l'aide du plug-in this . Cependant, je ne sais toujours pas comment l'intégrer exactement dans mon application Flutter.

Toute aide serait appréciée!

10
AGoranov

Lorsque j'implémentais la fonctionnalité pour PDF viewer, il n'y avait pas de plug-in PDF.

Cependant, assez drôle un ami au travail a découvert qu'il y avait déjà un PDF visualiseur implémenté pour Flutter ici , que nous avons fini par utiliser).

Remarque: Au moment de la rédaction de la question, 16.08, aucun plugin n'était encore disponible. Le mentionné a été créé le 30.08.

3
AGoranov

ajouter les dépendances dans le pubspec.yaml

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2
  pdf_viewer_plugin: ^1.0.0+2
  path_provider: ^1.6.1
  http: ^0.12.0+4

main.Dart

import 'Dart:async';
import 'Dart:io';
import 'Dart:typed_data';
import 'package:flutter/material.Dart';
import 'package:pdf_viewer_plugin/pdf_viewer_plugin.Dart';
import 'package:path_provider/path_provider.Dart';
import 'package:http/http.Dart' as http;

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  String path;
  @override
  initState() {
    super.initState();
  }
  Future<String> get _localPath async {
    final directory = await getApplicationDocumentsDirectory();

    return directory.path;
  }

  Future<File> get _localFile async {
    final path = await _localPath;
    return File('$path/teste.pdf');
  }

  Future<File> writeCounter(Uint8List stream) async {
    final file = await _localFile;
    // Write the file
    return file.writeAsBytes(stream);
  }

  Future<Uint8List> fetchPost() async {
    final response = await http.get(
        'https://expoforest.com.br/wp-content/uploads/2017/05/exemplo.pdf');
    final responseJson = response.bodyBytes;

    return responseJson;
  }

  loadPdf() async {
    writeCounter(await fetchPost());
    path = (await _localFile).path;

    if (!mounted) return;

    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              if (path != null)
                Container(
                  height: 300.0,
                  child: PdfViewer(
                    filePath: path,
                  ),
                )
              else
                Text("Pdf is not Loaded"),
              RaisedButton(
                child: Text("Load pdf"),
                onPressed: loadPdf,
              ),
            ],
          ),
        ),
      ),
    );
  }
}
0
Avid Programmer