【问题标题】:Center a Widget on a StreamBuilder在 StreamBuilder 上将小部件居中
【发布时间】:2019-11-14 09:55:31
【问题描述】:

我有一个 streamBuilder,但想在其中居中放置一个文本小部件,我尝试使用中心小部件,但它什么也没做,因为文本小部件不占用整个垂直空间。

看起来像这样:

StreamBuilder<List<Dtc>>(
      key: ValueKey(1),
      stream: bloc.dtcs,
      builder: (context, snapshot) {
        if (snapshot?.hasData ?? false) {
          // dtcs list is empty
          if (snapshot.data.isEmpty) {
            return Text(
              "My text to be centered"
            );
          } else {
            return Row(
              children: <Widget>[
                Expanded(
                  child: Container(
                    height: MediaQuery.of(context).size.height - 230.0,
                    child: ListView.builder(
                      padding: const EdgeInsets.all(0),
                      itemBuilder: (BuildContext context, int index) {
                        if (index >= snapshot.data.length) return null;
                        return AWidget();
                      },
                    ),
                  ),
                ),
              ],
            );
          }
        } else if (snapshot?.hasError ?? true) {
          return errorIcon;
        } else {
          return loadingIcon;
        }
      },
    );

是否有一个小部件可以让我将文本小部件垂直居中Text("My text to be centered");

【问题讨论】:

  • 你能发布小部件的整个代码吗?这可能有助于了解父母如何包装您的 StreamBuilder

标签: flutter dart flutter-layout


【解决方案1】:

您可以尝试使用 Row:

                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    Text("center text")
                  ],
                ),

【讨论】:

  • 它已经水平居中,我需要这个垂直居中
  • 已经试过了,问题是行没有占满整个空间。我已经在问题上提到了这一点
  • @key 尝试将MainAxisSize 设置为最大值。
  • 这什么都不做,如果小部件没有占用整个空间,我已经使用了 Wdiget 的最大空间。展开也无济于事。
【解决方案2】:

使小部件居中的最简洁方法(在我看来)是使用 Center 小部件。

          Container(child: 
                   Center(child: Text("My text to be centered"),)
          ),

您可以在此处找到有关 Center 小部件的更多详细信息:https://api.flutter.dev/flutter/widgets/Center-class.html

【讨论】:

  • 正如我在问题中提到的,我已经尝试过了
  • 由于容器在那个阶段没有大小,它不会工作,我还是试了一下,但没有成功。
【解决方案3】:

所以我要做的就是删除我放在ListView.builder 上的Expanded 并用它包裹整个StreamBuilder。并且成功了。

类似这样的:

Row(
      children: <Widget>[
        Expanded(
          child: StreamBuilder<List<Dtc>>(
...

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2021-11-11
    相关资源
    最近更新 更多