Flutter循序渐进=>程序结构

聊个一毛钱的

焦二喜欢问别人怎么发财,当别人为他指路,比如学技术或者开公司啥的,他却说:“我想知道的是怎么发财,不是学技术或者开公司这种。”我不想做焦二,还知道Flutter就是Dart写的,还是踏踏实实学Dart吧,虽然深爱Python的我痛恨括号,看在Flutter面子上,姑且忍了。

用组件(widget)搭建用户界面,跟搭积木一样,组件状态改变,就重新build显示,runApp把Center当成组件树的根,Center还有个child,Text组件。所有的组件都有两个亚当和夏娃一样的祖宗,StatelessWidgetStatefulWidget组件的功能就是build(),然后渲染成用户界面。

组件出来站队了!Text搞文字的;行和列Row, Column, Stack是叠罗汉的;Container,容器,就是用来装东西的。

结构图

有了这个结构图,程序的可读性就好多了。总共两大家族MyAppBar和MyScaffold。

MyAppBar组件创造了一个容器Container。容器里面有三个小孩children,这三个小孩children站成一排Row。老大IconButton(菜单),老二title组件(安远投资),还是expanded模式,意思是那排空余的位置都给他;老三搜索。

MyScaffold组件让他的小孩站成一列Column。老大居然是第一家族的MyAppBar,用Text组件给它取名字,(为啥这样?现在还不懂)也让Center组件尽量膨胀。

最后,main程序有个小孩MaterialApp,指定主页为MyScaffold,SafeArea的官方解释是创建一个屏蔽操作系统界面的组件。

效果图

源代码(来源于Flutter官网)

学官方文档是最好的,毕竟Flutter就是他们做的,他们最有发言权!

import 'package:flutter/material.dart';

class MyAppBar extends StatelessWidget {
  const MyAppBar({required this.title, super.key});

  // Fields in a Widget subclass are always marked "final".

  final Widget title;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 56, // in logical pixels
      padding: const EdgeInsets.symmetric(horizontal: 8),
      decoration: const BoxDecoration(color: Color.fromARGB(255, 245, 172, 15)),
      // Row is a horizontal, linear layout.
      child: Row(
        children: [
          const IconButton(
            icon: Icon(Icons.menu),
            tooltip: 'Navigation menu',
            onPressed: null, // null disables the button
          ),
          // Expanded expands its child
          // to fill the available space.
          Expanded(
            child: title,
          ),
          const IconButton(
            icon: Icon(Icons.search),
            tooltip: 'Search',
            onPressed: null,
          ),
        ],
      ),
    );
  }
}

class MyScaffold extends StatelessWidget {
  const MyScaffold({super.key});

  @override
  Widget build(BuildContext context) {
    // Material is a conceptual piece
    // of paper on which the UI appears.
    return Material(
      // Column is a vertical, linear layout.
      child: Column(
        children: [
          MyAppBar(
            title: Text(
              '安远投资',
              style: Theme.of(context) //
                  .primaryTextTheme
                  .titleLarge,
            ),
          ),
          const Expanded(
            child: Center(
              child: Text(
                '主投纯债基金,纳斯达克100和标普500指数基金!',
                style: TextStyle(color: Colors.red, fontSize: 20),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

void main() {
  runApp(
    const MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'My app', // used by the OS task switcher
      home: SafeArea(
        child: MyScaffold(),
      ),
    ),
  );
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值