问题
I am aware that I can use IconButton in the actions of the AppBar in Flutter. But instead of the icon, I'd like the user to see the words 'Save' or 'Back' or 'Cancel' and click on them in the AppBar. How can I achieve this? Here is part of my code that shows the AppBar. Instead of the save Icon, I'd like to use 'Save'
return Scaffold(
appBar: AppBar(
leading: IconButton(icon: Icon(Icons.arrow_back),
tooltip: "Cancel and Return to List",
onPressed: () {
Navigator.pop(context, true);
},
),
automaticallyImplyLeading: false,
title: Text(title),
actions: <Widget>[
IconButton(
icon: Icon(Icons.save),
tooltip: "Save Todo and Retrun to List",
onPressed: () {
save();
},
)
],
),//AppBar
回答1:
You can use FlatButton
within an AppBar
's actions
list:
appBar: AppBar(
title: Text("Test Screen"),
actions: <Widget>[
FlatButton(
textColor: Colors.white,
onPressed: () {},
child: Text("Save"),
shape: CircleBorder(side: BorderSide(color: Colors.transparent)),
),
],
),
onPressed
must be defined or the button will appear disabled.
Also note that by default the shape of the button will create a filled rectangle for the InkWell effect. By setting the shape
property to CircleBorder
, we get a nicer effect for the pressed state.
E.g.
Not pressed:
Pressed:
回答2:
You can wrap your Text
in a GestureDetector
and use its onTap
property to handle your events.
Example
actions: <Widget>[
GestureDetector(child: Text("Save"), onTap: save)
],
回答3:
If you have short string then you can pass Text
widget in place of Icon
into the IconButton.icon
argument:
IconButton(
icon: Text(
"Save",
style: Theme.of(context).textTheme.button.apply(
color: Theme.of(context).appBarTheme.actionsIconTheme.color,
),
),
onPressed: _save,
),
Unfortunately, it will not work for a longer text like Cancel.
来源:https://stackoverflow.com/questions/52713583/how-can-i-have-clickable-text-in-the-appbar-in-flutter