opt: get theme color

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-28 21:32:30 +08:00
parent 451a84e696
commit ca993df0c6
149 changed files with 4415 additions and 4803 deletions

View File

@@ -13,6 +13,8 @@ class MemberArticleItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final outline = theme.colorScheme.outline;
return Material(
color: Colors.transparent,
child: InkWell(
@@ -23,7 +25,6 @@ class MemberArticleItem extends StatelessWidget {
},
onLongPress: () {
imageSaveDialog(
context: context,
title: item.title,
cover: item.originImageUrls?.firstOrNull,
);
@@ -65,10 +66,7 @@ class MemberArticleItem extends StatelessWidget {
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.bodyMedium!
.fontSize,
fontSize: theme.textTheme.bodyMedium!.fontSize,
height: 1.42,
letterSpacing: 0.3,
),
@@ -80,7 +78,7 @@ class MemberArticleItem extends StatelessWidget {
style: TextStyle(
fontSize: 12,
height: 1,
color: Theme.of(context).colorScheme.outline,
color: outline,
),
),
const SizedBox(height: 3),
@@ -90,14 +88,14 @@ class MemberArticleItem extends StatelessWidget {
context: context,
value: item.stats?.view ?? 0,
goto: 'picture',
textColor: Theme.of(context).colorScheme.outline,
textColor: outline,
),
const SizedBox(width: 16),
StatView(
context: context,
goto: 'reply',
value: item.stats?.reply ?? 0,
textColor: Theme.of(context).colorScheme.outline,
textColor: outline,
),
],
),

View File

@@ -39,6 +39,7 @@ class _MemberFavoriteState extends State<MemberFavorite>
}
_buildBody(LoadingState loadingState) {
final theme = Theme.of(context);
return switch (loadingState) {
Loading() => loadingWidget,
Success() => (loadingState.response as List?)?.isNotEmpty == true
@@ -50,12 +51,12 @@ class _MemberFavoriteState extends State<MemberFavorite>
slivers: [
SliverToBoxAdapter(
child: Obx(
() => _buildItem(_controller.first.value, true),
() => _buildItem(theme, _controller.first.value, true),
),
),
SliverToBoxAdapter(
child: Obx(
() => _buildItem(_controller.second.value, false),
() => _buildItem(theme, _controller.second.value, false),
),
),
SliverToBoxAdapter(
@@ -76,9 +77,9 @@ class _MemberFavoriteState extends State<MemberFavorite>
};
}
_buildItem(Datum data, bool isFirst) {
_buildItem(ThemeData theme, Datum data, bool isFirst) {
return Theme(
data: Theme.of(context).copyWith(
data: theme.copyWith(
dividerColor: Colors.transparent,
),
child: ExpansionTile(
@@ -95,7 +96,7 @@ class _MemberFavoriteState extends State<MemberFavorite>
text: ' ${data.mediaListResponse?.count}',
style: TextStyle(
fontSize: 13,
color: Theme.of(context).colorScheme.outline,
color: theme.colorScheme.outline,
),
),
],
@@ -127,14 +128,14 @@ class _MemberFavoriteState extends State<MemberFavorite>
? _controller.firstEnd.value
: _controller.secondEnd.value)
? const SizedBox.shrink()
: _buildLoadMoreItem(isFirst),
: _buildLoadMoreItem(theme, isFirst),
),
],
),
);
}
_buildLoadMoreItem(bool isFirst) {
_buildLoadMoreItem(ThemeData theme, bool isFirst) {
return ListTile(
dense: true,
onTap: () {
@@ -148,7 +149,7 @@ class _MemberFavoriteState extends State<MemberFavorite>
'查看更多内容',
textAlign: TextAlign.center,
style: TextStyle(
color: Theme.of(context).colorScheme.primary,
color: theme.colorScheme.primary,
),
),
);

View File

@@ -16,6 +16,7 @@ class MemberFavItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return Material(
color: Colors.transparent,
child: InkWell(
@@ -58,7 +59,6 @@ class MemberFavItem extends StatelessWidget {
},
onLongPress: () {
imageSaveDialog(
context: context,
title: item.title,
cover: item.cover,
);
@@ -100,12 +100,12 @@ class MemberFavItem extends StatelessWidget {
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Theme.of(context).colorScheme.primary,
color: theme.colorScheme.primary,
),
child: Icon(
Icons.video_library_outlined,
size: 12,
color: Theme.of(context).colorScheme.onPrimary,
color: theme.colorScheme.onPrimary,
),
),
),
@@ -136,7 +136,7 @@ class MemberFavItem extends StatelessWidget {
: '${item.mediaCount}个内容',
style: TextStyle(
fontSize: 12,
color: Theme.of(context).colorScheme.outline,
color: theme.colorScheme.outline,
),
),
],

View File

@@ -19,7 +19,6 @@ class SeasonSeriesCard extends StatelessWidget {
return InkWell(
onLongPress: () {
imageSaveDialog(
context: context,
title: item['meta']['name'],
cover: item['meta']['cover'],
);
@@ -67,6 +66,7 @@ class SeasonSeriesCard extends StatelessWidget {
}
Widget videoContent(context) {
final theme = Theme.of(context);
return Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -75,7 +75,7 @@ class SeasonSeriesCard extends StatelessWidget {
item['meta']['name'],
textAlign: TextAlign.start,
style: TextStyle(
fontSize: Theme.of(context).textTheme.bodyMedium!.fontSize,
fontSize: theme.textTheme.bodyMedium!.fontSize,
height: 1.42,
letterSpacing: 0.3,
),
@@ -89,7 +89,7 @@ class SeasonSeriesCard extends StatelessWidget {
style: TextStyle(
fontSize: 12,
height: 1,
color: Theme.of(context).colorScheme.outline,
color: theme.colorScheme.outline,
overflow: TextOverflow.clip,
),
),

View File

@@ -61,6 +61,7 @@ class _MemberVideoState extends State<MemberVideo>
}
_buildBody(LoadingState<List<Item>?> loadingState) {
final theme = Theme.of(context);
return switch (loadingState) {
Loading() => loadingWidget,
Success() => loadingState.response?.isNotEmpty == true
@@ -82,7 +83,7 @@ class _MemberVideoState extends State<MemberVideo>
floating: true,
delegate: CustomSliverPersistentHeaderDelegate(
extent: 40,
bgColor: Theme.of(context).colorScheme.surface,
bgColor: theme.colorScheme.surface,
child: SizedBox(
height: 40,
child: Row(
@@ -115,9 +116,8 @@ class _MemberVideoState extends State<MemberVideo>
icon: Icon(
Icons.play_circle_outline_rounded,
size: 16,
color: Theme.of(context)
.colorScheme
.secondary,
color:
theme.colorScheme.secondary,
),
label: Text(
_controller.episodicButton.value
@@ -125,9 +125,8 @@ class _MemberVideoState extends State<MemberVideo>
'播放全部',
style: TextStyle(
fontSize: 13,
color: Theme.of(context)
.colorScheme
.secondary,
color:
theme.colorScheme.secondary,
),
),
),
@@ -142,9 +141,7 @@ class _MemberVideoState extends State<MemberVideo>
icon: Icon(
Icons.sort,
size: 16,
color: Theme.of(context)
.colorScheme
.secondary,
color: theme.colorScheme.secondary,
),
label: Obx(
() => Text(
@@ -158,9 +155,7 @@ class _MemberVideoState extends State<MemberVideo>
: '倒序',
style: TextStyle(
fontSize: 13,
color: Theme.of(context)
.colorScheme
.secondary,
color: theme.colorScheme.secondary,
),
),
),

View File

@@ -40,6 +40,7 @@ class _MemberContributeState extends State<MemberContribute>
@override
Widget build(BuildContext context) {
super.build(context);
final theme = Theme.of(context);
return _controller.tabs != null
? Column(
children: [
@@ -58,7 +59,7 @@ class _MemberContributeState extends State<MemberContribute>
indicatorPadding:
const EdgeInsets.symmetric(horizontal: 3, vertical: 8),
indicator: BoxDecoration(
color: Theme.of(context).colorScheme.secondaryContainer,
color: theme.colorScheme.secondaryContainer,
borderRadius: BorderRadius.circular(20),
),
indicatorSize: TabBarIndicatorSize.tab,
@@ -66,9 +67,8 @@ class _MemberContributeState extends State<MemberContribute>
.labelStyle
?.copyWith(fontSize: 14) ??
const TextStyle(fontSize: 14),
labelColor:
Theme.of(context).colorScheme.onSecondaryContainer,
unselectedLabelColor: Theme.of(context).colorScheme.outline,
labelColor: theme.colorScheme.onSecondaryContainer,
unselectedLabelColor: theme.colorScheme.outline,
),
),
Expanded(

View File

@@ -245,100 +245,94 @@ class _MemberHomeState extends State<MemberHome>
required String param,
String? param1,
required int count,
}) =>
SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text.rich(
}) {
final color = Theme.of(context).colorScheme.outline;
return SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text.rich(
TextSpan(
children: [
TextSpan(text: '$title '),
TextSpan(
text: count.toString(),
style: TextStyle(fontSize: 13, color: color),
),
],
),
),
GestureDetector(
onTap: () {
int index =
_ctr.tab2!.indexWhere((item) => item.param == param);
if (index != -1) {
if (['video', 'article', 'audio'].contains(param1)) {
List<Item> items = _ctr.tab2!
.firstWhere((item) => item.param == param)
.items!;
int index1 =
items.indexWhere((item) => item.param == param1);
try {
final contributeCtr =
Get.find<MemberContributeCtr>(tag: widget.heroTag);
// contributeCtr.tabController?.animateTo(index1);
if (contributeCtr.tabController?.index != index1) {
contributeCtr.tabController?.index = index1;
}
debugPrint('initialized');
} catch (e) {
_ctr.contributeInitialIndex.value = index1;
debugPrint('not initialized');
}
}
_ctr.tabController?.animateTo(index);
} else {
if (param == 'coinArchive') {
Get.to(MemberCoinPage(
mid: _ctr.mid,
name: _ctr.username,
));
return;
}
if (param == 'likeArchive') {
Get.to(MemberLikePage(
mid: _ctr.mid,
name: _ctr.username,
));
return;
}
// else TODO
SmartDialog.showToast('view $param');
}
},
child: Text.rich(
TextSpan(
children: [
TextSpan(text: '$title '),
TextSpan(
text: count.toString(),
style: TextStyle(
fontSize: 13,
color: Theme.of(context).colorScheme.outline,
text: '查看更多',
style: TextStyle(color: color),
),
WidgetSpan(
alignment: PlaceholderAlignment.top,
child: Icon(
Icons.arrow_forward_ios,
size: 14,
color: color,
),
style: TextStyle(fontSize: 13, color: color),
),
],
),
),
GestureDetector(
onTap: () {
int index =
_ctr.tab2!.indexWhere((item) => item.param == param);
if (index != -1) {
if (['video', 'article', 'audio'].contains(param1)) {
List<Item> items = _ctr.tab2!
.firstWhere((item) => item.param == param)
.items!;
int index1 =
items.indexWhere((item) => item.param == param1);
try {
final contributeCtr =
Get.find<MemberContributeCtr>(tag: widget.heroTag);
// contributeCtr.tabController?.animateTo(index1);
if (contributeCtr.tabController?.index != index1) {
contributeCtr.tabController?.index = index1;
}
debugPrint('initialized');
} catch (e) {
_ctr.contributeInitialIndex.value = index1;
debugPrint('not initialized');
}
}
_ctr.tabController?.animateTo(index);
} else {
if (param == 'coinArchive') {
Get.to(MemberCoinPage(
mid: _ctr.mid,
name: _ctr.username,
));
return;
}
if (param == 'likeArchive') {
Get.to(MemberLikePage(
mid: _ctr.mid,
name: _ctr.username,
));
return;
}
// else TODO
SmartDialog.showToast('view $param');
}
},
child: Text.rich(
TextSpan(
children: [
TextSpan(
text: '查看更多',
style: TextStyle(
color: Theme.of(context).colorScheme.outline,
),
),
WidgetSpan(
alignment: PlaceholderAlignment.top,
child: Icon(
Icons.arrow_forward_ios,
size: 14,
color: Theme.of(context).colorScheme.outline,
),
style: TextStyle(
fontSize: 13,
color: Theme.of(context).colorScheme.outline,
),
),
],
),
),
),
],
),
),
],
),
);
),
);
}
}

View File

@@ -28,7 +28,6 @@ class MemberFavItem extends StatelessWidget {
},
onLongPress: () {
imageSaveDialog(
context: context,
title: item['title'],
cover: item['cover'],
);