问题
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