Flutter 颤振-中心按钮
我正在创建一个有5个按钮的UI。其中一个应该居中,其宽度应为屏幕的50%。高度应该是相同的大小(它应该是一个圆)。我尝试了Flutter 颤振-中心按钮,flutter,dart,button,flutter-layout,Flutter,Dart,Button,Flutter Layout,我正在创建一个有5个按钮的UI。其中一个应该居中,其宽度应为屏幕的50%。高度应该是相同的大小(它应该是一个圆)。我尝试了MediaQuery.of(context).size.width,但它不起作用 这是我得到的最接近的结果: 代码是: Widget _playButton() { return FractionallySizedBox( widthFactor: 0.5, heightFactor: 0.5, // I know this is wrong
MediaQuery.of(context).size.width
,但它不起作用
这是我得到的最接近的结果:
代码是:
Widget _playButton() {
return FractionallySizedBox(
widthFactor: 0.5,
heightFactor: 0.5, // I know this is wrong
child: Container(
alignment: new FractionalOffset(0.0, 0.0),
color: Colors.red,
/*decoration: new BoxDecoration(
color: hexToColor('#E8532E'),
shape: BoxShape.circle,
),*/
child: Center(
child: Text(
"PLAY",
style: TextStyle(fontSize: 20.0, color: Colors.white),
),
),
),
);
}
我有此按钮的容器:
Widget build(BuildContext context) {
return new MaterialApp(
debugShowCheckedModeBanner: false,
home: new Scaffold(
body: new Stack(
alignment: AlignmentDirectional.center,
children: <Widget>[_myScreenOptions(), _playButton()],
),
),
);
}
小部件构建(构建上下文){
返回新材料PP(
debugShowCheckedModeBanner:false,
家:新脚手架(
正文:新堆栈(
对齐:对齐方向.center,
子项:[[u myScreenOptions(),[u playButton()],
),
),
);
}
显然,其余的按钮应该是可点击的。如果你想创建一个圆形按钮,你不必担心宽度和高度,只给出一个大小就足够了。。。或者你也可以使用分馏物理数据库,就像你已经做的那样 代码输出:
import 'package:flutter/material.dart';
class SampleCenterButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: double.infinity,
height: double.infinity,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
_myScreenOptions(),
_playButton(),
],
),
),
);
}
_playButton() {
return GestureDetector(
onTap: () {
print("Play game");
},
child: FractionallySizedBox(
widthFactor: 0.5,
child: Container(
// defining one dimension works as well, as Flutter knows how to render a circle.
// width: MediaQuery.of(context).size.width/2,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
child: Center(
child: Text(
"PLAY",
style: TextStyle(fontSize: 30, color: Colors.white),
),
),
),
),
);
}
_myScreenOptions() {
return Column(
children: <Widget>[
buildRow([
buildOption(Color(0xff1D4554), Icons.person, "Teams"),
buildOption(Color(0xff229B8D), Icons.folder_open, "Pets"),
]),
buildRow([
buildOption(Color(0xffE7C16A), Icons.videogame_asset, "Modes"),
buildOption(Color(0xffF2A061), Icons.settings, "Options"),
]),
],
);
}
Widget buildOption(Color bgColor, IconData iconData, String title) {
return Expanded(
child: Container(
color: bgColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
iconData,
size: 80,
),
Text(
title,
style: TextStyle(fontSize: 30),
),
],
),
),
);
}
buildRow(List<Widget> buttons) {
return Expanded(
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: buttons,
),
);
}
}
示例代码:
import 'package:flutter/material.dart';
class SampleCenterButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: double.infinity,
height: double.infinity,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
_myScreenOptions(),
_playButton(),
],
),
),
);
}
_playButton() {
return GestureDetector(
onTap: () {
print("Play game");
},
child: FractionallySizedBox(
widthFactor: 0.5,
child: Container(
// defining one dimension works as well, as Flutter knows how to render a circle.
// width: MediaQuery.of(context).size.width/2,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
child: Center(
child: Text(
"PLAY",
style: TextStyle(fontSize: 30, color: Colors.white),
),
),
),
),
);
}
_myScreenOptions() {
return Column(
children: <Widget>[
buildRow([
buildOption(Color(0xff1D4554), Icons.person, "Teams"),
buildOption(Color(0xff229B8D), Icons.folder_open, "Pets"),
]),
buildRow([
buildOption(Color(0xffE7C16A), Icons.videogame_asset, "Modes"),
buildOption(Color(0xffF2A061), Icons.settings, "Options"),
]),
],
);
}
Widget buildOption(Color bgColor, IconData iconData, String title) {
return Expanded(
child: Container(
color: bgColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
iconData,
size: 80,
),
Text(
title,
style: TextStyle(fontSize: 30),
),
],
),
),
);
}
buildRow(List<Widget> buttons) {
return Expanded(
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: buttons,
),
);
}
}
导入“包装:颤振/材料.省道”;
类SampleCenterButton扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
宽度:double.infinity,
高度:双无限,
子:堆栈(
对齐:对齐.center,
儿童:[
_myScreenOptions(),
_播放按钮(),
],
),
),
);
}
_播放按钮(){
返回手势检测器(
onTap:(){
打印(“玩游戏”);
},
孩子:部分物理盒子(
宽度系数:0.5,
子:容器(
//定义一维同样有效,因为颤振知道如何渲染圆。
//宽度:MediaQuery.of(context).size.width/2,
装饰:盒子装饰(
颜色:颜色,红色,
形状:BoxShape.circle,
),
儿童:中心(
子:文本(
“玩”,
样式:TextStyle(字体大小:30,颜色:Colors.white),
),
),
),
),
);
}
_myScreenOptions(){
返回列(
儿童:[
建筑群([
构建选项(颜色(0xff1D4554),Icons.person,“团队”),
buildOption(颜色(0xff229B8D),Icons.folder_open,“Pets”),
]),
建筑群([
构建选项(颜色(0xffE7C16A),图标。视频游戏资源,“模式”),
buildOption(颜色(0xffF2A061),Icons.settings,“选项”),
]),
],
);
}
小部件构建选项(颜色bgColor、IconData IconData、字符串标题){
扩大回报(
子:容器(
颜色:bgColor,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
图标(
伊康达,
尺码:80,
),
正文(
标题
样式:TextStyle(字体大小:30),
),
],
),
),
);
}
buildRow(列表按钮){
扩大回报(
孩子:排(
mainAxisSize:mainAxisSize.max,
crossAxisAlignment:crossAxisAlignment.start,
儿童:按钮,
),
);
}
}
如果你想创建一个圆形按钮,你不必担心宽度和高度,只给出一个尺寸就足够了。。。或者你也可以使用分馏物理数据库,就像你已经做的那样
代码输出:
import 'package:flutter/material.dart';
class SampleCenterButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: double.infinity,
height: double.infinity,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
_myScreenOptions(),
_playButton(),
],
),
),
);
}
_playButton() {
return GestureDetector(
onTap: () {
print("Play game");
},
child: FractionallySizedBox(
widthFactor: 0.5,
child: Container(
// defining one dimension works as well, as Flutter knows how to render a circle.
// width: MediaQuery.of(context).size.width/2,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
child: Center(
child: Text(
"PLAY",
style: TextStyle(fontSize: 30, color: Colors.white),
),
),
),
),
);
}
_myScreenOptions() {
return Column(
children: <Widget>[
buildRow([
buildOption(Color(0xff1D4554), Icons.person, "Teams"),
buildOption(Color(0xff229B8D), Icons.folder_open, "Pets"),
]),
buildRow([
buildOption(Color(0xffE7C16A), Icons.videogame_asset, "Modes"),
buildOption(Color(0xffF2A061), Icons.settings, "Options"),
]),
],
);
}
Widget buildOption(Color bgColor, IconData iconData, String title) {
return Expanded(
child: Container(
color: bgColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
iconData,
size: 80,
),
Text(
title,
style: TextStyle(fontSize: 30),
),
],
),
),
);
}
buildRow(List<Widget> buttons) {
return Expanded(
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: buttons,
),
);
}
}
示例代码:
import 'package:flutter/material.dart';
class SampleCenterButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: double.infinity,
height: double.infinity,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
_myScreenOptions(),
_playButton(),
],
),
),
);
}
_playButton() {
return GestureDetector(
onTap: () {
print("Play game");
},
child: FractionallySizedBox(
widthFactor: 0.5,
child: Container(
// defining one dimension works as well, as Flutter knows how to render a circle.
// width: MediaQuery.of(context).size.width/2,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
child: Center(
child: Text(
"PLAY",
style: TextStyle(fontSize: 30, color: Colors.white),
),
),
),
),
);
}
_myScreenOptions() {
return Column(
children: <Widget>[
buildRow([
buildOption(Color(0xff1D4554), Icons.person, "Teams"),
buildOption(Color(0xff229B8D), Icons.folder_open, "Pets"),
]),
buildRow([
buildOption(Color(0xffE7C16A), Icons.videogame_asset, "Modes"),
buildOption(Color(0xffF2A061), Icons.settings, "Options"),
]),
],
);
}
Widget buildOption(Color bgColor, IconData iconData, String title) {
return Expanded(
child: Container(
color: bgColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
iconData,
size: 80,
),
Text(
title,
style: TextStyle(fontSize: 30),
),
],
),
),
);
}
buildRow(List<Widget> buttons) {
return Expanded(
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: buttons,
),
);
}
}
导入“包装:颤振/材料.省道”;
类SampleCenterButton扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
宽度:double.infinity,
高度:双无限,
子:堆栈(
对齐:对齐.center,
儿童:[
_myScreenOptions(),
_播放按钮(),
],
),
),
);
}
_播放按钮(){
返回手势检测器(
onTap:(){
打印(“玩游戏”);
},
孩子:部分物理盒子(
宽度系数:0.5,
子:容器(
//定义一维同样有效,因为颤振知道如何渲染圆。
//宽度:MediaQuery.of(context).size.width/2,
装饰:盒子装饰(
颜色:颜色,红色,
形状:BoxShape.circle,
),
儿童:中心(
子:文本(
“玩”,
样式:TextStyle(字体大小:30,颜色:Colors.white),
),
),
),
),
);
}
_myScreenOptions(){
返回列(
儿童:[
建筑群([
构建选项(颜色(0xff1D4554),Icons.person,“团队”),
buildOption(颜色(0xff229B8D),Icons.folder_open,“Pets”),
]),
建筑群([
构建选项(颜色(0xffE7C16A),图标。视频游戏资源,“模式”),
buildOption(颜色(0xffF2A061),Icons.settings,“选项”),
]),
],
);
}
小部件构建选项(颜色bgColor、IconData IconData、字符串标题){
扩大回报(
子:容器(
颜色:bgColor,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
图标(
伊康达,
尺码:80,
),
正文(
标题
样式:TextStyle(字体大小:30),
),
],
),
),
);
}
buildRow(列表按钮){
扩大回报(
孩子:排(
mainAxisSize:mainAxisSize.max,
crossAxisAlignment:crossAxisAlignment.start,
儿童:按钮,
),
);
}
}
问题是,如何使其成为一个圆或如何知道半径?您能分享您想要的任何图像吗?而_myScreenOptions()代码是一个问题,如何使它成为一个圆或如何知道半径?你能分享你想要的任何图像吗?很高兴见到你,丹尼尔。请接受我的邀请