Flutter 在没有桌子的情况下,将材料对齐到相同的宽度和高度

Flutter 在没有桌子的情况下,将材料对齐到相同的宽度和高度,flutter,Flutter,我为我的应用程序创建了一个材料,其中应该包含一些文本。看起来是这样的: 有时,文本会溢出。有了一个灵活的按钮,它看起来像这样: 我还想让它像桌子一样对齐。如果不与其他对象对齐,它看起来是这样的: 对于所有这些元素,颜色之间的边界应位于同一位置,以便看起来干净 我怎样才能做到这一切?灵活的小部件在放入表时抛出错误的父异常 我的代码: import 'dart:math'; import 'package:flutter/material.dart'; import 'nook_const

我为我的应用程序创建了一个材料,其中应该包含一些文本。看起来是这样的:

有时,文本会溢出。有了一个灵活的按钮,它看起来像这样:

我还想让它像桌子一样对齐。如果不与其他对象对齐,它看起来是这样的:

对于所有这些元素,颜色之间的边界应位于同一位置,以便看起来干净

我怎样才能做到这一切?灵活的小部件在放入表时抛出错误的父异常

我的代码:

import 'dart:math';

import 'package:flutter/material.dart';

import 'nook_constants.dart';

class NookTable extends StatelessWidget {
  final double width;
  final double height;
  final EdgeInsets margin;
  final Widget child;
  final String title;
  final String text;
  final String font;

  NookTable({
    this.width,
    this.height,
    this.margin: nookDefaultMargin,
    this.child,
    this.title,
    this.text,
    this.font
  });

  final cell = (Widget widget) => Padding(
      padding: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
      child: widget,
    );

  @override
  Widget build(BuildContext context) {
    var margin = EdgeInsets.only(
      left: this.margin?.left ?? 0.0,
      right: this.margin?.right ?? 0.0,
      top: this.margin?.top ?? 0.0,
      bottom: max(2, this.margin?.bottom ?? 0.0),
    );

    return Container(
      width: width,
      height: height,
      clipBehavior: Clip.antiAlias,
      margin: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
      decoration: BoxDecoration(
        color: Colors.transparent,
      ),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          NookTitleDetails(text: title, width: width,),
          NookTextDetails(text: text,),
        ],
      ),
    );
  }
}

class NookTextDetails extends StatelessWidget {
  final String text;
  final String font;

  NookTextDetails({
    this.text,
    this.font
  });

  final cell = (Widget widget) => Padding(
      padding: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
      child: widget,
    );

  @override
  Widget build(BuildContext context) {
    return Flexible(
      child: Material(
        clipBehavior: Clip.antiAlias,
        borderRadius: BorderRadius.only(bottomRight: Radius.circular(25), topRight: Radius.circular(25)),
        color: nookBeige,
        child: cell(Text(text))
      ),
    );
  }
}
class NookTitleDetails extends StatelessWidget {
  final String text;
  final String font;
  final double width;

  NookTitleDetails({
    this.text,
    this.font,
    this.width
  });

  final cell = (Widget widget) => Padding(
      padding: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
      child: widget,
    );

  @override
  Widget build(BuildContext context) {
    return Container(
      width: width,
      child: Material(
        clipBehavior: Clip.antiAlias,
        borderRadius: BorderRadius.only(bottomLeft: Radius.circular(25), topLeft: Radius.circular(25)),
        color: nooklightGreen,
        child: cell(Text(text, style: TextStyle(color: nookWhite)))
      ),
    );
  }
}
行(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
弹性:0,
子:容器(
宽度:100,
子项:文本('文本到左边')
)
),
扩大(
弹性:4,
子项:文本(“右侧的文本”)
),
],
),
行(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
弹性:0,
子:容器(
宽度:100,
子项:文本('文本到左边')
)
),
扩大(
弹性:4,
子项:文本(“右侧的文本”)
),
],
),

容器(
装饰:盒子装饰(
颜色:Colors.lime,
边界半径:边界半径。全部(半径。圆形(10))
),
孩子:排(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
灵活的(
弹性:1,
子:堆栈(
儿童:[集装箱(
宽度:100,
填充:边缘设置。全部(5),
子项:Text('Fundort',textAlign:textAlign.center,)],
)),
扩大(
弹性:4,
子:容器(
装饰:盒子装饰(
颜色:颜色。浅绿色,
边界半径:边界半径。水平(右:半径。圆形(10))
),
填充:边缘设置。全部(10),
子项:文本('使用Facebooks登录使用Facebook登录',
样式:TextStyle(字体大小:18,颜色:Colors.white)),
),
)
]),
),

容器(
装饰:盒子装饰(
颜色:Colors.lime,
边界半径:边界半径。全部(半径。圆形(10))
),
孩子:排(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
灵活的(
弹性:1,
子:堆栈(
儿童:[集装箱(
宽度:100,
填充:边缘设置。全部(5),
子项:Text('Fundort',textAlign:textAlign.center,)],
)),
扩大(
弹性:4,
子:容器(
装饰:盒子装饰(
颜色:颜色。浅绿色,
边界半径:边界半径。水平(右:半径。圆形(10))
),
填充:边缘设置。全部(10),
子项:文本('使用Facebooks登录使用Facebook登录',
样式:TextStyle(字体大小:18,颜色:Colors.white)),
),
)
]),
),

使用行而不是表。然后使用相应的flex值的flex和expandable。材料已经排好了。Expanded only Horizontally然后将列也放在行内,并可在列中展开。然后它将垂直工作。你必须放置一个特定的宽度来保持边界在相同的位置。假设文本位于左侧(Fundort),使用容器小部件包装并放置特定宽度,然后将整个容器包装在灵活的小部件内。右边的文本应该在一个可扩展的小部件中。我将左边的一个包装到一个容器中,并放入一个灵活的容器中。将正确的一个转换为扩展的。它看起来几乎完全像我的姿势行的第二张图片,而不是一张桌子。然后使用相应的flex值的flex和expandable。材料已经排好了。Expanded only Horizontally然后将列也放在行内,并可在列中展开。然后它将垂直工作。你必须放置一个特定的宽度来保持边界在相同的位置。假设文本位于左侧(Fundort),使用容器小部件包装并放置特定宽度,然后将整个容器包装在灵活的小部件内。右边的文本应该在可扩展的ABL中
               Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    Flexible(
                      flex: 0,
                      child: Container(
                                    width:100,
                                    child:Text('Text to the left')
                                     )
                                  ),
                    Expanded(
                      flex: 4,
                     child:Text('Text to the right')


                    ),
                  ],
                ),
Container(

              decoration: BoxDecoration(
                  color: Colors.lime,
                  borderRadius: BorderRadius.all(Radius.circular(10))

              ),

              child: Row(
                  mainAxisSize: MainAxisSize.min,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Flexible(
                        flex: 1,
                        child: Stack(

                          children: <Widget>[Container(
                            width: 100,


                              padding: EdgeInsets.all(5),
                              child: Text('Fundort',textAlign: TextAlign.center,))],
                        )),
                    Expanded(
                      flex: 4,
                      child: Container(
                        decoration: BoxDecoration(
                            color: Colors.lightGreen,
                            borderRadius: BorderRadius.horizontal(right:Radius.circular(10))

                        ),

                        padding: EdgeInsets.all(10),
                        child: Text('Sign in with FacebookSign in with Facebook',
                            style: TextStyle(fontSize: 18, color: Colors.white)),
                      ),
                    )
                  ]),
            ),