import 'package:fluro/fluro.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_wisetronic/utils/utils.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../routes.dart'; class TextLink extends StatelessWidget { final String title; final String url; final Color color; final double paddingHorizontal; final double paddingVertical; final FontWeight fontWeight; final bool selected; final bool isLink; final bool replace; final bool clearStack; final bool maintainState; final bool rootNavigator; final TransitionType transition; final bool closeDrawer; final bool isEmail; final bool isPhone; TextLink(this.title, this.url, { this.color, this.paddingHorizontal, this.paddingVertical, this.fontWeight, this.selected, bool isLink, bool replace, bool clearStack, bool maintainState, bool rootNavigator, this.transition, bool closeDrawer, bool isEmail, bool isPhone, }) : isLink = isLink ?? false, replace = replace ?? false, clearStack = clearStack ?? false, maintainState = maintainState ?? true, rootNavigator = rootNavigator ?? false, closeDrawer = closeDrawer ?? false, isEmail = isEmail ?? false, isPhone = isPhone ?? false; @override Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, child: GestureDetector( child: Container( padding: EdgeInsets.symmetric( vertical: paddingVertical ?? 0.0, horizontal: paddingHorizontal ?? 0.0 ), child: Text( title, style: TextStyle( color: color ?? Colors.blue, fontWeight: fontWeight ?? FontWeight.normal, ), ), decoration: BoxDecoration( border: (selected != null && selected) ? Border( bottom: BorderSide( color: color ?? Colors.blue, width: 3.0, ) ) : null, ), ), onTap: () async { if (selected == null || !selected) { if (isEmail) { Utils.openEmail(url); } else if (isPhone) { Utils.callPhone(url); } else if (!isLink) { if (closeDrawer) { Routes.router.pop(context); } Routes.router.navigateTo( context, url, replace: replace, clearStack: clearStack, maintainState: maintainState, rootNavigator: rootNavigator, ); } else { if (await canLaunch(url)) { await launch(url); } else { throw 'Could not launch $url'; } } } }, ), ); } }