android short edge, dusty blue, info card layout
This commit is contained in:
parent
46494f13a5
commit
c4b116087e
|
@ -3,10 +3,7 @@ package niuhuan.pikapika
|
|||
import android.content.ContentValues
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.os.Build
|
||||
import android.os.Environment
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.*
|
||||
import android.provider.MediaStore
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
|
@ -33,6 +30,10 @@ import java.util.concurrent.Executors
|
|||
|
||||
class MainActivity : FlutterActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
|
||||
super.onCreate(savedInstanceState, persistentState)
|
||||
}
|
||||
|
||||
// 为什么换成换成线程池而不继续使用携程 : 下载图片速度慢会占满携程造成拥堵, 接口无法请求
|
||||
private val pool = Executors.newCachedThreadPool { runnable ->
|
||||
Thread(runnable).also { it.isDaemon = true }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
|
@ -14,5 +14,6 @@
|
|||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
|
@ -14,5 +14,6 @@
|
|||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
|
@ -12,11 +12,12 @@ enum FullScreenAction {
|
|||
}
|
||||
|
||||
Map<String, FullScreenAction> _fullScreenActionMap = {
|
||||
"使用控制器全屏": FullScreenAction.CONTROLLER,
|
||||
"点击屏幕一次全屏": FullScreenAction.TOUCH_ONCE,
|
||||
"使用控制器全屏": FullScreenAction.CONTROLLER,
|
||||
"将屏幕划分成三个区域 (上一页, 下一页, 全屏)": FullScreenAction.THREE_AREA,
|
||||
};
|
||||
|
||||
const _defaultController = FullScreenAction.TOUCH_ONCE;
|
||||
const _propertyName = "fullScreenAction";
|
||||
late FullScreenAction _fullScreenAction;
|
||||
|
||||
|
@ -37,7 +38,7 @@ FullScreenAction _fullScreenActionFromString(String string) {
|
|||
return value;
|
||||
}
|
||||
}
|
||||
return FullScreenAction.CONTROLLER;
|
||||
return _defaultController;
|
||||
}
|
||||
|
||||
String currentFullScreenActionName() {
|
||||
|
|
|
@ -6,7 +6,7 @@ import '../Method.dart';
|
|||
const _ImageQualityOriginal = "original";
|
||||
const _ImageQualityLow = "low";
|
||||
const _ImageQualityMedium = "medium";
|
||||
const ImageQualityHigh = "high";
|
||||
const _ImageQualityHigh = "high";
|
||||
|
||||
const _LabelOriginal = "原图";
|
||||
const _LabelLow = "低";
|
||||
|
@ -17,7 +17,7 @@ var _qualities = {
|
|||
_LabelOriginal: _ImageQualityOriginal,
|
||||
_LabelLow: _ImageQualityLow,
|
||||
_LabelMedium: _ImageQualityMedium,
|
||||
_LabelHigh: ImageQualityHigh,
|
||||
_LabelHigh: _ImageQualityHigh,
|
||||
};
|
||||
|
||||
const _propertyName = "quality";
|
||||
|
|
|
@ -163,11 +163,48 @@ class _DarkTheme extends _ThemePackage {
|
|||
);
|
||||
}
|
||||
|
||||
//
|
||||
class _DustyBlueTheme extends _ThemePackage {
|
||||
@override
|
||||
String code() => "dustyBlue";
|
||||
|
||||
@override
|
||||
String name() => "灰蓝";
|
||||
|
||||
@override
|
||||
ThemeData themeData(ThemeData rawData) =>
|
||||
rawData.copyWith(
|
||||
scaffoldBackgroundColor: Color.alphaBlend(Color(0x11999999), Color(0xff20253b)),
|
||||
cardColor: Color.alphaBlend(Color(0x11AAAAAA), Color(0xff20253b)),
|
||||
brightness: Brightness.light,
|
||||
colorScheme: ColorScheme.light(
|
||||
secondary: Colors.blue.shade200,
|
||||
),
|
||||
appBarTheme: AppBarTheme(
|
||||
brightness: Brightness.dark,
|
||||
color: Color(0xff20253b),
|
||||
iconTheme: IconThemeData(
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
bottomNavigationBarTheme: BottomNavigationBarThemeData(
|
||||
backgroundColor: Color(0xff191b26),
|
||||
selectedItemColor: Colors.blue.shade200,
|
||||
unselectedItemColor: Colors.grey.shade500,
|
||||
),
|
||||
dividerColor: Colors.grey.shade800,
|
||||
);
|
||||
}
|
||||
|
||||
var _darkTheme = _DarkTheme();
|
||||
var _dustyBlueTheme = _DustyBlueTheme();
|
||||
|
||||
final _themePackages = <_ThemePackage>[
|
||||
_OriginTheme(),
|
||||
_PinkTheme(),
|
||||
_BlackTheme(),
|
||||
_DarkTheme(),
|
||||
_darkTheme,
|
||||
_dustyBlueTheme,
|
||||
];
|
||||
|
||||
// 主题更换事件
|
||||
|
@ -210,11 +247,12 @@ void _changeThemeByCode(String? themeCode) {
|
|||
}
|
||||
if (_themePackage != null) {
|
||||
_themeData = _themePackage.themeData(
|
||||
_fontThemeData(_themePackage == _themePackages[3]),
|
||||
_fontThemeData(
|
||||
_themePackage == _darkTheme || _themePackage == _dustyBlueTheme),
|
||||
);
|
||||
}
|
||||
_currentDarkTheme = _androidNightMode
|
||||
? _themePackages[3].themeData(_fontThemeData(true))
|
||||
? _darkTheme.themeData(_fontThemeData(true))
|
||||
: _themeData;
|
||||
themeEvent.broadcast();
|
||||
}
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
var readerAppbarColor = Color(0xff1e202c);
|
||||
var readerAppbarColor2 = readerAppbarColor.withAlpha(225);
|
|
@ -36,6 +36,7 @@ class _PikapikaAppState extends State<PikapikaApp> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
theme: currentThemeData(),
|
||||
darkTheme: currentDarkTheme(),
|
||||
navigatorObservers: [navigatorObserver, routeObserver],
|
||||
|
|
|
@ -8,9 +8,6 @@ import 'package:pikapika/basic/Method.dart';
|
|||
import 'package:pikapika/basic/config/AutoFullScreen.dart';
|
||||
import 'package:pikapika/basic/config/FullScreenUI.dart';
|
||||
import 'package:pikapika/basic/config/Quality.dart';
|
||||
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
||||
import 'package:pikapika/basic/config/ReaderType.dart';
|
||||
import 'package:pikapika/basic/const.dart';
|
||||
import 'package:pikapika/screens/components/ContentError.dart';
|
||||
import 'package:pikapika/screens/components/ContentLoading.dart';
|
||||
import 'components/ImageReader.dart';
|
||||
|
@ -146,7 +143,6 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
|
|||
appBar: _fullScreen
|
||||
? null
|
||||
: AppBar(
|
||||
backgroundColor: readerAppbarColor,
|
||||
title: Text("${_ep.title} - ${widget.comicInfo.title}"),
|
||||
),
|
||||
body: ContentError(
|
||||
|
@ -165,7 +161,6 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
|
|||
appBar: _fullScreen
|
||||
? null
|
||||
: AppBar(
|
||||
backgroundColor: readerAppbarColor,
|
||||
title: Text("${_ep.title} - ${widget.comicInfo.title}"),
|
||||
),
|
||||
body: ContentLoading(label: '加载中'),
|
||||
|
|
|
@ -2,13 +2,11 @@ import 'dart:async';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:pikapika/basic/Common.dart';
|
||||
import 'package:pikapika/basic/Entities.dart';
|
||||
import 'package:pikapika/basic/config/AutoFullScreen.dart';
|
||||
import 'package:pikapika/basic/config/FullScreenUI.dart';
|
||||
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
||||
import 'package:pikapika/basic/config/ReaderType.dart';
|
||||
import 'package:pikapika/screens/components/ContentBuilder.dart';
|
||||
import 'package:pikapika/basic/Method.dart';
|
||||
import 'components/ContentError.dart';
|
||||
import 'components/ContentLoading.dart';
|
||||
|
|
|
@ -151,7 +151,8 @@ class _ComicInfoCard extends State<ComicInfoCard> {
|
|||
Text.rich(TextSpan(children: [
|
||||
WidgetSpan(child: iconPage),
|
||||
WidgetSpan(child: iconSpacing),
|
||||
WidgetSpan(child: Text(
|
||||
WidgetSpan(
|
||||
child: Text(
|
||||
"${info.epsCount}E / ${info.pagesCount}P",
|
||||
style: countLabelStyle,
|
||||
strutStyle: iconLabelStrutStyle,
|
||||
|
@ -178,49 +179,54 @@ class _ComicInfoCard extends State<ComicInfoCard> {
|
|||
...(like == null
|
||||
? []
|
||||
: [
|
||||
_likeLoading
|
||||
? IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: () {},
|
||||
icon: Icon(
|
||||
Icons.sync,
|
||||
size: 26,
|
||||
),
|
||||
)
|
||||
: IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: _changeLike,
|
||||
icon: Icon(
|
||||
like
|
||||
? Icons.favorite
|
||||
: Icons.favorite_border,
|
||||
size: 26,
|
||||
),
|
||||
),
|
||||
Container(height: 10),
|
||||
Container(
|
||||
height: 26,
|
||||
child: _likeLoading
|
||||
? IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: () {},
|
||||
icon: Icon(
|
||||
Icons.sync,
|
||||
),
|
||||
)
|
||||
: IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: _changeLike,
|
||||
icon: Icon(
|
||||
like
|
||||
? Icons.favorite
|
||||
: Icons.favorite_border,
|
||||
),
|
||||
),
|
||||
),
|
||||
]),
|
||||
...(favourite == null
|
||||
? []
|
||||
: [
|
||||
_favouriteLoading
|
||||
? IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: () {},
|
||||
icon: Icon(
|
||||
Icons.sync,
|
||||
size: 26,
|
||||
),
|
||||
)
|
||||
: IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: _changeFavourite,
|
||||
icon: Icon(
|
||||
favourite
|
||||
? Icons.bookmark
|
||||
: Icons.bookmark_border,
|
||||
size: 26,
|
||||
),
|
||||
),
|
||||
Container(height: 10),
|
||||
Container(
|
||||
height: 26,
|
||||
child: _favouriteLoading
|
||||
? IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: () {},
|
||||
icon: Icon(
|
||||
Icons.sync,
|
||||
),
|
||||
)
|
||||
: IconButton(
|
||||
color: Colors.pink[400],
|
||||
onPressed: _changeFavourite,
|
||||
icon: Icon(
|
||||
favourite
|
||||
? Icons.bookmark
|
||||
: Icons.bookmark_border,
|
||||
),
|
||||
),
|
||||
),
|
||||
]),
|
||||
Container(height: 10),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -19,7 +19,6 @@ import 'package:pikapika/basic/config/Quality.dart';
|
|||
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
||||
import 'package:pikapika/basic/config/ReaderType.dart';
|
||||
import 'package:pikapika/basic/config/VolumeController.dart';
|
||||
import 'package:pikapika/basic/const.dart';
|
||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||
import '../FilePhotoViewScreen.dart';
|
||||
import 'gesture_zoom_box.dart';
|
||||
|
|
Loading…
Reference in New Issue