Flutter + FastAPI 30天速成计划自用并实践-第9天

Day 9 详细学习计划:Dart 基础与 Flutter 布局

学习目标

  • 学习 Dart 语言基础知识
  • 理解 Flutter 布局系统
  • 创建上下左右布局结构,大概就是下面的效果

知识点详解

1. Dart 语言基础

核心概念:

  • 变量声明(var, final, const)
  • 数据类型(int, double, String, bool, List, Map)
  • 函数定义和调用
  • 类和对象

2. Flutter 布局系统

核心 Widgets:

  • Container:多功能容器
  • Row:水平排列子元素
  • Column:垂直排列子元素
  • ListView:可滚动列表
  • Expanded 和 Flexible:弹性布局

3. Widget 树概念

重要性:

  • Flutter UI 由 Widget 构成
  • Widget 是不可变的
  • 通过组合构建复杂界面
  • 父 Widget 控制子 Widget 的布局和行为

练习代码

1. Dart 基础语法

变量和类型
dart 复制代码
// 变量声明
var name = '张三';
String title = 'Flutter 教程';
int count = 10;
double price = 99.99;
bool isPublished = true;

// Final 和 Const
final DateTime now = DateTime.now();  // 运行时常量
const double pi = 3.14159;            // 编译时常量

// 集合类型
List<String> topics = ['环境搭建', '数据模型', '数据库'];
Map<String, dynamic> article = {
  'title': 'Dart 基础',
  'author': '教程作者',
  'views': 1000,
};
函数定义
dart 复制代码
// 基本函数
int add(int a, int b) {
  return a + b;
}

// 箭头函数(简洁语法)
int multiply(int a, int b) => a * b;

// 可选参数
String greet(String name, {String? title}) {
  if (title != null) {
    return 'Hello, $title $name!';
  }
  return 'Hello, $name!';
}

// 默认参数值
void printInfo(String name, {int age = 18}) {
  print('$name is $age years old');
}
类和对象
dart 复制代码
class Article {
  String title;
  String content;
  String? author;
  bool published;
  
  // 构造函数
  Article(this.title, this.content, {this.author, this.published = false});
  
  // 命名构造函数
  Article.fromJson(Map<String, dynamic> json)
      : title = json['title'],
        content = json['content'],
        author = json['author'],
        published = json['published'] ?? false;
  
  // 方法
  void publish() {
    published = true;
    print('$title 已发布');
  }
  
  // Getter 和 Setter
  String get summary => content.substring(0, 50) + '...';
  
  // toString 方法
  @override
  String toString() {
    return 'Article(title: $title, author: $author, published: $published)';
  }
}

2. Flutter 创建一个简单的上下左右布局实践

使用命令创建一个flutter的web项目:

bash 复制代码
flutter create --platforms web myflutter

然后运行项目:

bash 复制代码
cd myflutter
flutter run
// 或者使用VSCode运行,在main方法上面有run字样点击就可以运行

会得到一个计数器项目,我们来修改一下:

修改后的 main.dart(左右布局),修改后保存看效果
dart 复制代码
import 'package:flutter/material.dart';

