【问题标题】:Can't align children of Rows by using the Align Widget and alignment property无法使用对齐小部件和对齐属性对齐行的子级
【发布时间】:2021-03-23 22:48:50
【问题描述】:

我在 Flutter 中使用 Alignments 时遇到了一些困难。我正在尝试创建一张一次性卡片。 我不能将图像居中并将图标放在右上角。


小部件说明

CardColumns 组成,每个Column 都有一个Row

x 图标是第一个 Row 的第一个孩子

我用Align Widget 包裹了图标,但它不会向右移动:

Row(children: [
     Align( 
     alignment: Alignment.topRight, 
     child: Icon(Icons.cancel),)
   ]
)

对于猫头鹰图像,我将其包裹在 Container 中,并使用 alignment 属性放置在 Center 中:

Row(children: [
   Container(
      width: 100,
      height: 150,
      alignment: Alignment.center,
      child: Image(
         alignment: Alignment.center,
         image: NetworkImage('https://flutter.github.io/assets-for-api-docs/assets/widgets/owl.jpg'),
            )
       ),
  ]),

似乎无论我在布局上尝试什么,它都不会移动 Card 内的对象


这是Card 小部件:

class CustomCard extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Card(
        child: Column(
      mainAxisSize: MainAxisSize.min,
      children: [
        Row(children: [
          Align(
            alignment: Alignment.topRight,
            child: Icon(Icons.cancel) ,
          )
         ]
        ),
        SizedBox(
          height: 8,
        ),
        Row(children: [
          Container(
              width: 100,
              height: 150,
              alignment: Alignment.center,
              child: Image(
                alignment: Alignment.center,
                image: NetworkImage(
                    'https://flutter.github.io/assets-for-api-docs/assets/widgets/owl.jpg'),
              ))
        ]),
      ],
    ));
  }
}

无论我尝试什么,我都无法正确放置它们,我是否完全错过了对齐小部件和对齐属性的概念?

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    您需要做的就是将 MainAxisAlignment 设置为 Row 的中心。请运行以下代码。

    import 'package:flutter/material.dart';
    
    final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
          debugShowCheckedModeBanner: false,
          home: Scaffold(
            body: CustomCard(),
          ),
        );
      }
    }
    
    class CustomCard extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Card(
            child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            Align(
              alignment: Alignment.topRight,
              child: Icon(Icons.cancel),
            ),
            SizedBox(
              height: 8,
            ),
            Row(mainAxisAlignment: MainAxisAlignment.center, children: [
              Container(
                  width: 100,
                  height: 150,
                  child: Image(
                    image: NetworkImage(
                        'https://flutter.github.io/assets-for-api-docs/assets/widgets/owl.jpg'),
                  ))
            ]),
          ],
        ));
      }
    }
    

    【讨论】:

    • 谢谢你的回答,它困扰了我很长时间。您还从Icon 中删除了Row 元素,这是我没想到的。您的示例完美运行。谢谢!
    猜你喜欢
    • 2020-10-08
    • 2021-05-02
    • 2012-07-23
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    相关资源
    最近更新 更多