add reader menu actions

This commit is contained in:
niuhuan 2021-12-04 09:06:52 +08:00
parent c4b116087e
commit 046a9e8f50
8 changed files with 78 additions and 14 deletions

View File

@ -21,11 +21,11 @@ Future<void> initAddress() async {
_currentAddress = await method.getSwitchAddress(); _currentAddress = await method.getSwitchAddress();
} }
String _currentAddressName() { String currentAddressName() {
return _addresses[_currentAddress] ?? ""; return _addresses[_currentAddress] ?? "";
} }
Future<void> _chooseAddress(BuildContext context) async { Future<void> chooseAddress(BuildContext context) async {
String? choose = await showDialog<String>( String? choose = await showDialog<String>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -55,9 +55,9 @@ Widget switchAddressSetting() {
builder: (BuildContext context, void Function(void Function()) setState) { builder: (BuildContext context, void Function(void Function()) setState) {
return ListTile( return ListTile(
title: Text("分流"), title: Text("分流"),
subtitle: Text(_currentAddressName()), subtitle: Text(currentAddressName()),
onTap: () async { onTap: () async {
await _chooseAddress(context); await chooseAddress(context);
setState(() {}); setState(() {});
}, },
); );

View File

@ -21,11 +21,11 @@ int currentImageAddress() {
return int.parse(_currentImageAddress); return int.parse(_currentImageAddress);
} }
String _currentImageAddressName() { String currentImageAddressName() {
return _imageAddresses[_currentImageAddress] ?? ""; return _imageAddresses[_currentImageAddress] ?? "";
} }
Future<void> _chooseImageAddress(BuildContext context) async { Future<void> chooseImageAddress(BuildContext context) async {
String? choose = await showDialog<String>( String? choose = await showDialog<String>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -55,9 +55,9 @@ Widget imageSwitchAddressSetting() {
builder: (BuildContext context, void Function(void Function()) setState) { builder: (BuildContext context, void Function(void Function()) setState) {
return ListTile( return ListTile(
title: Text("图片分流"), title: Text("图片分流"),
subtitle: Text(_currentImageAddressName()), subtitle: Text(currentImageAddressName()),
onTap: () async { onTap: () async {
await _chooseImageAddress(context); await chooseImageAddress(context);
setState(() {}); setState(() {});
}, },
); );

View File

@ -36,7 +36,6 @@ class _PikapikaAppState extends State<PikapikaApp> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(
debugShowCheckedModeBanner: false,
theme: currentThemeData(), theme: currentThemeData(),
darkTheme: currentDarkTheme(), darkTheme: currentDarkTheme(),
navigatorObservers: [navigatorObserver, routeObserver], navigatorObservers: [navigatorObserver, routeObserver],

View File

@ -1,4 +1,3 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Cross.dart'; import 'package:pikapika/basic/Cross.dart';

View File

@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
import 'package:pikapika/basic/config/Quality.dart'; import 'package:pikapika/basic/config/Quality.dart';
import 'package:pikapika/screens/components/ContentError.dart'; import 'package:pikapika/screens/components/ContentError.dart';
import 'package:pikapika/screens/components/ContentLoading.dart'; import 'package:pikapika/screens/components/ContentLoading.dart';
import 'DownloadConfirmScreen.dart';
import 'components/ImageReader.dart'; import 'components/ImageReader.dart';
// 线 // 线
@ -107,6 +108,18 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
)); ));
} }
FutureOr<dynamic> _onDownload() {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DownloadConfirmScreen(
comicInfo: widget.comicInfo,
epList: widget.epList.reversed.toList(),
),
),
);
}
@override @override
void initState() { void initState() {
// EP // EP
@ -193,6 +206,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
comicTitle: widget.comicInfo.title, comicTitle: widget.comicInfo.title,
onChangeEp: _onChangeEp, onChangeEp: _onChangeEp,
onReloadEp: _onReloadEp, onReloadEp: _onReloadEp,
onDownload: _onDownload,
), ),
), ),
); );

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Entities.dart'; import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/basic/config/AutoFullScreen.dart'; import 'package:pikapika/basic/config/AutoFullScreen.dart';
import 'package:pikapika/basic/config/FullScreenUI.dart'; import 'package:pikapika/basic/config/FullScreenUI.dart';
@ -69,6 +70,10 @@ class _DownloadReaderScreenState extends State<DownloadReaderScreen> {
widget.comicInfo.id, _ep.epOrder, _ep.title, position); widget.comicInfo.id, _ep.epOrder, _ep.title, position);
} }
FutureOr<dynamic> _onDownload() async {
defaultToast(context, "您已经在下载阅读");
}
FutureOr<dynamic> _onChangeEp(int epOrder) { FutureOr<dynamic> _onChangeEp(int epOrder) {
var orderMap = Map<int, DownloadEp>(); var orderMap = Map<int, DownloadEp>();
widget.epList.forEach((element) { widget.epList.forEach((element) {
@ -183,6 +188,7 @@ class _DownloadReaderScreenState extends State<DownloadReaderScreen> {
comicTitle: widget.comicInfo.title, comicTitle: widget.comicInfo.title,
onReloadEp: _onReloadEp, onReloadEp: _onReloadEp,
onChangeEp: _onChangeEp, onChangeEp: _onChangeEp,
onDownload: _onDownload,
), ),
), ),
); );

View File

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:pikapika/basic/Entities.dart'; import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/screens/components/CommentMainType.dart'; import 'package:pikapika/screens/components/CommentMainType.dart';

View File

@ -12,7 +12,9 @@ import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Cross.dart'; import 'package:pikapika/basic/Cross.dart';
import 'package:pikapika/basic/Entities.dart'; import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/basic/config/Address.dart';
import 'package:pikapika/basic/config/FullScreenAction.dart'; import 'package:pikapika/basic/config/FullScreenAction.dart';
import 'package:pikapika/basic/config/ImageAddress.dart';
import 'package:pikapika/basic/config/KeyboardController.dart'; import 'package:pikapika/basic/config/KeyboardController.dart';
import 'package:pikapika/basic/config/NoAnimation.dart'; import 'package:pikapika/basic/config/NoAnimation.dart';
import 'package:pikapika/basic/config/Quality.dart'; import 'package:pikapika/basic/config/Quality.dart';
@ -115,6 +117,7 @@ class ImageReaderStruct {
final String comicTitle; final String comicTitle;
final FutureOr<dynamic> Function(int) onChangeEp; final FutureOr<dynamic> Function(int) onChangeEp;
final FutureOr<dynamic> Function() onReloadEp; final FutureOr<dynamic> Function() onReloadEp;
final FutureOr<dynamic> Function() onDownload;
const ImageReaderStruct({ const ImageReaderStruct({
required this.images, required this.images,
@ -127,6 +130,7 @@ class ImageReaderStruct {
required this.comicTitle, required this.comicTitle,
required this.onChangeEp, required this.onChangeEp,
required this.onReloadEp, required this.onReloadEp,
required this.onDownload,
}); });
} }
@ -214,6 +218,8 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> {
// //
late bool _listVolume; late bool _listVolume;
//
@override @override
void initState() { void initState() {
_initCurrent(); _initCurrent();
@ -277,6 +283,8 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> {
} }
} }
//
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
switch (currentFullScreenAction()) { switch (currentFullScreenAction()) {
@ -562,7 +570,10 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> {
builder: (context) { builder: (context) {
return Container( return Container(
height: MediaQuery.of(context).size.height / 2, height: MediaQuery.of(context).size.height / 2,
child: _SettingPanel(), child: _SettingPanel(
widget.struct.onReloadEp,
widget.struct.onDownload,
),
); );
}, },
); );
@ -574,7 +585,7 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> {
} }
} }
// //
Future _onNextAction() async { Future _onNextAction() async {
if (widget.struct.epNameMap.containsKey(widget.struct.epOrder + 1)) { if (widget.struct.epNameMap.containsKey(widget.struct.epOrder + 1)) {
@ -644,6 +655,11 @@ class _EpChooserState extends State<_EpChooser> {
} }
class _SettingPanel extends StatefulWidget { class _SettingPanel extends StatefulWidget {
final FutureOr Function() onReloadEp;
final FutureOr Function() onDownload;
_SettingPanel(this.onReloadEp, this.onDownload);
@override @override
State<StatefulWidget> createState() => _SettingPanelState(); State<StatefulWidget> createState() => _SettingPanelState();
} }
@ -691,6 +707,38 @@ class _SettingPanelState extends State<_SettingPanel> {
], ],
), ),
), ),
Container(
child: Row(
children: [
_bottomIcon(
icon: Icons.shuffle,
title: currentAddressName(),
onPressed: () async {
await chooseAddress(context);
setState(() {});
},
),
_bottomIcon(
icon: Icons.repeat_one,
title: currentImageAddressName(),
onPressed: () async {
await chooseImageAddress(context);
setState(() {});
},
),
_bottomIcon(
icon: Icons.refresh,
title: "重载页面",
onPressed: widget.onReloadEp,
),
_bottomIcon(
icon: Icons.file_download,
title: "下载本作",
onPressed: widget.onDownload,
),
],
),
),
], ],
); );
} }
@ -799,7 +847,6 @@ class _WebToonReaderState extends _ImageReaderContentState {
} }
Widget _buildList() { Widget _buildList() {
var scaffold = Scaffold.of(context);
return LayoutBuilder( return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) { builder: (BuildContext context, BoxConstraints constraints) {
// reload _images size // reload _images size