Flutter - Row&Column

Flutter - Row&Column 首页 / Flutter入门教程 / Flutter - Row&Column

在前面的部分中,无涯教程学习了如何创建一个简单的Flutter应用程序及其对小部件的基本样式。现在,无涯教程将学习如何在屏幕上的行和列中排列小部件。行(rows)和列(columns)不是单个窗口小部件;它们是两个不同的小部件,分别是行和列。在这里,无涯教程将把这两个小部件集成在一起,因为它们具有相似的属性,可帮助无涯教程高效,快速地理解它们。

    Row行部件

    此小部件在屏幕上水平排列,如果子窗口小部件需要填充(fill)可用的水平空间,则必须将子窗口小部件包装在扩展窗口小部件中。

    无涯教程可以使用属性crossAxisAlignment和mainAxisAlignment根据选择来控制行小部件如何对齐。

    链接:https://www.learnfk.comhttps://www.learnfk.com/flutter/flutter-row-and-column.html

    来源:LearnFk无涯教程网

    Flutter Row and 柱子

    Note: Flutter行小部件还具有其他一些属性,例如mainAxisSize,textDirection,verticalDirection等。在这里,无涯教程将仅讨论mainAxisAlignment和crossAxisAlignment属性。

    无涯教程可以在以下属性的帮助下将行的子节点对齐:

    • start                  -   它将子部件放置在主轴的前端。
    • end                    -   它将子部件放置在主轴的末端。
    • center               -   它将子部件放置在主轴的中间。
    • spacebeen       -   它将在子部件之间均匀地放置自由空间。
    • spacearound  -   它将在第一个和最后一个子小部件均匀地分配之间的一半空间。
    • spaceevenly    -   它将在第一个和最后一个子小部件平均分配空闲空间。

    让无涯教程借助一个示例来理解它,在该示例中,无涯教程将对齐内容,以使子部件之间的均匀分配空间:

    import 'package:flutter/material.dart';
    
    void main() { runApp(MyApp()); }
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: MyHomePage()
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("Flutter Row Example"),
          ),
          body: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children:<Widget>[
                Container(
                  margin: EdgeInsets.all(12.0),
                  padding: EdgeInsets.all(8.0),
                  decoration:BoxDecoration(
                      borderRadius:BorderRadius.circular(8),
                      color:Colors.green
                  ),
                  child: Text("React.js",style: TextStyle(color:Colors.yellowAccent,fontSize:25),),
                ),
                Container(
                  margin: EdgeInsets.all(15.0),
                  padding: EdgeInsets.all(8.0),
                  decoration:BoxDecoration(
                      borderRadius:BorderRadius.circular(8),
                      color:Colors.green
                  ),
                  child: Text("Flutter",style: TextStyle(color:Colors.yellowAccent,fontSize:25),),
                ),
                Container(
                  margin: EdgeInsets.all(12.0),
                  padding: EdgeInsets.all(8.0),
                  decoration:BoxDecoration(
                      borderRadius:BorderRadius.circular(8),
                      color:Colors.green
                  ),
                  child: Text("MySQL",style: TextStyle(color:Colors.yellowAccent,fontSize:25),),
                )
              ]
          ),
        );
      }
    }

    当无涯教程运行此应用时,无涯教程应该将UI作为下面的屏幕截图。

    Flutter Row and 柱子

    Column列部件

    此小部件在屏幕上沿垂直方向排列其子部件。如果子窗口小部件需要填充可用的垂直空间,则必须将子窗口小部件包装在Expanded widget中。

    无涯教程可以控制列窗口小部件如何使用属性mainaxisalignment和scrossaxisalign对齐其子部件。列的cross-axis将运行水平方向,而main axis将运行垂直方向

    Flutter Row and 柱子

    让无涯教程借助一个示例来理解它,在该示例中,无涯教程将对齐内容,以使列中的子部件之间平均分配空间:

    import 'package:flutter/material.dart';
    
    void main() { runApp(MyApp()); }
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: MyHomePage()
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("Flutter Column Example"),
          ),
          body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children:<Widget>[
                Container(
                  margin: EdgeInsets.all(20.0),
                  padding: EdgeInsets.all(12.0),
                  decoration:BoxDecoration(
                      borderRadius:BorderRadius.circular(8),
                      color:Colors.red
                  ),
                  child: Text("React.js",style: TextStyle(color:Colors.yellowAccent,fontSize:20),),
                ),
                Container(
                  margin: EdgeInsets.all(20.0),
                  padding: EdgeInsets.all(12.0),
                  decoration:BoxDecoration(
                      borderRadius:BorderRadius.circular(8),
                      color:Colors.red
                  ),
                  child: Text("Flutter",style: TextStyle(color:Colors.yellowAccent,fontSize:20),),
                ),
                Container(
                  margin: EdgeInsets.all(20.0),
                  padding: EdgeInsets.all(12.0),
                  decoration:BoxDecoration(
                      borderRadius:BorderRadius.circular(8),
                      color:Colors.red
                  ),
                  child: Text("MySQL",style: TextStyle(color:Colors.yellowAccent,fontSize:20),),
                )
              ]
          ),
        );
      }
    }

    当无涯教程运行此应用时,无涯教程应该将UI作为下面的屏幕截图。

    Flutter Row and 柱子

    Flutter还允许开发人员使用crossAxisAlignment和mainAxisAlignment的组合将子小部件与行和列对齐。在该示例中,无涯教程将mainAxisAlignment设置为MainAxisAlignment.spaceAround,而crossAxisAlignment是CrossAxisAlignment.stretch。它将使列的高度等于主体的高度。

    Flutter Row and 柱子

      祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

      技术教程推荐

      深入拆解Java虚拟机 -〔郑雨迪〕

      Web协议详解与抓包实战 -〔陶辉〕

      零基础学Java -〔臧萌〕

      TensorFlow 2项目进阶实战 -〔彭靖田〕

      Web安全攻防实战 -〔王昊天〕

      体验设计案例课 -〔炒炒〕

      说透芯片 -〔邵巍〕

      超级访谈:对话张雪峰 -〔张雪峰〕

      手把手教你落地DDD -〔钟敬〕

      好记忆不如烂笔头。留下您的足迹吧 :)