mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: color scheme
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -55,29 +55,22 @@ Widget articleContent({
|
||||
);
|
||||
} else if (item.pic != null) {
|
||||
return LayoutBuilder(
|
||||
builder: (context, constraints) => GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
initialPage: imgList.indexOf(item.pic!.pics!.first.url!),
|
||||
imgList: imgList,
|
||||
);
|
||||
// showDialog(
|
||||
// useSafeArea: false,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return ImagePreview(
|
||||
// initialPage: imgList.indexOf(item.pic!.pics!.first.url!),
|
||||
// imgList: imgList,
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
},
|
||||
child: NetworkImgLayer(
|
||||
width: constraints.maxWidth,
|
||||
height: constraints.maxWidth *
|
||||
item.pic!.pics!.first.height! /
|
||||
item.pic!.pics!.first.width!,
|
||||
src: item.pic!.pics!.first.url,
|
||||
builder: (context, constraints) => Hero(
|
||||
tag: item.pic!.pics!.first.url!,
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
initialPage: imgList.indexOf(item.pic!.pics!.first.url!),
|
||||
imgList: imgList,
|
||||
);
|
||||
},
|
||||
child: NetworkImgLayer(
|
||||
width: constraints.maxWidth,
|
||||
height: constraints.maxWidth *
|
||||
item.pic!.pics!.first.height! /
|
||||
item.pic!.pics!.first.width!,
|
||||
src: item.pic!.pics!.first.url,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -40,32 +40,25 @@ Widget htmlRender({
|
||||
// extensionContext.element!.previousElementSibling == null ||
|
||||
// extensionContext.element!.nextElementSibling == null;
|
||||
// imgUrl = Utils().imageUrl(imgUrl!);
|
||||
// return Image.network(
|
||||
// imgUrl,
|
||||
// return CachedNetworkImage(
|
||||
// imageUrl: imgUrl,
|
||||
// width: isEmote ? 22 : null,
|
||||
// height: isEmote ? 22 : null,
|
||||
// );
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
imgList: [imgUrl],
|
||||
);
|
||||
// showDialog(
|
||||
// useSafeArea: false,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return ImagePreview(
|
||||
// initialPage: 0,
|
||||
// imgList: [imgUrl],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
},
|
||||
child: NetworkImgLayer(
|
||||
width: isEmote ? 22 : constrainedWidth,
|
||||
height: isEmote ? 22 : 200,
|
||||
src: imgUrl,
|
||||
ignoreHeight: !isEmote,
|
||||
return Hero(
|
||||
tag: imgUrl,
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
imgList: [imgUrl],
|
||||
);
|
||||
},
|
||||
child: NetworkImgLayer(
|
||||
width: isEmote ? 22 : constrainedWidth,
|
||||
height: isEmote ? 22 : 200,
|
||||
src: imgUrl,
|
||||
ignoreHeight: !isEmote,
|
||||
),
|
||||
),
|
||||
);
|
||||
} catch (err) {
|
||||
|
||||
@@ -65,16 +65,6 @@ Widget imageview(
|
||||
imgList: picArr.map((item) => item.url).toList(),
|
||||
onDismissed: onDismissed,
|
||||
);
|
||||
// showDialog(
|
||||
// useSafeArea: false,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return ImagePreview(
|
||||
// initialPage: index,
|
||||
// imgList: picArr.map((item) => item.url).toList(),
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
},
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
|
||||
@@ -93,7 +93,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
||||
|
||||
_quality =
|
||||
GStorage.setting.get(SettingBoxKey.previewQuality, defaultValue: 80);
|
||||
_thumbList = List.filled(widget.sources.length, true);
|
||||
_thumbList = List.generate(widget.sources.length, (_) => true);
|
||||
|
||||
_pageController = PageController(initialPage: widget.initIndex);
|
||||
|
||||
|
||||
@@ -71,10 +71,12 @@ class _ListSheetContentState extends State<ListSheetContent>
|
||||
});
|
||||
}
|
||||
itemScrollController = _isList
|
||||
? List.filled(widget.season.sections.length, ItemScrollController())
|
||||
? List.generate(
|
||||
widget.season.sections.length, (_) => ItemScrollController())
|
||||
: [ItemScrollController()];
|
||||
reverse =
|
||||
_isList ? List.filled(widget.season.sections.length, false) : [false];
|
||||
reverse = _isList
|
||||
? List.generate(widget.season.sections.length, (_) => false)
|
||||
: [false];
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
itemScrollController[_index].jumpTo(index: currentIndex);
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:PiliPalaX/utils/cache_manage.dart';
|
||||
import 'package:flex_seed_scheme/flex_seed_scheme.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_displaymode/flutter_displaymode.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
@@ -110,8 +111,10 @@ class MyApp extends StatelessWidget {
|
||||
// 字体缩放大小
|
||||
double textScale =
|
||||
setting.get(SettingBoxKey.defaultTextScale, defaultValue: 1.0);
|
||||
DynamicSchemeVariant dynamicSchemeVariant =
|
||||
DynamicSchemeVariant.values[GStorage.schemeVariant];
|
||||
// DynamicSchemeVariant dynamicSchemeVariant =
|
||||
// DynamicSchemeVariant.values[GStorage.schemeVariant];
|
||||
FlexSchemeVariant variant =
|
||||
FlexSchemeVariant.values[GStorage.schemeVariant];
|
||||
|
||||
// 强制设置高帧率
|
||||
if (Platform.isAndroid) {
|
||||
@@ -139,15 +142,19 @@ class MyApp extends StatelessWidget {
|
||||
darkColorScheme = darkDynamic.harmonized();
|
||||
} else {
|
||||
// dynamic取色失败,采用品牌色
|
||||
lightColorScheme = ColorScheme.fromSeed(
|
||||
seedColor: brandColor,
|
||||
lightColorScheme = SeedColorScheme.fromSeeds(
|
||||
primaryKey: brandColor,
|
||||
brightness: Brightness.light,
|
||||
dynamicSchemeVariant: dynamicSchemeVariant,
|
||||
variant: variant,
|
||||
// dynamicSchemeVariant: dynamicSchemeVariant,
|
||||
// tones: FlexTones.soft(Brightness.light),
|
||||
);
|
||||
darkColorScheme = ColorScheme.fromSeed(
|
||||
seedColor: brandColor,
|
||||
darkColorScheme = SeedColorScheme.fromSeeds(
|
||||
primaryKey: brandColor,
|
||||
brightness: Brightness.dark,
|
||||
dynamicSchemeVariant: dynamicSchemeVariant,
|
||||
variant: variant,
|
||||
// dynamicSchemeVariant: dynamicSchemeVariant,
|
||||
// tones: FlexTones.soft(Brightness.dark),
|
||||
);
|
||||
}
|
||||
// 图片缓存
|
||||
@@ -158,10 +165,13 @@ class MyApp extends StatelessWidget {
|
||||
theme: _getThemeData(
|
||||
colorScheme: lightColorScheme,
|
||||
isDynamic: lightDynamic != null && isDynamicColor,
|
||||
variant: variant,
|
||||
),
|
||||
darkTheme: _getThemeData(
|
||||
colorScheme: darkColorScheme,
|
||||
isDynamic: darkDynamic != null && isDynamicColor,
|
||||
isDark: true,
|
||||
variant: variant,
|
||||
),
|
||||
themeMode: GStorage.themeMode,
|
||||
localizationsDelegates: const [
|
||||
@@ -196,9 +206,9 @@ class MyApp extends StatelessWidget {
|
||||
ThemeData _getThemeData({
|
||||
required ColorScheme colorScheme,
|
||||
required bool isDynamic,
|
||||
bool isDark = false,
|
||||
required FlexSchemeVariant variant,
|
||||
}) {
|
||||
Color surfaceTintColor =
|
||||
isDynamic ? colorScheme.surfaceTint : colorScheme.surfaceContainer;
|
||||
return ThemeData(
|
||||
colorScheme: colorScheme,
|
||||
useMaterial3: true,
|
||||
@@ -211,15 +221,17 @@ class MyApp extends StatelessWidget {
|
||||
titleTextStyle: TextStyle(fontSize: 16, color: colorScheme.onSurface),
|
||||
),
|
||||
navigationBarTheme: NavigationBarThemeData(
|
||||
surfaceTintColor: surfaceTintColor,
|
||||
surfaceTintColor: isDynamic
|
||||
? colorScheme.surfaceTint
|
||||
: isDark
|
||||
? colorScheme.surfaceTint
|
||||
: null,
|
||||
),
|
||||
snackBarTheme: SnackBarThemeData(
|
||||
actionTextColor: colorScheme.primary,
|
||||
backgroundColor: colorScheme.secondaryContainer,
|
||||
closeIconColor: colorScheme.secondary,
|
||||
contentTextStyle: TextStyle(
|
||||
color: colorScheme.secondary,
|
||||
),
|
||||
contentTextStyle: TextStyle(color: colorScheme.secondary),
|
||||
elevation: 20,
|
||||
),
|
||||
pageTransitionsTheme: const PageTransitionsTheme(
|
||||
@@ -230,15 +242,26 @@ class MyApp extends StatelessWidget {
|
||||
},
|
||||
),
|
||||
popupMenuTheme: PopupMenuThemeData(
|
||||
surfaceTintColor: surfaceTintColor,
|
||||
surfaceTintColor:
|
||||
isDynamic || variant == FlexSchemeVariant.material3Legacy
|
||||
? isDark
|
||||
? colorScheme.surfaceTint
|
||||
: null
|
||||
: null,
|
||||
),
|
||||
cardTheme: CardTheme(
|
||||
elevation: 1,
|
||||
surfaceTintColor: surfaceTintColor,
|
||||
surfaceTintColor: isDynamic
|
||||
? colorScheme.surfaceTint
|
||||
: variant == FlexSchemeVariant.material3Legacy
|
||||
? isDark
|
||||
? colorScheme.surfaceTint
|
||||
: null
|
||||
: null,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
dialogTheme: DialogTheme(
|
||||
surfaceTintColor: surfaceTintColor,
|
||||
surfaceTintColor: isDark ? colorScheme.surfaceTint : null,
|
||||
),
|
||||
progressIndicatorTheme: ProgressIndicatorThemeData(
|
||||
refreshBackgroundColor: colorScheme.onSecondary,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
final List<Map<String, dynamic>> colorThemeTypes = [
|
||||
{'color': const Color.fromARGB(255, 92, 182, 123), 'label': '默认绿'},
|
||||
{'color': const Color.fromARGB(255, 251, 114, 153), 'label': '粉红色'},
|
||||
{'color': const Color(0xFF5CB67B), 'label': '默认绿'},
|
||||
{'color': const Color(0xFFFF7299), 'label': '粉红色'},
|
||||
{'color': Colors.red, 'label': '红色'},
|
||||
{'color': Colors.orange, 'label': '橙色'},
|
||||
{'color': Colors.amber, 'label': '琥珀色'},
|
||||
|
||||
@@ -69,34 +69,27 @@ class UserInfoCard extends StatelessWidget {
|
||||
? images.imgUrl?.http2https
|
||||
: images.nightImgurl?.http2https)
|
||||
: images.imgUrl?.http2https;
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
imgList: [imgUrl ?? ''],
|
||||
);
|
||||
// showDialog(
|
||||
// useSafeArea: false,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return ImagePreview(
|
||||
// initialPage: 0,
|
||||
// imgList: [imgUrl ?? ''],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
},
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: imgUrl ?? '',
|
||||
width: double.infinity,
|
||||
height: 135,
|
||||
imageBuilder: (context, imageProvider) => Container(
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: imageProvider,
|
||||
fit: BoxFit.cover,
|
||||
colorFilter: ColorFilter.mode(
|
||||
darken ? const Color(0x8D000000) : const Color(0x5DFFFFFF),
|
||||
darken ? BlendMode.darken : BlendMode.lighten,
|
||||
return Hero(
|
||||
tag: imgUrl ?? 'bgTag',
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
imgList: [imgUrl ?? 'bgTag'],
|
||||
);
|
||||
},
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: imgUrl ?? '',
|
||||
width: double.infinity,
|
||||
height: 135,
|
||||
imageBuilder: (context, imageProvider) => Container(
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: imageProvider,
|
||||
fit: BoxFit.cover,
|
||||
colorFilter: ColorFilter.mode(
|
||||
darken ? const Color(0x8D000000) : const Color(0x5DFFFFFF),
|
||||
darken ? BlendMode.darken : BlendMode.lighten,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -134,13 +127,13 @@ class UserInfoCard extends StatelessWidget {
|
||||
semanticLabel: '等级${card.levelInfo?.currentLevel}',
|
||||
),
|
||||
if (card.vip?.vipStatus == 1)
|
||||
Image.network(
|
||||
card.vip!.label!.image!,
|
||||
CachedNetworkImage(
|
||||
imageUrl: card.vip!.label!.image!,
|
||||
height: 20,
|
||||
),
|
||||
if (card.nameplate?.image?.isNotEmpty == true)
|
||||
Image.network(
|
||||
card.nameplate!.image!,
|
||||
CachedNetworkImage(
|
||||
imageUrl: card.nameplate!.image!,
|
||||
height: 20,
|
||||
),
|
||||
// GestureDetector(
|
||||
@@ -416,35 +409,28 @@ class UserInfoCard extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
|
||||
_buildAvatar(BuildContext context) => GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
imgList: [card.face ?? ''],
|
||||
);
|
||||
// showDialog(
|
||||
// useSafeArea: false,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return ImagePreview(
|
||||
// initialPage: 0,
|
||||
// imgList: [card.face ?? ''],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
width: 2.5,
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
_buildAvatar(BuildContext context) => Hero(
|
||||
tag: card.face ?? 'avatarTag',
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
context.imageView(
|
||||
imgList: [card.face ?? 'avatarTag'],
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
width: 2.5,
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
),
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: NetworkImgLayer(
|
||||
src: card.face,
|
||||
type: 'avatar',
|
||||
width: 80,
|
||||
height: 80,
|
||||
),
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: NetworkImgLayer(
|
||||
src: card.face,
|
||||
type: 'avatar',
|
||||
width: 80,
|
||||
height: 80,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'dart:async';
|
||||
|
||||
import 'package:PiliPalaX/http/member.dart';
|
||||
import 'package:PiliPalaX/utils/extension.dart';
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
@@ -432,22 +433,22 @@ class _MemberPageState extends State<MemberPage>
|
||||
if (_memberController
|
||||
.memberInfo.value.vip?.label?['img_label_uri_hans'] !=
|
||||
'')
|
||||
Image.network(
|
||||
_memberController
|
||||
CachedNetworkImage(
|
||||
imageUrl: _memberController
|
||||
.memberInfo.value.vip!.label!['img_label_uri_hans'],
|
||||
height: 20,
|
||||
semanticLabel:
|
||||
_memberController.memberInfo.value.vip!.label!['text'],
|
||||
// semanticLabel:
|
||||
// _memberController.memberInfo.value.vip!.label!['text'],
|
||||
)
|
||||
else if (_memberController.memberInfo.value.vip
|
||||
?.label?['img_label_uri_hans_static'] !=
|
||||
'')
|
||||
Image.network(
|
||||
_memberController.memberInfo.value.vip!
|
||||
CachedNetworkImage(
|
||||
imageUrl: _memberController.memberInfo.value.vip!
|
||||
.label!['img_label_uri_hans_static'],
|
||||
height: 20,
|
||||
semanticLabel:
|
||||
_memberController.memberInfo.value.vip!.label!['text'],
|
||||
// semanticLabel:
|
||||
// _memberController.memberInfo.value.vip!.label!['text'],
|
||||
),
|
||||
],
|
||||
const SizedBox(width: 5),
|
||||
|
||||
@@ -23,7 +23,7 @@ class ProfilePanel extends StatelessWidget {
|
||||
return Row(
|
||||
children: [
|
||||
Hero(
|
||||
tag: ctr.heroTag!,
|
||||
tag: !loadingStatus ? memberInfo.face : ctr.face.value,
|
||||
child: Stack(
|
||||
children: [
|
||||
GestureDetector(
|
||||
@@ -32,15 +32,6 @@ class ProfilePanel extends StatelessWidget {
|
||||
!loadingStatus ? memberInfo.face : ctr.face.value
|
||||
],
|
||||
),
|
||||
// showDialog(
|
||||
// useSafeArea: false,
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return ImagePreview(initialPage: 0, imgList: [
|
||||
// !loadingStatus ? memberInfo.face : ctr.face.value
|
||||
// ]);
|
||||
// },
|
||||
// ),
|
||||
child: NetworkImgLayer(
|
||||
width: 90,
|
||||
height: 90,
|
||||
|
||||
@@ -22,8 +22,7 @@ class SearchText extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
color: bgColor ??
|
||||
Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.5),
|
||||
color: bgColor ?? Theme.of(context).colorScheme.onInverseSurface,
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.zero,
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:get/get.dart';
|
||||
class SearchResultController extends GetxController {
|
||||
String? keyword;
|
||||
|
||||
RxList<int> count = List.filled(5, -1).toList().obs;
|
||||
RxList<int> count = List.generate(5, (_) => -1).toList().obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
|
||||
@@ -1,34 +1,35 @@
|
||||
import 'package:flex_seed_scheme/flex_seed_scheme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:PiliPalaX/models/common/color_type.dart';
|
||||
import 'package:PiliPalaX/utils/storage.dart';
|
||||
|
||||
extension _SchemeExt on DynamicSchemeVariant {
|
||||
String get title => [
|
||||
'色调点', //tonalSpot
|
||||
'富达', //fidelity
|
||||
'单色', //monochrome
|
||||
'中性的', //neutral
|
||||
'充满活力', //vibrant
|
||||
'富有表现力', //expressive
|
||||
'内容', //content
|
||||
'彩虹', //rainbow
|
||||
'水果沙拉', //fruitSalad
|
||||
][index];
|
||||
// from ImageToolbox
|
||||
String get subTitle => [
|
||||
'默认调色板样式,它允许自定义所有四种颜色,其他允许您仅设置关键颜色', //tonalSpot
|
||||
'与内容方案非常相似的方案', //fidelity
|
||||
'单色主题,颜色纯黑/白/灰', //monochrome
|
||||
'色彩比单色稍多的风格', //neutral
|
||||
'响亮的主题,主要调色板的色彩度最大,其他调色板的色彩度增加', //vibrant
|
||||
'有趣的主题 - 源颜色的色调不会出现在主题中', //expressive
|
||||
'将源颜色放置在Scheme.primaryContainer中的方案', //content
|
||||
'有趣的主题 - 源颜色的色调不会出现在主题中', //rainbow
|
||||
'有趣的主题 - 源颜色的色调不会出现在主题中', //fruitSalad
|
||||
][index];
|
||||
}
|
||||
// extension _SchemeExt on DynamicSchemeVariant {
|
||||
// String get title => [
|
||||
// '色调点', //tonalSpot
|
||||
// '富达', //fidelity
|
||||
// '单色', //monochrome
|
||||
// '中性的', //neutral
|
||||
// '充满活力', //vibrant
|
||||
// '富有表现力', //expressive
|
||||
// '内容', //content
|
||||
// '彩虹', //rainbow
|
||||
// '水果沙拉', //fruitSalad
|
||||
// ][index];
|
||||
// // from ImageToolbox
|
||||
// String get subTitle => [
|
||||
// '默认调色板样式,它允许自定义所有四种颜色,其他允许您仅设置关键颜色', //tonalSpot
|
||||
// '与内容方案非常相似的方案', //fidelity
|
||||
// '单色主题,颜色纯黑/白/灰', //monochrome
|
||||
// '色彩比单色稍多的风格', //neutral
|
||||
// '响亮的主题,主要调色板的色彩度最大,其他调色板的色彩度增加', //vibrant
|
||||
// '有趣的主题 - 源颜色的色调不会出现在主题中', //expressive
|
||||
// '将源颜色放置在Scheme.primaryContainer中的方案', //content
|
||||
// '有趣的主题 - 源颜色的色调不会出现在主题中', //rainbow
|
||||
// '有趣的主题 - 源颜色的色调不会出现在主题中', //fruitSalad
|
||||
// ][index];
|
||||
// }
|
||||
|
||||
class ColorSelectPage extends StatefulWidget {
|
||||
const ColorSelectPage({super.key});
|
||||
@@ -60,8 +61,8 @@ List<Item> generateItems(int count) {
|
||||
|
||||
class _ColorSelectPageState extends State<ColorSelectPage> {
|
||||
final ColorSelectController ctr = Get.put(ColorSelectController());
|
||||
DynamicSchemeVariant _dynamicSchemeVariant =
|
||||
DynamicSchemeVariant.values[GStorage.schemeVariant];
|
||||
FlexSchemeVariant _dynamicSchemeVariant =
|
||||
FlexSchemeVariant.values[GStorage.schemeVariant];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -78,7 +79,7 @@ class _ColorSelectPageState extends State<ColorSelectPage> {
|
||||
child: Icon(Icons.palette_outlined),
|
||||
),
|
||||
subtitle: Text(
|
||||
_dynamicSchemeVariant.subTitle,
|
||||
_dynamicSchemeVariant.description,
|
||||
style: TextStyle(fontSize: 12),
|
||||
),
|
||||
trailing: PopupMenuButton(
|
||||
@@ -90,17 +91,17 @@ class _ColorSelectPageState extends State<ColorSelectPage> {
|
||||
(context as Element).markNeedsBuild();
|
||||
Get.forceAppUpdate();
|
||||
},
|
||||
itemBuilder: (context) => DynamicSchemeVariant.values
|
||||
.map((item) => PopupMenuItem<DynamicSchemeVariant>(
|
||||
itemBuilder: (context) => FlexSchemeVariant.values
|
||||
.map((item) => PopupMenuItem<FlexSchemeVariant>(
|
||||
value: item,
|
||||
child: Text(item.title),
|
||||
child: Text(item.variantName),
|
||||
))
|
||||
.toList(),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
_dynamicSchemeVariant.title,
|
||||
_dynamicSchemeVariant.variantName,
|
||||
style: TextStyle(
|
||||
height: 1,
|
||||
fontSize: 13,
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:PiliPalaX/common/widgets/http_error.dart';
|
||||
import 'package:PiliPalaX/http/msg.dart';
|
||||
import 'package:PiliPalaX/http/user.dart';
|
||||
import 'package:PiliPalaX/utils/utils.dart';
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:easy_debounce/easy_throttle.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -233,8 +234,8 @@ class _CreateFavPageState extends State<CreateFavPage> {
|
||||
builder: (context, constraints) {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
child: Image.network(
|
||||
_cover!,
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: _cover!,
|
||||
height: constraints.maxHeight,
|
||||
width: constraints.maxHeight * 16 / 9,
|
||||
fit: BoxFit.cover,
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:math';
|
||||
import 'package:PiliPalaX/common/widgets/imageview.dart';
|
||||
import 'package:PiliPalaX/http/video.dart';
|
||||
import 'package:PiliPalaX/utils/extension.dart';
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -763,8 +764,8 @@ class ReplyItem extends StatelessWidget {
|
||||
[
|
||||
if (content.jumpUrl[matchStr]?['prefix_icon'] != null) ...[
|
||||
WidgetSpan(
|
||||
child: Image.network(
|
||||
content.jumpUrl[matchStr]['prefix_icon'],
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: content.jumpUrl[matchStr]['prefix_icon'],
|
||||
height: 19,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
@@ -909,8 +910,8 @@ class ReplyItem extends StatelessWidget {
|
||||
[
|
||||
if (content.jumpUrl[patternStr]?['prefix_icon'] != null) ...[
|
||||
WidgetSpan(
|
||||
child: Image.network(
|
||||
content.jumpUrl[patternStr]['prefix_icon'],
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: content.jumpUrl[patternStr]['prefix_icon'],
|
||||
height: 19,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:PiliPalaX/grpc/app/main/community/reply/v1/reply.pb.dart';
|
||||
import 'package:PiliPalaX/http/video.dart';
|
||||
import 'package:PiliPalaX/pages/video/detail/reply/widgets/zan_grpc.dart';
|
||||
import 'package:PiliPalaX/utils/extension.dart';
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -786,8 +787,8 @@ class ReplyItemGrpc extends StatelessWidget {
|
||||
[
|
||||
if (content.url[matchStr]?.hasPrefixIcon() == true) ...[
|
||||
WidgetSpan(
|
||||
child: Image.network(
|
||||
content.url[matchStr]!.prefixIcon,
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: content.url[matchStr]!.prefixIcon,
|
||||
height: 19,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
@@ -946,8 +947,8 @@ class ReplyItemGrpc extends StatelessWidget {
|
||||
[
|
||||
if (content.url[patternStr]?.hasPrefixIcon() == true) ...[
|
||||
WidgetSpan(
|
||||
child: Image.network(
|
||||
content.url[patternStr]!.prefixIcon,
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: content.url[patternStr]!.prefixIcon,
|
||||
height: 19,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
|
||||
@@ -1168,8 +1168,14 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
||||
padding: WidgetStateProperty.all(EdgeInsets.zero),
|
||||
),
|
||||
onPressed: videoDetailController.showShootDanmakuSheet,
|
||||
child:
|
||||
const Text('发弹幕', style: TextStyle(fontSize: 12)),
|
||||
child: Text(
|
||||
'发弹幕',
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
color:
|
||||
Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
|
||||
@@ -55,7 +55,7 @@ class GStorage {
|
||||
static List<Color> get blockColor {
|
||||
List list = setting.get(
|
||||
SettingBoxKey.blockColor,
|
||||
defaultValue: List.filled(SegmentType.values.length, ''),
|
||||
defaultValue: List.generate(SegmentType.values.length, (_) => ''),
|
||||
);
|
||||
return SegmentType.values
|
||||
.map((item) => list[item.index].isNotEmpty
|
||||
@@ -94,7 +94,7 @@ class GStorage {
|
||||
setting.get(SettingBoxKey.dynamicPeriod, defaultValue: 5);
|
||||
|
||||
static int get schemeVariant =>
|
||||
setting.get(SettingBoxKey.schemeVariant, defaultValue: 0);
|
||||
setting.get(SettingBoxKey.schemeVariant, defaultValue: 10);
|
||||
|
||||
static double get danmakuFontScaleFS =>
|
||||
setting.get(SettingBoxKey.danmakuFontScaleFS, defaultValue: 1.2);
|
||||
|
||||
@@ -600,6 +600,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
flex_seed_scheme:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flex_seed_scheme
|
||||
sha256: "7639d2c86268eff84a909026eb169f008064af0fb3696a651b24b0fa24a40334"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.4.1"
|
||||
floating:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
||||
@@ -169,6 +169,7 @@ dependencies:
|
||||
#解压直播消息
|
||||
brotli: ^0.6.0
|
||||
expandable: ^5.0.1
|
||||
flex_seed_scheme: ^3.4.1
|
||||
|
||||
dependency_overrides:
|
||||
screen_brightness: ^2.0.0+2
|
||||
|
||||
Reference in New Issue
Block a user