mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
Fix duplicate hero tag.
This commit is contained in:
@@ -23,14 +23,16 @@ ImageProvider? _findImageProvider(Comic comic) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ComicTile extends StatelessWidget {
|
class ComicTile extends StatelessWidget {
|
||||||
const ComicTile(
|
const ComicTile({
|
||||||
{super.key,
|
super.key,
|
||||||
required this.comic,
|
required this.comic,
|
||||||
this.enableLongPressed = true,
|
this.enableLongPressed = true,
|
||||||
this.badge,
|
this.badge,
|
||||||
this.menuOptions,
|
this.menuOptions,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
this.onLongPressed});
|
this.onLongPressed,
|
||||||
|
this.heroID,
|
||||||
|
});
|
||||||
|
|
||||||
final Comic comic;
|
final Comic comic;
|
||||||
|
|
||||||
@@ -44,6 +46,8 @@ class ComicTile extends StatelessWidget {
|
|||||||
|
|
||||||
final VoidCallback? onLongPressed;
|
final VoidCallback? onLongPressed;
|
||||||
|
|
||||||
|
final int? heroID;
|
||||||
|
|
||||||
void _onTap() {
|
void _onTap() {
|
||||||
if (onTap != null) {
|
if (onTap != null) {
|
||||||
onTap!();
|
onTap!();
|
||||||
@@ -55,6 +59,7 @@ class ComicTile extends StatelessWidget {
|
|||||||
sourceKey: comic.sourceKey,
|
sourceKey: comic.sourceKey,
|
||||||
cover: comic.cover,
|
cover: comic.cover,
|
||||||
title: comic.title,
|
title: comic.title,
|
||||||
|
heroID: heroID,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -137,8 +142,7 @@ class ComicTile extends StatelessWidget {
|
|||||||
.isExist(comic.id, ComicType(comic.sourceKey.hashCode))
|
.isExist(comic.id, ComicType(comic.sourceKey.hashCode))
|
||||||
: false;
|
: false;
|
||||||
var history = appdata.settings['showHistoryStatusOnTile']
|
var history = appdata.settings['showHistoryStatusOnTile']
|
||||||
? HistoryManager()
|
? HistoryManager().find(comic.id, ComicType(comic.sourceKey.hashCode))
|
||||||
.find(comic.id, ComicType(comic.sourceKey.hashCode))
|
|
||||||
: null;
|
: null;
|
||||||
if (history?.page == 0) {
|
if (history?.page == 0) {
|
||||||
history!.page = 1;
|
history!.page = 1;
|
||||||
@@ -210,18 +214,8 @@ class ComicTile extends StatelessWidget {
|
|||||||
Widget _buildDetailedMode(BuildContext context) {
|
Widget _buildDetailedMode(BuildContext context) {
|
||||||
return LayoutBuilder(builder: (context, constrains) {
|
return LayoutBuilder(builder: (context, constrains) {
|
||||||
final height = constrains.maxHeight - 16;
|
final height = constrains.maxHeight - 16;
|
||||||
return InkWell(
|
|
||||||
borderRadius: BorderRadius.circular(12),
|
Widget image = Container(
|
||||||
onTap: _onTap,
|
|
||||||
onLongPress: enableLongPressed ? () => _onLongPressed(context) : null,
|
|
||||||
onSecondaryTapDown: (detail) => onSecondaryTap(detail, context),
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.fromLTRB(16, 8, 24, 8),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
Hero(
|
|
||||||
tag: "cover${comic.id}${comic.sourceKey}",
|
|
||||||
child: Container(
|
|
||||||
width: height * 0.68,
|
width: height * 0.68,
|
||||||
height: double.infinity,
|
height: double.infinity,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -237,8 +231,25 @@ class ComicTile extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
clipBehavior: Clip.antiAlias,
|
clipBehavior: Clip.antiAlias,
|
||||||
child: buildImage(context),
|
child: buildImage(context),
|
||||||
),
|
);
|
||||||
),
|
|
||||||
|
if (heroID != null) {
|
||||||
|
image = Hero(
|
||||||
|
tag: "cover$heroID",
|
||||||
|
child: image,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return InkWell(
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
|
onTap: _onTap,
|
||||||
|
onLongPress: enableLongPressed ? () => _onLongPressed(context) : null,
|
||||||
|
onSecondaryTapDown: (detail) => onSecondaryTap(detail, context),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.fromLTRB(16, 8, 24, 8),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
image,
|
||||||
SizedBox.fromSize(
|
SizedBox.fromSize(
|
||||||
size: const Size(16, 5),
|
size: const Size(16, 5),
|
||||||
),
|
),
|
||||||
@@ -252,35 +263,23 @@ class ComicTile extends StatelessWidget {
|
|||||||
badge: badge ?? comic.language,
|
badge: badge ?? comic.language,
|
||||||
tags: comic.tags,
|
tags: comic.tags,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
enableTranslate: ComicSource.find(comic.sourceKey)
|
enableTranslate:
|
||||||
?.enableTagsTranslate ??
|
ComicSource.find(comic.sourceKey)?.enableTagsTranslate ??
|
||||||
false,
|
false,
|
||||||
rating: comic.stars,
|
rating: comic.stars,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
));
|
),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildBriefMode(BuildContext context) {
|
Widget _buildBriefMode(BuildContext context) {
|
||||||
return LayoutBuilder(
|
return LayoutBuilder(
|
||||||
builder: (context, constraints) {
|
builder: (context, constraints) {
|
||||||
return InkWell(
|
Widget image = Container(
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
onTap: _onTap,
|
|
||||||
onLongPress: enableLongPressed ? () => _onLongPressed(context) : null,
|
|
||||||
onSecondaryTapDown: (detail) => onSecondaryTap(detail, context),
|
|
||||||
child: Column(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Stack(
|
|
||||||
children: [
|
|
||||||
Positioned.fill(
|
|
||||||
child: Hero(
|
|
||||||
tag: "cover${comic.id}${comic.sourceKey}",
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: context.colorScheme.secondaryContainer,
|
color: context.colorScheme.secondaryContainer,
|
||||||
borderRadius: BorderRadius.circular(8),
|
borderRadius: BorderRadius.circular(8),
|
||||||
@@ -294,8 +293,27 @@ class ComicTile extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
clipBehavior: Clip.antiAlias,
|
clipBehavior: Clip.antiAlias,
|
||||||
child: buildImage(context),
|
child: buildImage(context),
|
||||||
),
|
);
|
||||||
),
|
|
||||||
|
if (heroID != null) {
|
||||||
|
image = Hero(
|
||||||
|
tag: "cover$heroID",
|
||||||
|
child: image,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return InkWell(
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
onTap: _onTap,
|
||||||
|
onLongPress: enableLongPressed ? () => _onLongPressed(context) : null,
|
||||||
|
onSecondaryTapDown: (detail) => onSecondaryTap(detail, context),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Positioned.fill(
|
||||||
|
child: image,
|
||||||
),
|
),
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment.bottomRight,
|
alignment: Alignment.bottomRight,
|
||||||
@@ -739,6 +757,16 @@ class SliverGridComics extends StatefulWidget {
|
|||||||
|
|
||||||
class _SliverGridComicsState extends State<SliverGridComics> {
|
class _SliverGridComicsState extends State<SliverGridComics> {
|
||||||
List<Comic> comics = [];
|
List<Comic> comics = [];
|
||||||
|
List<int> heroIDs = [];
|
||||||
|
|
||||||
|
static int _nextHeroID = 0;
|
||||||
|
|
||||||
|
void generateHeroID() {
|
||||||
|
heroIDs.clear();
|
||||||
|
for (var i = 0; i < comics.length; i++) {
|
||||||
|
heroIDs.add(_nextHeroID++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void didUpdateWidget(covariant SliverGridComics oldWidget) {
|
void didUpdateWidget(covariant SliverGridComics oldWidget) {
|
||||||
@@ -749,6 +777,7 @@ class _SliverGridComicsState extends State<SliverGridComics> {
|
|||||||
comics.add(comic);
|
comics.add(comic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
generateHeroID();
|
||||||
}
|
}
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
}
|
}
|
||||||
@@ -760,6 +789,7 @@ class _SliverGridComicsState extends State<SliverGridComics> {
|
|||||||
comics.add(comic);
|
comics.add(comic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
generateHeroID();
|
||||||
HistoryManager().addListener(update);
|
HistoryManager().addListener(update);
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
@@ -785,6 +815,7 @@ class _SliverGridComicsState extends State<SliverGridComics> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return _SliverGridComics(
|
return _SliverGridComics(
|
||||||
comics: comics,
|
comics: comics,
|
||||||
|
heroIDs: heroIDs,
|
||||||
selection: widget.selections,
|
selection: widget.selections,
|
||||||
onLastItemBuild: widget.onLastItemBuild,
|
onLastItemBuild: widget.onLastItemBuild,
|
||||||
badgeBuilder: widget.badgeBuilder,
|
badgeBuilder: widget.badgeBuilder,
|
||||||
@@ -798,6 +829,7 @@ class _SliverGridComicsState extends State<SliverGridComics> {
|
|||||||
class _SliverGridComics extends StatelessWidget {
|
class _SliverGridComics extends StatelessWidget {
|
||||||
const _SliverGridComics({
|
const _SliverGridComics({
|
||||||
required this.comics,
|
required this.comics,
|
||||||
|
required this.heroIDs,
|
||||||
this.onLastItemBuild,
|
this.onLastItemBuild,
|
||||||
this.badgeBuilder,
|
this.badgeBuilder,
|
||||||
this.menuBuilder,
|
this.menuBuilder,
|
||||||
@@ -808,6 +840,8 @@ class _SliverGridComics extends StatelessWidget {
|
|||||||
|
|
||||||
final List<Comic> comics;
|
final List<Comic> comics;
|
||||||
|
|
||||||
|
final List<int> heroIDs;
|
||||||
|
|
||||||
final Map<Comic, bool>? selection;
|
final Map<Comic, bool>? selection;
|
||||||
|
|
||||||
final void Function()? onLastItemBuild;
|
final void Function()? onLastItemBuild;
|
||||||
@@ -839,6 +873,7 @@ class _SliverGridComics extends StatelessWidget {
|
|||||||
onLongPressed: onLongPressed != null
|
onLongPressed: onLongPressed != null
|
||||||
? () => onLongPressed!(comics[index])
|
? () => onLongPressed!(comics[index])
|
||||||
: null,
|
: null,
|
||||||
|
heroID: heroIDs[index],
|
||||||
);
|
);
|
||||||
if (selection == null) {
|
if (selection == null) {
|
||||||
return comic;
|
return comic;
|
||||||
|
@@ -47,6 +47,7 @@ class ComicPage extends StatefulWidget {
|
|||||||
required this.sourceKey,
|
required this.sourceKey,
|
||||||
this.cover,
|
this.cover,
|
||||||
this.title,
|
this.title,
|
||||||
|
this.heroID,
|
||||||
});
|
});
|
||||||
|
|
||||||
final String id;
|
final String id;
|
||||||
@@ -57,6 +58,8 @@ class ComicPage extends StatefulWidget {
|
|||||||
|
|
||||||
final String? title;
|
final String? title;
|
||||||
|
|
||||||
|
final int? heroID;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<ComicPage> createState() => _ComicPageState();
|
State<ComicPage> createState() => _ComicPageState();
|
||||||
}
|
}
|
||||||
@@ -86,6 +89,7 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
|
|||||||
title: widget.title,
|
title: widget.title,
|
||||||
sourceKey: widget.sourceKey,
|
sourceKey: widget.sourceKey,
|
||||||
cid: widget.id,
|
cid: widget.id,
|
||||||
|
heroID: widget.heroID,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,7 +229,7 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
|
|||||||
children: [
|
children: [
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
Hero(
|
Hero(
|
||||||
tag: "cover${comic.id}${comic.sourceKey}",
|
tag: "cover${widget.heroID}",
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: context.colorScheme.primaryContainer,
|
color: context.colorScheme.primaryContainer,
|
||||||
@@ -776,6 +780,7 @@ class _ComicPageLoadingPlaceHolder extends StatelessWidget {
|
|||||||
this.title,
|
this.title,
|
||||||
required this.sourceKey,
|
required this.sourceKey,
|
||||||
required this.cid,
|
required this.cid,
|
||||||
|
this.heroID,
|
||||||
});
|
});
|
||||||
|
|
||||||
final String? cover;
|
final String? cover;
|
||||||
@@ -786,6 +791,8 @@ class _ComicPageLoadingPlaceHolder extends StatelessWidget {
|
|||||||
|
|
||||||
final String cid;
|
final String cid;
|
||||||
|
|
||||||
|
final int? heroID;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Widget buildContainer(double? width, double? height,
|
Widget buildContainer(double? width, double? height,
|
||||||
@@ -870,7 +877,7 @@ class _ComicPageLoadingPlaceHolder extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Hero(
|
return Hero(
|
||||||
tag: "cover$cid$sourceKey",
|
tag: "cover$heroID",
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: context.colorScheme.primaryContainer,
|
color: context.colorScheme.primaryContainer,
|
||||||
|
Reference in New Issue
Block a user