2019-01-31 14:37:25 +08:00
|
|
|
import 'package:flutter/material.dart';
|
2019-02-07 19:17:29 +08:00
|
|
|
import 'package:flutter/cupertino.dart';
|
2019-09-02 21:52:32 +08:00
|
|
|
import 'package:provider/provider.dart';
|
2019-02-10 14:26:51 +08:00
|
|
|
import 'package:url_launcher/url_launcher.dart';
|
2019-09-02 21:52:32 +08:00
|
|
|
import 'package:git_touch/models/theme.dart';
|
2019-01-31 14:37:25 +08:00
|
|
|
|
|
|
|
class Link extends StatelessWidget {
|
|
|
|
final Widget child;
|
2019-02-10 14:26:51 +08:00
|
|
|
final String url;
|
2019-02-07 19:17:29 +08:00
|
|
|
final WidgetBuilder screenBuilder;
|
2019-02-21 18:43:41 +08:00
|
|
|
final Function onTap;
|
2019-02-08 19:34:07 +08:00
|
|
|
final bool material;
|
|
|
|
final bool fullscreenDialog;
|
2019-01-31 14:37:25 +08:00
|
|
|
|
2019-02-07 19:17:29 +08:00
|
|
|
Link({
|
2019-02-08 23:20:28 +08:00
|
|
|
this.child,
|
2019-02-10 14:26:51 +08:00
|
|
|
this.url,
|
2019-02-07 19:17:29 +08:00
|
|
|
this.screenBuilder,
|
2019-02-21 18:43:41 +08:00
|
|
|
this.onTap,
|
2019-02-08 19:34:07 +08:00
|
|
|
this.material = true,
|
|
|
|
this.fullscreenDialog = false,
|
2019-09-24 21:04:30 +08:00
|
|
|
}) : assert(screenBuilder == null || url == null);
|
2019-01-31 14:37:25 +08:00
|
|
|
|
2019-09-24 21:04:30 +08:00
|
|
|
void _onTap(BuildContext context) {
|
2019-02-21 18:43:41 +08:00
|
|
|
if (onTap != null) {
|
2019-09-24 21:04:30 +08:00
|
|
|
return onTap();
|
2019-02-08 19:34:07 +08:00
|
|
|
}
|
|
|
|
if (screenBuilder != null) {
|
2019-09-24 21:04:30 +08:00
|
|
|
return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder,
|
2019-09-02 21:52:32 +08:00
|
|
|
fullscreenDialog: fullscreenDialog);
|
2019-02-08 19:34:07 +08:00
|
|
|
}
|
2019-02-10 14:26:51 +08:00
|
|
|
if (url != null) {
|
|
|
|
launch(url);
|
|
|
|
}
|
2019-02-08 19:34:07 +08:00
|
|
|
}
|
|
|
|
|
2019-01-31 14:37:25 +08:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
2019-02-08 19:34:07 +08:00
|
|
|
if (!material) {
|
|
|
|
return GestureDetector(
|
|
|
|
child: child,
|
2019-09-24 21:04:30 +08:00
|
|
|
onTap: () => _onTap(context),
|
2019-02-08 19:34:07 +08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-01-31 14:37:25 +08:00
|
|
|
return Material(
|
|
|
|
child: Ink(
|
2019-09-24 21:04:30 +08:00
|
|
|
color: Colors.white,
|
2019-01-31 14:37:25 +08:00
|
|
|
child: InkWell(
|
|
|
|
child: child,
|
2019-09-19 22:26:20 +08:00
|
|
|
// splashColor:
|
|
|
|
// theme == AppThemeType.cupertino ? Colors.transparent : null,
|
2019-09-24 21:04:30 +08:00
|
|
|
onTap: () => _onTap(context),
|
2019-01-31 14:37:25 +08:00
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|