You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.6 KiB
136 lines
3.6 KiB
/*
|
|
* ====================================================
|
|
* package : widgets
|
|
* author : Created by nansi.
|
|
* time : 2019/5/15 3:33 PM
|
|
* remark :
|
|
* ====================================================
|
|
*/
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:recook/constants/header.dart';
|
|
|
|
class TextButton extends StatefulWidget {
|
|
final String title;
|
|
final double width;
|
|
final double height;
|
|
final GestureTapCallback onTap;
|
|
final EdgeInsetsGeometry margin;
|
|
final EdgeInsetsGeometry padding;
|
|
final Color textColor;
|
|
final Color highlightTextColor;
|
|
final Color backgroundColor;
|
|
final Color highlightBackgroundColor;
|
|
final Border border;
|
|
final BorderRadius radius;
|
|
final bool enable;
|
|
final Color unableTextColor;
|
|
final Color unableBackgroundColor;
|
|
final double font;
|
|
final FontWeight fontWeight;
|
|
|
|
TextButton(
|
|
{this.title,
|
|
this.onTap,
|
|
this.margin = const EdgeInsets.all(0),
|
|
this.padding = const EdgeInsets.only(left: 8, right: 8),
|
|
this.textColor = Colors.black,
|
|
this.highlightTextColor,
|
|
this.backgroundColor = Colors.white,
|
|
this.highlightBackgroundColor,
|
|
this.unableTextColor,
|
|
this.unableBackgroundColor,
|
|
this.border = const Border(),
|
|
this.radius,
|
|
this.enable = true,
|
|
this.width,
|
|
this.height,
|
|
this.font,
|
|
this.fontWeight})
|
|
: assert(!TextUtils.isEmpty(title), "title不能为空");
|
|
|
|
@override
|
|
State<StatefulWidget> createState() {
|
|
return _TextButtonState();
|
|
}
|
|
}
|
|
|
|
class _TextButtonState extends State<TextButton> {
|
|
Color _textColor;
|
|
Color _backgroundColor;
|
|
double _opacity = 1;
|
|
|
|
@override
|
|
void initState() {
|
|
_backgroundColor = widget.backgroundColor;
|
|
_textColor = widget.textColor;
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GestureDetector(
|
|
onTapUp: !_enable()
|
|
? null
|
|
: (detail) {
|
|
setState(() {
|
|
_backgroundColor = widget.backgroundColor;
|
|
_textColor = widget.textColor;
|
|
_opacity = 1;
|
|
});
|
|
},
|
|
onTapDown: !_enable()
|
|
? null
|
|
: (detail) {
|
|
setState(() {
|
|
_backgroundColor =
|
|
widget.highlightBackgroundColor ?? _backgroundColor;
|
|
_textColor = widget.highlightTextColor ?? _textColor;
|
|
_opacity = 0.8;
|
|
});
|
|
},
|
|
onTapCancel: !_enable()
|
|
? null
|
|
: () {
|
|
setState(() {
|
|
_backgroundColor = widget.backgroundColor;
|
|
_textColor = widget.textColor;
|
|
_opacity = 1;
|
|
});
|
|
},
|
|
onTap: widget.enable ? widget.onTap : null,
|
|
child: Opacity(
|
|
opacity: _opacity,
|
|
child: Container(
|
|
width: widget.width,
|
|
height: widget.height,
|
|
margin: widget.margin,
|
|
padding: widget.padding,
|
|
decoration: BoxDecoration(
|
|
color: !_enable()
|
|
? widget.unableBackgroundColor ?? _backgroundColor
|
|
: _backgroundColor,
|
|
borderRadius: widget.radius,
|
|
border: widget.border),
|
|
child: Center(
|
|
child: Text(
|
|
widget.title,
|
|
style: TextStyle(
|
|
fontSize: widget.font,
|
|
fontWeight: widget.fontWeight,
|
|
color: !_enable()
|
|
? widget.unableTextColor ?? Colors.white
|
|
: _textColor),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
_enable() {
|
|
return widget.enable && widget.onTap != null;
|
|
}
|
|
}
|