Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振-中心按钮_Flutter_Dart_Button_Flutter Layout - Fatal编程技术网

Flutter 颤振-中心按钮

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

我正在创建一个有5个按钮的UI。其中一个应该居中,其宽度应为屏幕的50%。高度应该是相同的大小(它应该是一个圆)。我尝试了
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()代码是一个问题,如何使它成为一个圆或如何知道半径?你能分享你想要的任何图像吗?很高兴见到你,丹尼尔。请接受我的邀请