Я пытаюсь сохранить трек на странице, которую пользователь читает из 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](https://i.stack.imgur.com/MViK3.jpg)
В качестве альтернативы, и, на самом деле, я думаю, что это было бы более элегантным решением, я бы хотел добавить панель параметров, как это делает галерея изображений на Android, когда вы нажимаете на изображение.
![enter image description here](https://i.stack.imgur.com/75NNR.jpg)
Конечно, я хочу, чтобы он прошел через просмотрщик PDF, но у меня проблемы с поиском компонента или способа сделать это. Поэтому я ищу какое-то направление в этом ...