【问题标题】:Set text to match column width in flutter设置文本以匹配颤动中的列宽
【发布时间】:2019-01-07 09:50:39
【问题描述】:

我在一列中有一个图像和一个文本。 我希望文本容器扩展到列宽,创建一个文本居中的黑色边框。

这就是我现在得到的。

代码。

List<Container> getMediaItem(List<Media> mediaItems) {
  List<Container> mediaContainers = [];
  for (Media media in mediaItems) {
    mediaContainers.add(
      Container(
        padding: EdgeInsets.only(left: 8, right: 8, bottom: 8),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            media.image,
            Container(
              color: Colors.black,
              padding: EdgeInsets.only(top: 8, bottom: 8),
              child: Text(media.title),
            )
          ],
        ),
      ),
    );
  }
  return mediaContainers;
}

如果你知道如何解决,请分享。

更新: 完整代码(我正在尝试制作嵌套滚动视图以显示媒体项目库,例如 Netflix):

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Live Tree',
      theme: ThemeData(
        brightness: Brightness.dark,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.max,
            children: <Widget>[
              Text("LiveTree"),
              Icon(Icons.check_circle_outline),
            ],
          ),
        ),
        body: HomePage(),
      ),
    );
  }
}

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {

    List<Column> getMediaItem(List<Media> mediaItems) {
      List<Column> mediaContainers = [];
      for (Media media in mediaItems) {
        mediaContainers.add(
          Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              media.image,
              Container(
                color: Colors.black,
                padding: EdgeInsets.only(top: 8, bottom: 8),
                child: Text(media.title),
              )
            ],
          ),
        );
      }
      return mediaContainers;
    }

List<Widget> getCategoryRows(List<CategoryModel> categoryModels) {
      List<Widget> categoryRows = [];
      for (CategoryModel category in categoryModels) {
        final mediaItemsForCategory = getMediaItem(category.media);
        categoryRows.add(
          ListView(scrollDirection: Axis.horizontal,
            children: mediaItemsForCategory,
          ),
        );
      }
      return categoryRows;
    }

    Widget gallerySection = Column(
      mainAxisSize: MainAxisSize.min,
      children: getCategoryRows(mockCategoryDataSet),
    );

    return Scaffold(
      body: ListView(
        children: <Widget>[
              gallerySection,
        ],
      ),
    );
  }

【问题讨论】:

    标签: dart flutter flutter-layout


    【解决方案1】:
    Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        media.image,
        Container(
          color: Colors.black,
          padding: EdgeInsets.only(top: 8, bottom: 8),
          child: Text(media.title),
        ),
      ],
    );
    

    Column(
      children: [
        media.image,
        Container(
          color: Colors.black,
          padding: EdgeInsets.only(top: 8, bottom: 8),
          child: Center(
            child: Text(media.title),
          ),
        ),
      ],
    );
    

    【讨论】:

    • MainAxisAlignment 没有拉伸成员。我错过了什么?
    • 是的,非常确定。文档也没有列出它:docs.flutter.io/flutter/rendering/MainAxisAlignment-class.html
    • 啊,我看到你把它改成了crossAxisAlignment。这是有道理的。
    • 哦,是的,您可能想用SingleChildScrollView 替换ListView 或从gallerySection 中删除列
    • 我按照你的建议做了,把ListView改成singleChildScrollView,就解决了。谢谢
    猜你喜欢
    • 2019-03-17
    • 2022-08-18
    • 2020-12-03
    • 2013-06-22
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多