// 程序入口点,main函数
void main() {
  // runApp是Flutter框架提供的顶层函数,用于启动应用程序
  runApp(
    // MaterialApp是Material Design风格的应用程序根组件
    MaterialApp(
      // 设置应用的标题
      title: "这是标题",
      // 设置应用的主题,这里设置了scaffold的背景色为红色
      theme: ThemeData(scaffoldBackgroundColor: Colors.red),
      // home属性指定应用默认显示的页面,这里是一个Scaffold组件
      home: Scaffold(
        // appBar属性定义应用栏(顶部导航栏)
        appBar: AppBar(
          // title属性设置应用栏的标题内容,使用Center居中显示文本
          title: Center(child: Text("这是标题")),
          // 添加颜色背景,设置应用栏背景色为黄色
          backgroundColor: Colors.yellow,
        ),
        // body属性定义页面的主要内容区域
        body: Row(
          // Row组件用于水平排列子组件
          children: [
            // 下面体现左侧导航栏右边的内容使用Expanded
            // Expanded组件用于在Row、Column或Flex中扩展子组件以填充可用空间
            Expanded(
              // flex属性定义了此组件相对于其他Expanded组件的弹性系数,这里占1份空间
              flex: 1,
              // Container是一个方便的容器组件,可以设置大小、颜色、边距等属性
              child: Container(
                // 设置容器背景色为绿色
                color: Colors.green,
                // ListView是一个可滚动的列表组件
                child: ListView(
                  // 子组件列表
                  children: [
                    // ListTile是Material Design中的列表项组件
                    ListTile(
                      // leading属性设置列表项前面的图标
                      leading: const Icon(Icons.book),
                      // title属性设置列表项的标题文本
                      title: const Text('环境搭建'),
                      // onTap属性定义点击列表项时的回调函数
                      onTap: () {
                        // TODO: 导航到环境搭建教程
                      },
                    ),
                    ListTile(
                      // leading属性设置列表项前面的图标
                      leading: const Icon(Icons.data_object),
                      // title属性设置列表项的标题文本
                      title: Text("左侧导航2"),
                    ),
                    ListTile(
                      // leading属性设置列表项前面的图标
                      leading: const Icon(Icons.storage),
                      // title属性设置列表项的标题文本
                      title: Text("左侧导航3"),
                    ),
                    ListTile(
                      // leading属性设置列表项前面的图标
                      leading: const Icon(Icons.ac_unit_sharp),
                      // title属性设置列表项的标题文本
                      title: Text("左侧导航4"),
                    ),
                    ListTile(
                      // leading属性设置列表项前面的图标
                      leading: const Icon(Icons.access_alarm_outlined),
                      // title属性设置列表项的标题文本
                      title: Text("左侧导航5"),
                    ),
                  ],
                ),
              ),
            ),
            // 另一个Expanded组件,flex值为3,表示占据3份空间(总共4份空间,比例为1:3)
            Expanded(
              flex: 3,
              // Container是一个方便的容器组件
              child: Container(
                // 设置容器背景色为蓝色
                color: Colors.blue,
                // Center组件将其子组件居中显示
                child: Center(child: Text("右侧内容")),
              ),
            ),
          ],
        ),
        // bottomNavigationBar属性定义底部导航栏
        bottomNavigationBar: Container(
          // 设置容器高度为80像素
          height: 80,
          // Center组件将其子组件居中显示
          child: Center(child: Text("这是底部导航")),
        ),
      ),
    ),
  );
}

3. 常用布局 Widgets

Container 示例
dart 复制代码
Container(
  width: 100,
  height: 100,
  margin: const EdgeInsets.all(10),
  padding: const EdgeInsets.all(8),
  decoration: BoxDecoration(
    color: Colors.blue,
    borderRadius: BorderRadius.circular(8),
  ),
  child: const Text('容器示例'),
)
Row 和 Column 示例
dart 复制代码
// 水平排列
Row(
  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  children: [
    Icon(Icons.home),
    Icon(Icons.search),
    Icon(Icons.person),
  ],
)

// 垂直排列
Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    Text('第一行'),
    Text('第二行'),
    Text('第三行'),
  ],
)
相关推荐
AiFlutter4 小时前
二、页面布局(10):瀑布流布局
flutter·低代码·低代码平台·aiflutter·aiflutter 低代码·flutter低代码开发·低代码app开发
kirk_wang8 小时前
Flutter三方库在OHOS平台适配:firebase_messaging消息推送集成实践
flutter·移动开发·跨平台·arkts·鸿蒙
越甲八千8 小时前
简单fastapi和压测实例
adb·fastapi
AiFlutter9 小时前
二、页面布局(09):流式布局
flutter·低代码·低代码平台·aiflutter·aiflutter低代码·低代码平台介绍
逻极10 小时前
FastAPI + SQLAlchemy 现代API项目实战:从零到上手的Python MySQL开发指南
python·mysql·fastapi·异步·sqlalchemy
仅此,11 小时前
Java请求进入Python FastAPI 后,请求体为空,参数不合法
java·spring boot·python·组合模式·fastapi
2501_9444460012 小时前
Flutter&OpenHarmony状态管理方案详解
开发语言·javascript·flutter
PWRJOY12 小时前
解决Flutter构建安卓项目卡在Flutter: Running Gradle task ‘assembleDebug‘...:替换国内 Maven 镜像
android·flutter·maven
名字被你们想完了15 小时前
Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(十)
前端·flutter
消失的旧时光-194315 小时前
Flutter 网络层设计最佳实践(sealed + Result + Future)
flutter