add reader menu actions
This commit is contained in:
parent
c4b116087e
commit
046a9e8f50
|
@ -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(() {});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -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(() {});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -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],
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue