@@ -6,6 +6,8 @@ import 'package:_pub_shared/format/x_ago_format.dart';
6
6
import 'package:_pub_shared/search/search_form.dart' ;
7
7
import 'package:_pub_shared/search/tags.dart' ;
8
8
import 'package:clock/clock.dart' ;
9
+ import 'package:pub_dev/frontend/request_context.dart' ;
10
+ import 'package:pub_dev/frontend/templates/views/pkg/liked_package_list.dart' ;
9
11
10
12
import '../../../../package/models.dart' ;
11
13
import '../../../../package/screenshots/backend.dart' ;
@@ -31,6 +33,11 @@ d.Node listOfPackagesNode({
31
33
}) {
32
34
final bestNameMatch =
33
35
(nameMatches == null || nameMatches.isEmpty) ? null : nameMatches.first;
36
+ final listingPackagesLikedByMe =
37
+ requestContext.experimentalFlags.useMyLikedSearch &&
38
+ (searchForm? .parsedQuery.tagsPredicate
39
+ .isRequiredTag (AccountTag .isLikedByMe) ??
40
+ false );
34
41
return d.div (
35
42
classes: ['packages' ],
36
43
children: [
@@ -39,6 +46,7 @@ d.Node listOfPackagesNode({
39
46
hit,
40
47
searchForm: searchForm,
41
48
isNameMatch: hit.name == bestNameMatch,
49
+ isLiked: listingPackagesLikedByMe,
42
50
)),
43
51
imageCarousel (),
44
52
],
@@ -77,6 +85,7 @@ d.Node _packageItem(
77
85
PackageView view, {
78
86
required SearchForm ? searchForm,
79
87
required bool isNameMatch,
88
+ required bool isLiked,
80
89
}) {
81
90
final isFlutterFavorite = view.tags.contains (PackageTags .isFlutterFavorite);
82
91
final isNullSafe = view.tags.contains (PackageVersionTags .isNullSafe);
@@ -188,6 +197,9 @@ d.Node _packageItem(
188
197
labeledScoresNode: labeledScoresNodeFromPackageView (view),
189
198
description: view.ellipsizedDescription ?? '' ,
190
199
metadataNode: metadataNode,
200
+ likeIcon: isLiked
201
+ ? renderLikeButton (view.name, likeCount: view.likes, isLiked: isLiked)
202
+ : null ,
191
203
copyIcon:
192
204
copyIcon (package: view.name, version: view.releases.stable.version),
193
205
tagsNode: tagsNodeFromPackageView (searchForm: searchForm, package: view),
@@ -220,6 +232,7 @@ d.Node _item({
220
232
required String description,
221
233
required d.Node metadataNode,
222
234
required d.Node ? tagsNode,
235
+ d.Node ? likeIcon,
223
236
d.Node ? copyIcon,
224
237
required String ? replacedBy,
225
238
required List <_ApiPageUrl >? apiPages,
@@ -237,6 +250,7 @@ d.Node _item({
237
250
'pub-monochrome-icon-hoverable' ,
238
251
], children: [
239
252
d.a (href: url, text: name),
253
+ if (likeIcon != null ) ...[d.text (' ' ), likeIcon],
240
254
if (copyIcon != null ) copyIcon,
241
255
d.text (' ' ),
242
256
if (isNameMatch) nameMatchBadgeNode,
0 commit comments