mod: color scheme

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-14 00:12:44 +08:00
parent 1b71fd4ca6
commit b898a78e62
20 changed files with 203 additions and 206 deletions

View File

@@ -55,29 +55,22 @@ Widget articleContent({
); );
} else if (item.pic != null) { } else if (item.pic != null) {
return LayoutBuilder( return LayoutBuilder(
builder: (context, constraints) => GestureDetector( builder: (context, constraints) => Hero(
onTap: () { tag: item.pic!.pics!.first.url!,
context.imageView( child: GestureDetector(
initialPage: imgList.indexOf(item.pic!.pics!.first.url!), onTap: () {
imgList: imgList, context.imageView(
); initialPage: imgList.indexOf(item.pic!.pics!.first.url!),
// showDialog( imgList: imgList,
// useSafeArea: false, );
// context: context, },
// builder: (context) { child: NetworkImgLayer(
// return ImagePreview( width: constraints.maxWidth,
// initialPage: imgList.indexOf(item.pic!.pics!.first.url!), height: constraints.maxWidth *
// imgList: imgList, item.pic!.pics!.first.height! /
// ); item.pic!.pics!.first.width!,
// }, src: item.pic!.pics!.first.url,
// ); ),
},
child: NetworkImgLayer(
width: constraints.maxWidth,
height: constraints.maxWidth *
item.pic!.pics!.first.height! /
item.pic!.pics!.first.width!,
src: item.pic!.pics!.first.url,
), ),
), ),
); );

View File

@@ -40,32 +40,25 @@ Widget htmlRender({
// extensionContext.element!.previousElementSibling == null || // extensionContext.element!.previousElementSibling == null ||
// extensionContext.element!.nextElementSibling == null; // extensionContext.element!.nextElementSibling == null;
// imgUrl = Utils().imageUrl(imgUrl!); // imgUrl = Utils().imageUrl(imgUrl!);
// return Image.network( // return CachedNetworkImage(
// imgUrl, // imageUrl: imgUrl,
// width: isEmote ? 22 : null, // width: isEmote ? 22 : null,
// height: isEmote ? 22 : null, // height: isEmote ? 22 : null,
// ); // );
return GestureDetector( return Hero(
onTap: () { tag: imgUrl,
context.imageView( child: GestureDetector(
imgList: [imgUrl], onTap: () {
); context.imageView(
// showDialog( imgList: [imgUrl],
// useSafeArea: false, );
// context: context, },
// builder: (context) { child: NetworkImgLayer(
// return ImagePreview( width: isEmote ? 22 : constrainedWidth,
// initialPage: 0, height: isEmote ? 22 : 200,
// imgList: [imgUrl], src: imgUrl,
// ); ignoreHeight: !isEmote,
// }, ),
// );
},
child: NetworkImgLayer(
width: isEmote ? 22 : constrainedWidth,
height: isEmote ? 22 : 200,
src: imgUrl,
ignoreHeight: !isEmote,
), ),
); );
} catch (err) { } catch (err) {

View File

@@ -65,16 +65,6 @@ Widget imageview(
imgList: picArr.map((item) => item.url).toList(), imgList: picArr.map((item) => item.url).toList(),
onDismissed: onDismissed, onDismissed: onDismissed,
); );
// showDialog(
// useSafeArea: false,
// context: context,
// builder: (context) {
// return ImagePreview(
// initialPage: index,
// imgList: picArr.map((item) => item.url).toList(),
// );
// },
// );
}, },
child: Stack( child: Stack(
alignment: Alignment.center, alignment: Alignment.center,

View File

@@ -93,7 +93,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
_quality = _quality =
GStorage.setting.get(SettingBoxKey.previewQuality, defaultValue: 80); 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); _pageController = PageController(initialPage: widget.initIndex);

View File

@@ -71,10 +71,12 @@ class _ListSheetContentState extends State<ListSheetContent>
}); });
} }
itemScrollController = _isList itemScrollController = _isList
? List.filled(widget.season.sections.length, ItemScrollController()) ? List.generate(
widget.season.sections.length, (_) => ItemScrollController())
: [ItemScrollController()]; : [ItemScrollController()];
reverse = reverse = _isList
_isList ? List.filled(widget.season.sections.length, false) : [false]; ? List.generate(widget.season.sections.length, (_) => false)
: [false];
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
itemScrollController[_index].jumpTo(index: currentIndex); itemScrollController[_index].jumpTo(index: currentIndex);
}); });

