Флаттер показать / скрыть панель параметров в программе просмотра PDF - PullRequest
2 голосов
/ 13 марта 2019

Я пытаюсь сохранить трек на странице, которую пользователь читает из pdf, поэтому сначала я попытался прокрутить прокрутку для файла, который не имеет особого смысла, так как pdf отображается как есть, так что если я разделить страницы PDF на разные файлы, которые я могу сохранить, но чтобы позволить пользователю изменить страницу, я хотел бы добавить некоторые элементы управления, такие как следующая страница и предыдущая страница. Сначала я попытался добавить кнопку с плавающим действием, которая должна быть скрыта и отображаться, когда пользователь нажимает на экран, поэтому я сделал это:

Я использую плагин flutter_full_pdf_viewer.

import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart';
import 'package:path_provider/path_provider.dart';

void main() {
  runApp(MaterialApp(
    title: 'Little Readers',
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String pathPDF = "";
  double iconSize = 80;
  MaterialColor iconColor = Colors.blue;

  @override
  void initState() {
    super.initState();
    createFileOfPdfUrl().then((file) {
      setState(() {
        pathPDF = file.path;
        print(pathPDF);
      });
    });
  }

  Future<File> createFileOfPdfUrl() async {
    final url = "http://africau.edu/images/default/sample.pdf";
    final filename = url.substring(url.lastIndexOf("/") + 1);
    var request = await HttpClient().getUrl(Uri.parse(url));
    var response = await request.close();
    var bytes = await consolidateHttpClientResponseBytes(response);
    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = new File('$dir/$filename');
    await file.writeAsBytes(bytes);
    return file;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('My App'),
      ),
      body: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          verticalDirection: VerticalDirection.down,
          children: <Widget>[
            Align(
              alignment: Alignment.topCenter,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  IconButton(
                    iconSize: iconSize,
                    color: iconColor,
                    icon: Icon(Icons.book),
                    onPressed: () => Navigator.push(
                          context,
                          MaterialPageRoute(
                              builder: (context) => PDFScreen(pathPDF)),
                        ),
                  ),
                ],
              ),
            ),
          ]),
    );
  }
}

class PDFScreen extends StatelessWidget {
  String pathPDF = "";
  PDFScreen(this.pathPDF);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          PDFViewerScaffold(
            appBar: AppBar(
              title: Text("My Book"),
              actions: <Widget>[
                IconButton(
                  icon: Icon(Icons.share),
                  onPressed: () => {},
                )
              ],
            ),
            path: pathPDF,
          ),
          Positioned(
            child: new FloatingActionButton(
              child: Icon(Icons.camera_alt),
              backgroundColor: Colors.green.shade800,
              onPressed: () => {},
            ),
          ),
        ],
      ),
    );
  }
}

проблема в том, что FAB отображается на панели приложений независимо от того, установил ли я свойства top, bottom, left или right, он фактически перемещается в зависимости от установленной позиции, но только через панель приложений.

enter image description here

В качестве альтернативы, и, на самом деле, я думаю, что это было бы более элегантным решением, я бы хотел добавить панель параметров, как это делает галерея изображений на Android, когда вы нажимаете на изображение.

enter image description here

Конечно, я хочу, чтобы он прошел через просмотрщик PDF, но у меня проблемы с поиском компонента или способа сделать это. Поэтому я ищу какое-то направление в этом ...

1 Ответ

1 голос
/ 02 июля 2019

Я на самом деле совсем недавно должен был сделать что-то подобное сам.Я обернул свою плавающую кнопку действия с виджетом Align следующим образом.

floatingActionButton: Align(
      child: Container(
        child: FloatingActionButton(
          heroTag: 'scaffoldBtn'+_scafKey.hashCode.toString(),
          onPressed: () {
            _scafKey.currentState.openDrawer();
          },
          backgroundColor: Utils.hexToColor('#07467A'),
          tooltip: 'Menu',
          child: Padding(
            padding: const EdgeInsets.only(left: 13.0),
            child: Icon(Icons.menu),
          ),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.horizontal(
              right: Radius.circular(20.0),
            ),
            side:
                BorderSide(color: Utils.hexToColor('#979797'), width: 2.0),
          ),
        ),
        width: 65.0,
        height: 55.0,
      ),
      alignment: Alignment(-0.99, 0.9),
    ),

Вот ссылка на виджет Align для получения дополнительной информации.https://api.flutter.dev/flutter/widgets/Align-class.html

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...