11import 'package:flutter/material.dart' ;
22import 'package:intl/intl.dart' ;
33import 'package:pr12er/protos/pkg/pr12er/messages.pb.dart' ;
4+ import 'package:url_launcher/url_launcher.dart' ;
45
56class RecommendationWidget extends StatelessWidget {
67 final Detail detail;
@@ -24,20 +25,36 @@ class RecommendationWidget extends StatelessWidget {
2425 SizedBox (
2526 height: 150 ,
2627 child: ListView .builder (
27- physics: const NeverScrollableScrollPhysics (),
2828 itemCount: refPapers.length,
2929 itemBuilder: (BuildContext context, int index) =>
30- getItemCard (refPapers[index])))
30+ getItemCard (context, refPapers[index])))
3131 ]),
3232 );
3333 }
3434
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 ())}" ))));
4158 }
4259
4360 List <Paper > getReferencePapers (Detail detail) {
0 commit comments