View File

@@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:PiliPalaX/utils/cache_manage.dart'; import 'package:PiliPalaX/utils/cache_manage.dart';
import 'package:flex_seed_scheme/flex_seed_scheme.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart'; import 'package:flutter_displaymode/flutter_displaymode.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
@@ -110,8 +111,10 @@ class MyApp extends StatelessWidget {
// 字体缩放大小 // 字体缩放大小
double textScale = double textScale =
setting.get(SettingBoxKey.defaultTextScale, defaultValue: 1.0); setting.get(SettingBoxKey.defaultTextScale, defaultValue: 1.0);
DynamicSchemeVariant dynamicSchemeVariant = // DynamicSchemeVariant dynamicSchemeVariant =
DynamicSchemeVariant.values[GStorage.schemeVariant]; // DynamicSchemeVariant.values[GStorage.schemeVariant];
FlexSchemeVariant variant =
FlexSchemeVariant.values[GStorage.schemeVariant];
// 强制设置高帧率 // 强制设置高帧率
if (Platform.isAndroid) { if (Platform.isAndroid) {
@@ -139,15 +142,19 @@ class MyApp extends StatelessWidget {
darkColorScheme = darkDynamic.harmonized(); darkColorScheme = darkDynamic.harmonized();
} else { } else {
// dynamic取色失败采用品牌色 // dynamic取色失败采用品牌色
lightColorScheme = ColorScheme.fromSeed( lightColorScheme = SeedColorScheme.fromSeeds(
seedColor: brandColor, primaryKey: brandColor,
brightness: Brightness.light, brightness: Brightness.light,
dynamicSchemeVariant: dynamicSchemeVariant, variant: variant,
// dynamicSchemeVariant: dynamicSchemeVariant,
// tones: FlexTones.soft(Brightness.light),
); );
darkColorScheme = ColorScheme.fromSeed( darkColorScheme = SeedColorScheme.fromSeeds(
seedColor: brandColor, primaryKey: brandColor,
brightness: Brightness.dark, brightness: Brightness.dark,
dynamicSchemeVariant: dynamicSchemeVariant, variant: variant,
// dynamicSchemeVariant: dynamicSchemeVariant,
// tones: FlexTones.soft(Brightness.dark),
); );
} }
// 图片缓存 // 图片缓存
@@ -158,10 +165,13 @@ class MyApp extends StatelessWidget {
theme: _getThemeData( theme: _getThemeData(
colorScheme: lightColorScheme, colorScheme: lightColorScheme,
isDynamic: lightDynamic != null && isDynamicColor, isDynamic: lightDynamic != null && isDynamicColor,
variant: variant,
), ),
darkTheme: _getThemeData( darkTheme: _getThemeData(
colorScheme: darkColorScheme, colorScheme: darkColorScheme,
isDynamic: darkDynamic != null && isDynamicColor, isDynamic: darkDynamic != null && isDynamicColor,
isDark: true,
variant: variant,
), ),
themeMode: GStorage.themeMode, themeMode: GStorage.themeMode,
localizationsDelegates: const [ localizationsDelegates: const [
@@ -196,9 +206,9 @@ class MyApp extends StatelessWidget {
ThemeData _getThemeData({ ThemeData _getThemeData({
required ColorScheme colorScheme, required ColorScheme colorScheme,
required bool isDynamic, required bool isDynamic,
bool isDark = false,
required FlexSchemeVariant variant,
}) { }) {
Color surfaceTintColor =
isDynamic ? colorScheme.surfaceTint : colorScheme.surfaceContainer;
return ThemeData( return ThemeData(
colorScheme: colorScheme, colorScheme: colorScheme,
useMaterial3: true, useMaterial3: true,
@@ -211,15 +221,17 @@ class MyApp extends StatelessWidget {
titleTextStyle: TextStyle(fontSize: 16, color: colorScheme.onSurface), titleTextStyle: TextStyle(fontSize: 16, color: colorScheme.onSurface),
), ),
navigationBarTheme: NavigationBarThemeData( navigationBarTheme: NavigationBarThemeData(
surfaceTintColor: surfaceTintColor, surfaceTintColor: isDynamic
? colorScheme.surfaceTint
: isDark
? colorScheme.surfaceTint
: null,
), ),
snackBarTheme: SnackBarThemeData( snackBarTheme: SnackBarThemeData(
actionTextColor: colorScheme.primary, actionTextColor: colorScheme.primary,
backgroundColor: colorScheme.secondaryContainer, backgroundColor: colorScheme.secondaryContainer,
closeIconColor: colorScheme.secondary, closeIconColor: colorScheme.secondary,
contentTextStyle: TextStyle( contentTextStyle: TextStyle(color: colorScheme.secondary),
color: colorScheme.secondary,
),
elevation: 20, elevation: 20,
), ),
pageTransitionsTheme: const PageTransitionsTheme( pageTransitionsTheme: const PageTransitionsTheme(
@@ -230,15 +242,26 @@ class MyApp extends StatelessWidget {
}, },
), ),
popupMenuTheme: PopupMenuThemeData( popupMenuTheme: PopupMenuThemeData(
surfaceTintColor: surfaceTintColor, surfaceTintColor:
isDynamic || variant == FlexSchemeVariant.material3Legacy
? isDark
? colorScheme.surfaceTint
: null
: null,
), ),
cardTheme: CardTheme( cardTheme: CardTheme(
elevation: 1, elevation: 1,
surfaceTintColor: surfaceTintColor, surfaceTintColor: isDynamic
? colorScheme.surfaceTint
: variant == FlexSchemeVariant.material3Legacy
? isDark
? colorScheme.surfaceTint
: null
: null,
shadowColor: Colors.transparent, shadowColor: Colors.transparent,
), ),
dialogTheme: DialogTheme( dialogTheme: DialogTheme(
surfaceTintColor: surfaceTintColor, surfaceTintColor: isDark ? colorScheme.surfaceTint : null,
), ),
progressIndicatorTheme: ProgressIndicatorThemeData( progressIndicatorTheme: ProgressIndicatorThemeData(
refreshBackgroundColor: colorScheme.onSecondary, refreshBackgroundColor: colorScheme.onSecondary,

View File

@@ -1,8 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
final List<Map<String, dynamic>> colorThemeTypes = [ final List<Map<String, dynamic>> colorThemeTypes = [
{'color': const Color.fromARGB(255, 92, 182, 123), 'label': '默认绿'}, {'color': const Color(0xFF5CB67B), 'label': '默认绿'},
{'color': const Color.fromARGB(255, 251, 114, 153), 'label': '粉红色'}, {'color': const Color(0xFFFF7299), 'label': '粉红色'},
{'color': Colors.red, 'label': '红色'}, {'color': Colors.red, 'label': '红色'},
{'color': Colors.orange, 'label': '橙色'}, {'color': Colors.orange, 'label': '橙色'},
{'color': Colors.amber, 'label': '琥珀色'}, {'color': Colors.amber, 'label': '琥珀色'},

View File

@@ -69,34 +69,27 @@ class UserInfoCard extends StatelessWidget {
? images.imgUrl?.http2https ? images.imgUrl?.http2https
: images.nightImgurl?.http2https) : images.nightImgurl?.http2https)
: images.imgUrl?.http2https; : images.imgUrl?.http2https;
return GestureDetector( return Hero(
onTap: () { tag: imgUrl ?? 'bgTag',
context.imageView( child: GestureDetector(
imgList: [imgUrl ?? ''], onTap: () {
); context.imageView(
// showDialog( imgList: [imgUrl ?? 'bgTag'],
// useSafeArea: false, );
// context: context, },
// builder: (context) { child: CachedNetworkImage(
// return ImagePreview( imageUrl: imgUrl ?? '',
// initialPage: 0, width: double.infinity,
// imgList: [imgUrl ?? ''], height: 135,
// ); imageBuilder: (context, imageProvider) => Container(
// }, decoration: BoxDecoration(
// ); image: DecorationImage(
}, image: imageProvider,
child: CachedNetworkImage( fit: BoxFit.cover,
imageUrl: imgUrl ?? '', colorFilter: ColorFilter.mode(
width: double.infinity, darken ? const Color(0x8D000000) : const Color(0x5DFFFFFF),
height: 135, darken ? BlendMode.darken : BlendMode.lighten,
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}', semanticLabel: '等级${card.levelInfo?.currentLevel}',
), ),
if (card.vip?.vipStatus == 1) if (card.vip?.vipStatus == 1)
Image.network( CachedNetworkImage(
card.vip!.label!.image!, imageUrl: card.vip!.label!.image!,
height: 20, height: 20,
), ),
if (card.nameplate?.image?.isNotEmpty == true) if (card.nameplate?.image?.isNotEmpty == true)
Image.network( CachedNetworkImage(
card.nameplate!.image!, imageUrl: card.nameplate!.image!,
height: 20, height: 20,
), ),
// GestureDetector( // GestureDetector(
@@ -416,35 +409,28 @@ class UserInfoCard extends StatelessWidget {
), ),
); );
_buildAvatar(BuildContext context) => GestureDetector( _buildAvatar(BuildContext context) => Hero(
onTap: () { tag: card.face ?? 'avatarTag',
context.imageView( child: GestureDetector(
imgList: [card.face ?? ''], onTap: () {
); context.imageView(
// showDialog( imgList: [card.face ?? 'avatarTag'],
// useSafeArea: false, );
// context: context, },
// builder: (context) { child: Container(
// return ImagePreview( decoration: BoxDecoration(
// initialPage: 0, border: Border.all(
// imgList: [card.face ?? ''], width: 2.5,
// ); color: Theme.of(context).colorScheme.surface,
// }, ),
// ); shape: BoxShape.circle,
}, ),
child: Container( child: NetworkImgLayer(
decoration: BoxDecoration( src: card.face,
border: Border.all( type: 'avatar',
width: 2.5, width: 80,
color: Theme.of(context).colorScheme.surface, height: 80,
), ),
shape: BoxShape.circle,
),
child: NetworkImgLayer(
src: card.face,
type: 'avatar',
width: 80,
height: 80,
), ),
), ),
); );

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:PiliPalaX/http/member.dart'; import 'package:PiliPalaX/http/member.dart';
import 'package:PiliPalaX/utils/extension.dart'; import 'package:PiliPalaX/utils/extension.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -432,22 +433,22 @@ class _MemberPageState extends State<MemberPage>
if (_memberController if (_memberController
.memberInfo.value.vip?.label?['img_label_uri_hans'] != .memberInfo.value.vip?.label?['img_label_uri_hans'] !=
'') '')
Image.network( CachedNetworkImage(
_memberController imageUrl: _memberController
.memberInfo.value.vip!.label!['img_label_uri_hans'], .memberInfo.value.vip!.label!['img_label_uri_hans'],
height: 20, height: 20,
semanticLabel: // semanticLabel:
_memberController.memberInfo.value.vip!.label!['text'], // _memberController.memberInfo.value.vip!.label!['text'],
) )
else if (_memberController.memberInfo.value.vip else if (_memberController.memberInfo.value.vip
?.label?['img_label_uri_hans_static'] != ?.label?['img_label_uri_hans_static'] !=
'') '')
Image.network( CachedNetworkImage(
_memberController.memberInfo.value.vip! imageUrl: _memberController.memberInfo.value.vip!
.label!['img_label_uri_hans_static'], .label!['img_label_uri_hans_static'],
height: 20, height: 20,
semanticLabel: // semanticLabel:
_memberController.memberInfo.value.vip!.label!['text'], // _memberController.memberInfo.value.vip!.label!['text'],
), ),
], ],
const SizedBox(width: 5), const SizedBox(width: 5),

View File

@@ -23,7 +23,7 @@ class ProfilePanel extends StatelessWidget {
return Row( return Row(
children: [ children: [
Hero( Hero(
tag: ctr.heroTag!, tag: !loadingStatus ? memberInfo.face : ctr.face.value,
child: Stack( child: Stack(
children: [ children: [
GestureDetector( GestureDetector(
@@ -32,15 +32,6 @@ class ProfilePanel extends StatelessWidget {
!loadingStatus ? memberInfo.face : ctr.face.value !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( child: NetworkImgLayer(
width: 90, width: 90,
height: 90, height: 90,

View File

@@ -22,8 +22,7 @@ class SearchText extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
color: bgColor ?? color: bgColor ?? Theme.of(context).colorScheme.onInverseSurface,
Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.5),
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(6),
child: Padding( child: Padding(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,

View File

@@ -3,7 +3,7 @@ import 'package:get/get.dart';
class SearchResultController extends GetxController { class SearchResultController extends GetxController {
String? keyword; String? keyword;
RxList<int> count = List.filled(5, -1).toList().obs; RxList<int> count = List.generate(5, (_) => -1).toList().obs;
@override @override
void onInit() { void onInit() {

View File

@@ -1,34 +1,35 @@
import 'package:flex_seed_scheme/flex_seed_scheme.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:PiliPalaX/models/common/color_type.dart'; import 'package:PiliPalaX/models/common/color_type.dart';
import 'package:PiliPalaX/utils/storage.dart'; import 'package:PiliPalaX/utils/storage.dart';
extension _SchemeExt on DynamicSchemeVariant { // extension _SchemeExt on DynamicSchemeVariant {
String get title => [ // String get title => [
'色调点', //tonalSpot // '色调点', //tonalSpot
'富达', //fidelity // '富达', //fidelity
'单色', //monochrome // '单色', //monochrome
'中性的', //neutral // '中性的', //neutral
'充满活力', //vibrant // '充满活力', //vibrant
'富有表现力', //expressive // '富有表现力', //expressive
'内容', //content // '内容', //content
'彩虹', //rainbow // '彩虹', //rainbow
'水果沙拉', //fruitSalad // '水果沙拉', //fruitSalad
][index]; // ][index];
// from ImageToolbox // // from ImageToolbox
String get subTitle => [ // String get subTitle => [
'默认调色板样式,它允许自定义所有四种颜色,其他允许您仅设置关键颜色', //tonalSpot // '默认调色板样式,它允许自定义所有四种颜色,其他允许您仅设置关键颜色', //tonalSpot
'与内容方案非常相似的方案', //fidelity // '与内容方案非常相似的方案', //fidelity
'单色主题,颜色纯黑/白/灰', //monochrome // '单色主题,颜色纯黑/白/灰', //monochrome
'色彩比单色稍多的风格', //neutral // '色彩比单色稍多的风格', //neutral
'响亮的主题,主要调色板的色彩度最大,其他调色板的色彩度增加', //vibrant // '响亮的主题,主要调色板的色彩度最大,其他调色板的色彩度增加', //vibrant
'有趣的主题 - 源颜色的色调不会出现在主题中', //expressive // '有趣的主题 - 源颜色的色调不会出现在主题中', //expressive
'将源颜色放置在Scheme.primaryContainer中的方案', //content // '将源颜色放置在Scheme.primaryContainer中的方案', //content
'有趣的主题 - 源颜色的色调不会出现在主题中', //rainbow // '有趣的主题 - 源颜色的色调不会出现在主题中', //rainbow
'有趣的主题 - 源颜色的色调不会出现在主题中', //fruitSalad // '有趣的主题 - 源颜色的色调不会出现在主题中', //fruitSalad
][index]; // ][index];
} // }
class ColorSelectPage extends StatefulWidget { class ColorSelectPage extends StatefulWidget {
const ColorSelectPage({super.key}); const ColorSelectPage({super.key});
@@ -60,8 +61,8 @@ List<Item> generateItems(int count) {
class _ColorSelectPageState extends State<ColorSelectPage> { class _ColorSelectPageState extends State<ColorSelectPage> {
final ColorSelectController ctr = Get.put(ColorSelectController()); final ColorSelectController ctr = Get.put(ColorSelectController());
DynamicSchemeVariant _dynamicSchemeVariant = FlexSchemeVariant _dynamicSchemeVariant =
DynamicSchemeVariant.values[GStorage.schemeVariant]; FlexSchemeVariant.values[GStorage.schemeVariant];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -78,7 +79,7 @@ class _ColorSelectPageState extends State<ColorSelectPage> {
child: Icon(Icons.palette_outlined), child: Icon(Icons.palette_outlined),
), ),
subtitle: Text( subtitle: Text(
_dynamicSchemeVariant.subTitle, _dynamicSchemeVariant.description,
style: TextStyle(fontSize: 12), style: TextStyle(fontSize: 12),
), ),
trailing: PopupMenuButton( trailing: PopupMenuButton(
@@ -90,17 +91,17 @@ class _ColorSelectPageState extends State<ColorSelectPage> {
(context as Element).markNeedsBuild(); (context as Element).markNeedsBuild();
Get.forceAppUpdate(); Get.forceAppUpdate();
}, },
itemBuilder: (context) => DynamicSchemeVariant.values itemBuilder: (context) => FlexSchemeVariant.values
.map((item) => PopupMenuItem<DynamicSchemeVariant>( .map((item) => PopupMenuItem<FlexSchemeVariant>(
value: item, value: item,
child: Text(item.title), child: Text(item.variantName),
)) ))
.toList(), .toList(),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
_dynamicSchemeVariant.title, _dynamicSchemeVariant.variantName,
style: TextStyle( style: TextStyle(
height: 1, height: 1,
fontSize: 13, fontSize: 13,

View File

@@ -2,6 +2,7 @@ import 'package:PiliPalaX/common/widgets/http_error.dart';
import 'package:PiliPalaX/http/msg.dart'; import 'package:PiliPalaX/http/msg.dart';
import 'package:PiliPalaX/http/user.dart'; import 'package:PiliPalaX/http/user.dart';
import 'package:PiliPalaX/utils/utils.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:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@@ -233,8 +234,8 @@ class _CreateFavPageState extends State<CreateFavPage> {
builder: (context, constraints) { builder: (context, constraints) {
return ClipRRect( return ClipRRect(
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(6),
child: Image.network( child: CachedNetworkImage(
_cover!, imageUrl: _cover!,
height: constraints.maxHeight, height: constraints.maxHeight,
width: constraints.maxHeight * 16 / 9, width: constraints.maxHeight * 16 / 9,
fit: BoxFit.cover, fit: BoxFit.cover,

View File

@@ -3,6 +3,7 @@ import 'dart:math';
import 'package:PiliPalaX/common/widgets/imageview.dart'; import 'package:PiliPalaX/common/widgets/imageview.dart';
import 'package:PiliPalaX/http/video.dart'; import 'package:PiliPalaX/http/video.dart';
import 'package:PiliPalaX/utils/extension.dart'; import 'package:PiliPalaX/utils/extension.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@@ -763,8 +764,8 @@ class ReplyItem extends StatelessWidget {
[ [
if (content.jumpUrl[matchStr]?['prefix_icon'] != null) ...[ if (content.jumpUrl[matchStr]?['prefix_icon'] != null) ...[
WidgetSpan( WidgetSpan(
child: Image.network( child: CachedNetworkImage(
content.jumpUrl[matchStr]['prefix_icon'], imageUrl: content.jumpUrl[matchStr]['prefix_icon'],
height: 19, height: 19,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),
@@ -909,8 +910,8 @@ class ReplyItem extends StatelessWidget {
[ [
if (content.jumpUrl[patternStr]?['prefix_icon'] != null) ...[ if (content.jumpUrl[patternStr]?['prefix_icon'] != null) ...[
WidgetSpan( WidgetSpan(
child: Image.network( child: CachedNetworkImage(
content.jumpUrl[patternStr]['prefix_icon'], imageUrl: content.jumpUrl[patternStr]['prefix_icon'],
height: 19, height: 19,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),

View File

@@ -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/http/video.dart';
import 'package:PiliPalaX/pages/video/detail/reply/widgets/zan_grpc.dart'; import 'package:PiliPalaX/pages/video/detail/reply/widgets/zan_grpc.dart';
import 'package:PiliPalaX/utils/extension.dart'; import 'package:PiliPalaX/utils/extension.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@@ -786,8 +787,8 @@ class ReplyItemGrpc extends StatelessWidget {
[ [
if (content.url[matchStr]?.hasPrefixIcon() == true) ...[ if (content.url[matchStr]?.hasPrefixIcon() == true) ...[
WidgetSpan( WidgetSpan(
child: Image.network( child: CachedNetworkImage(
content.url[matchStr]!.prefixIcon, imageUrl: content.url[matchStr]!.prefixIcon,
height: 19, height: 19,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),
@@ -946,8 +947,8 @@ class ReplyItemGrpc extends StatelessWidget {
[ [
if (content.url[patternStr]?.hasPrefixIcon() == true) ...[ if (content.url[patternStr]?.hasPrefixIcon() == true) ...[
WidgetSpan( WidgetSpan(
child: Image.network( child: CachedNetworkImage(
content.url[patternStr]!.prefixIcon, imageUrl: content.url[patternStr]!.prefixIcon,
height: 19, height: 19,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),

View File

@@ -1168,8 +1168,14 @@ class _VideoDetailPageState extends State<VideoDetailPage>
padding: WidgetStateProperty.all(EdgeInsets.zero), padding: WidgetStateProperty.all(EdgeInsets.zero),
), ),
onPressed: videoDetailController.showShootDanmakuSheet, onPressed: videoDetailController.showShootDanmakuSheet,
child: child: Text(
const Text('发弹幕', style: TextStyle(fontSize: 12)), '发弹幕',
style: TextStyle(
fontSize: 12,
color:
Theme.of(context).colorScheme.onSurfaceVariant,
),
),
), ),
), ),
SizedBox( SizedBox(

View File

@@ -55,7 +55,7 @@ class GStorage {
static List<Color> get blockColor { static List<Color> get blockColor {
List list = setting.get( List list = setting.get(
SettingBoxKey.blockColor, SettingBoxKey.blockColor,
defaultValue: List.filled(SegmentType.values.length, ''), defaultValue: List.generate(SegmentType.values.length, (_) => ''),
); );
return SegmentType.values return SegmentType.values
.map((item) => list[item.index].isNotEmpty .map((item) => list[item.index].isNotEmpty
@@ -94,7 +94,7 @@ class GStorage {
setting.get(SettingBoxKey.dynamicPeriod, defaultValue: 5); setting.get(SettingBoxKey.dynamicPeriod, defaultValue: 5);
static int get schemeVariant => static int get schemeVariant =>
setting.get(SettingBoxKey.schemeVariant, defaultValue: 0); setting.get(SettingBoxKey.schemeVariant, defaultValue: 10);
static double get danmakuFontScaleFS => static double get danmakuFontScaleFS =>
setting.get(SettingBoxKey.danmakuFontScaleFS, defaultValue: 1.2); setting.get(SettingBoxKey.danmakuFontScaleFS, defaultValue: 1.2);

View File

@@ -600,6 +600,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" 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: floating:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@@ -169,6 +169,7 @@ dependencies:
#解压直播消息 #解压直播消息
brotli: ^0.6.0 brotli: ^0.6.0
expandable: ^5.0.1 expandable: ^5.0.1
flex_seed_scheme: ^3.4.1
dependency_overrides: dependency_overrides:
screen_brightness: ^2.0.0+2 screen_brightness: ^2.0.0+2