1
1
import 'package:flutter/material.dart' ;
2
2
import 'package:intl/intl.dart' ;
3
3
import 'package:pr12er/protos/pkg/pr12er/messages.pb.dart' ;
4
+ import 'package:url_launcher/url_launcher.dart' ;
4
5
5
6
class RecommendationWidget extends StatelessWidget {
6
7
final Detail detail;
@@ -24,20 +25,36 @@ class RecommendationWidget extends StatelessWidget {
24
25
SizedBox (
25
26
height: 150 ,
26
27
child: ListView .builder (
27
- physics: const NeverScrollableScrollPhysics (),
28
28
itemCount: refPapers.length,
29
29
itemBuilder: (BuildContext context, int index) =>
30
- getItemCard (refPapers[index])))
30
+ getItemCard (context, refPapers[index])))
31
31
]),
32
32
);
33
33
}
34
34
35
- Widget getItemCard (Paper paper) {
36
- return Card (
37
- child: ListTile (
38
- title: Text (paper.title),
39
- subtitle: Text (
40
- "${paper .authors [0 ]} | ${DateFormat .yMd ().format (paper .publishedDate .toDateTime ())}" )));
35
+ Widget getItemCard (BuildContext context, Paper paper) {
36
+ return GestureDetector (
37
+ onTap: () async {
38
+ if (await canLaunch ("https://arxiv.org/abs/${paper .arxivId }" )) {
39
+ await launch ("https://arxiv.org/abs/${paper .arxivId }" );
40
+ return ;
41
+ }
42
+ ScaffoldMessenger .of (context).removeCurrentSnackBar ();
43
+ ScaffoldMessenger .of (context).showSnackBar (SnackBar (
44
+ backgroundColor: Theme .of (context).colorScheme.error,
45
+ content: Text ("https://arxiv.org/abs/${paper .arxivId } is not a valid URL" ),
46
+ action: SnackBarAction (
47
+ label: "OK" ,
48
+ textColor: Theme .of (context).colorScheme.onError,
49
+ onPressed: (){},
50
+ ),
51
+ ));
52
+ },
53
+ child: Card (
54
+ child: ListTile (
55
+ title: Text (paper.title),
56
+ subtitle: Text (
57
+ "${paper .authors [0 ]} | ${DateFormat .yMd ().format (paper .publishedDate .toDateTime ())}" ))));
41
58
}
42
59
43
60
List <Paper > getReferencePapers (Detail detail) {
0 commit comments