首页 > 解决方案 > Cupetino 导航栏中间标题未显示

问题描述

您好,我正在尝试为 cupertinonavigationbar 中间小部件的应用栏提供标题,但文本未显示。我尝试更改中间标题文本颜色仍未显示。我在这里缺少什么?

static buildAppBar(
      {bool isIOS,
      Function onPressedShoppingSearch,
      String heroTag,
      String middleTitle}) {
    return (isIOS == true)
        ? CupertinoNavigationBar(
            middle: (middleTitle != null)
                ? Text(
                    middleTitle,
                    style: TextStyle(color: Colors.grey, fontSize: 18),
                  )
                : Text(''),
            transitionBetweenRoutes: false,
            automaticallyImplyMiddle: true,
            automaticallyImplyLeading: true,
            heroTag: heroTag,
            backgroundColor: Colors.white,
            trailing: Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                GestureDetector(
                  child: Icon(
                    FrinoIcons.f_search_classic,
                    color: Colors.red,
                    size: 23,
                  ),
                  onTap: onPressedShoppingSearch,
                ),
                const SizedBox(width: 6),
                const Icon(
                  FrinoIcons.f_cart,
                  color: Colors.red,
                  size: 23,
                ),
              ],
            ),

      )

标签: flutter

解决方案


我刚刚遇到了类似的问题,发现middle小部件没有显示,因为我的trailing小部件被认为(不知何故)对于导航栏的该部分来说太大了。

由于需要较小尺寸的小部件,有些人似乎遇到了类似的问题:leadinghttps : //github.com/flutter/flutter/issues/36689trailing

这是我用来让它工作的代码(旧的和新的)。

原始代码(不起作用):

@override
Widget build(BuildContext context) {
  return CupertinoPageScaffold(
    navigationBar: CupertinoNavigationBar(
      leading: Container(),
      middle: Text(
        'Filters'.tr,
      ),
      trailing: _closeButton(),
    ),
    backgroundColor: Colors.white,
    child: SafeArea(
      child: Stack(
        children: [_closeButton()],
      ),
    ),
  );
}

Widget _closeButton() {
  return Align(
    alignment: Alignment.topRight,
    child: Padding(
      padding: EdgeInsets.fromLTRB(0, 0, 0, 0),
      child: Container(
        height: 32,
        width: 32,
        child: TextButton(
          onPressed: () => _closeView(),
          child: Image(
            color: Colors.black,
            image: AssetImage(SignalAsset.imagePath('icon_cross')),
          )),
      ),
    ),
  );
}

新代码(有效):

@override
Widget build(BuildContext context) {
  return CupertinoPageScaffold(
    navigationBar: CupertinoNavigationBar(
      leading: Container(),
      middle: Text(
        'Filters'.tr,
      ),
      trailing: GestureDetector(
        child: Image(
          color: Colors.black,
          image: AssetImage(SignalAsset.imagePath('icon_cross')),
        ),
        onTap: () => _closeView(),
      ),
    ),
    backgroundColor: Colors.white,
    child: SafeArea(
      child: Stack(
        children: [_closeButton()],
      ),
    ),
  );
}

推荐阅读