class Test extends StatelessWidget {
const Test({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(height: 10,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconWithTextButton(icon:const Icon(Icons.lock, color: Colors.red,),text: "Lock",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.alarm, color: Colors.amber),text: "Alarm",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.call, color: Colors.green),text: "call",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.wrong_location_sharp, color: Colors.greenAccent),text: "location",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.add, color: Colors.tealAccent),text: "Add",onClicked: (){},),
],
),
const SizedBox(height: 20,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconWithTextButton(icon: const Icon(Icons.lock, color: Colors.red,),text: "Lock",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.alarm, color: Colors.amber),text: "Alarm",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.call, color: Colors.green),text: "call",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.wrong_location_sharp, color: Colors.greenAccent),text: "location",onClicked: (){},),
IconWithTextButton(icon:const Icon(Icons.add, color: Colors.tealAccent),text: "Add",onClicked: (){},),
],
)
],
),
),
);
}
}
class IconWithTextButton extends StatelessWidget {
String text;
Icon icon;
VoidCallback onClicked;
IconWithTextButton({Key? key, required this.text, required this.onClicked, required this.icon}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onClicked,
child: Container(
child: Column(
children: [
icon,
const SizedBox(height: 10,),
Text(text),
],
),
),
);
}
}
You can use Column Widget and populate its children with Icon and TextField. Then Wrap the whole widget with GestureDetector for on pressed functionality. You can also wrap it with InkWell and Material to get splash effect like in other buttons.
You need not wrap with column.
TextButton(
onPressed:(){},
child: Column(
children: [
Icon(Icons.play_arrow,color:Colors.green),
Text(
'Hello',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
I think GirdView Widget the best way to make button like this-
GridView.count(
crossAxisCount: 4,
children: List<Widget>.generate(16, (index) {
return GridTile(
child:GestureDetector(
onTap:(){
print(index.toString());
},
child: Card(
color: Colors.blue.shade200,
child: Column(
children:[ Text('tile $index'),
Icon(Icons.alarm)
])
)),
);
}),
),
With help of index parameter you can pass function according to button type. If this answer helped you.please upvote the answer. Thanks!
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.