Skip to content

附录:Flutter 核心知识点汇总 ​

1. 核心组件速记(按使用频率排序,附示例) ​

基础组件 ​

Text(文本组件) ​

dart
Text(
  'Hello Flutter',
  style: TextStyle(
    fontSize: 18,
    color: Colors.blue,
    fontWeight: FontWeight.bold,
  ),
  textAlign: TextAlign.center,
)

Image(图片组件) ​

dart
// 网络图片
Image.network(
  'https://example.com/image.jpg',
  width: 200,
  height: 200,
  fit: BoxFit.cover,
)

// 本地图片
Image.asset('assets/images/logo.png')

ElevatedButton(悬浮按钮) ​

dart
ElevatedButton(
  onPressed: () {
    // 按钮点击事件
  },
  style: ElevatedButton.styleFrom(
    backgroundColor: Colors.blue,
    padding: EdgeInsets.symmetric(horizontal: 20, vertical: 12),
  ),
  child: Text('Click Me'),
)

TextField(输入框) ​

dart
TextField(
  decoration: InputDecoration(
    labelText: 'Username',
    hintText: 'Enter your username',
    border: OutlineInputBorder(),
  ),
  onChanged: (value) {
    // 输入变化回调
  },
)

Container(容器组件) ​

dart
Container(
  width: 200,
  height: 200,
  decoration: BoxDecoration(
    color: Colors.red,
    borderRadius: BorderRadius.circular(10),
    boxShadow: [
      BoxShadow(
        color: Colors.black26,
        blurRadius: 4,
        offset: Offset(2, 2),
      ),
    ],
  ),
  padding: EdgeInsets.all(16),
  margin: EdgeInsets.all(8),
  child: Text('Container Example'),
)

布局组件 ​

Row(水平布局) ​

dart
Row(
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  crossAxisAlignment: CrossAxisAlignment.center,
  children: [
    Text('Left'),
    Text('Center'),
    Text('Right'),
  ],
)

Column(垂直布局) ​

dart
Column(
  mainAxisAlignment: MainAxisAlignment.center,
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    Text('Top'),
    Text('Middle'),
    Text('Bottom'),
  ],
)

Stack(层叠布局) ​

dart
Stack(
  alignment: Alignment.center,
  children: [
    Container(width: 200, height: 200, color: Colors.red),
    Container(width: 150, height: 150, color: Colors.green),
    Container(width: 100, height: 100, color: Colors.blue),
  ],
)

ListView.builder(动态列表) ​

dart
ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    return ListTile(
      title: Text(items[index].title),
      subtitle: Text(items[index].subtitle),
      onTap: () {
        // 点击事件
      },
    );
  },
)

GridView(网格布局) ​

dart
GridView.count(
  crossAxisCount: 2,
  padding: EdgeInsets.all(10),
  children: List.generate(6, (index) {
    return Container(
      color: Colors.blue,
      margin: EdgeInsets.all(5),
      child: Center(child: Text('Item $index')),
    );
  }),
)

2. 布局组件使用场景汇总(Row、Column、Stack等) ​

Row(水平布局) ​

  • 使用场景:水平排列多个组件,如导航栏、工具栏、表单行
  • 特点:子组件沿水平方向排列
  • 常用属性:
    • mainAxisAlignment:主轴对齐方式
    • crossAxisAlignment:交叉轴对齐方式
    • children:子组件列表

Column(垂直布局) ​

  • 使用场景:垂直排列多个组件,如页面主体内容、表单
  • 特点:子组件沿垂直方向排列
  • 常用属性:
    • mainAxisAlignment:主轴对齐方式
    • crossAxisAlignment:交叉轴对齐方式
    • children:子组件列表

Stack(层叠布局) ​

  • 使用场景:组件叠加显示,如图片上叠加文字、浮层效果
  • 特点:子组件按顺序叠加,后添加的组件在上面
  • 常用属性:
    • alignment:子组件对齐方式
    • fit:子组件适配方式
    • children:子组件列表

Flex(弹性布局) ​

  • 使用场景:需要灵活控制子组件占比的布局
  • 特点:结合Expanded使用,实现子组件弹性布局
  • 常用属性:
    • direction:布局方向(水平或垂直)
    • children:子组件列表

Wrap(流式布局) ​

  • 使用场景:子组件可能超出屏幕宽度,需要自动换行的场景
  • 特点:子组件超出父容器宽度时自动换行
  • 常用属性:
    • spacing:子组件水平间距
    • runSpacing:子组件垂直间距
    • children:子组件列表

SingleChildScrollView(滚动组件) ​

  • 使用场景:内容超出屏幕高度,需要滚动查看的场景
  • 特点:提供单 child 的滚动功能
  • 常用属性:
    • scrollDirection:滚动方向
    • child:子组件

3. 状态管理方法汇总(setState、Provider、GetX) ​

setState(基础状态管理) ​

  • 适用场景:简单组件的状态管理,状态只在单个组件内使用
  • 使用方式:
    dart
    setState(() {
      _count++;
    });
  • 优点:使用简单,适合小型组件
  • 缺点:状态管理分散,难以在组件间共享

Provider(官方推荐) ​

  • 适用场景:中大型应用,需要在多个组件间共享状态
  • 使用方式:
    1. 创建数据模型
    2. 使用 ChangeNotifier 管理状态
    3. 使用 Provider 提供状态
    4. 使用 Consumer 或 Provider.of 访问状态
  • 优点:状态管理集中,支持依赖注入
  • 缺点:需要了解 InheritedWidget 原理

GetX(轻量级状态管理) ​

  • 适用场景:各种规模的应用,需要快速开发
  • 使用方式:
    1. 创建 Controller 管理状态
    2. 使用 Get.put() 注册 Controller
    3. 使用 Get.find() 访问 Controller
  • 优点:使用简单,代码量少,集成了路由管理和依赖注入
  • 缺点:功能过于集成,可能导致代码耦合

Bloc(基于流的状态管理) ​

  • 适用场景:大型应用,需要严格的状态管理
  • 使用方式:
    1. 定义 Event 和 State
    2. 创建 Bloc 处理事件
    3. 使用 BlocBuilder 或 BlocListener 监听状态变化
  • 优点:状态管理清晰,测试友好
  • 缺点:代码量较大,学习曲线较陡

4. 网络请求与JSON解析模板(复制即用) ​

Dio 网络请求模板 ​

dart
import 'package:dio/dio.dart';

class ApiService {
  static final Dio _dio = Dio(
    BaseOptions(
      baseUrl: 'https://api.example.com',
      connectTimeout: 10000,
      receiveTimeout: 10000,
      headers: {
        'Content-Type': 'application/json',
      },
    ),
  );

  // GET 请求
  static Future<Response> get(String path, {Map<String, dynamic>? queryParameters}) async {
    try {
      return await _dio.get(path, queryParameters: queryParameters);
    } catch (e) {
      print('GET request error: $e');
      rethrow;
    }
  }

  // POST 请求
  static Future<Response> post(String path, {dynamic data}) async {
    try {
      return await _dio.post(path, data: data);
    } catch (e) {
      print('POST request error: $e');
      rethrow;
    }
  }
}

JSON 解析模板 ​

手动解析 ​

dart
class User {
  final String name;
  final int age;
  final String email;

  User({
    required this.name,
    required this.age,
    required this.email,
  });

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
      email: json['email'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
      'email': email,
    };
  }
}

// 使用
final user = User.fromJson(jsonData);
final jsonString = jsonEncode(user.toJson());

使用 json_serializable ​

dart
// pubspec.yaml 添加依赖
// dev_dependencies:
//   build_runner: ^2.1.7
//   json_serializable: ^6.1.5

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  final String name;
  final int age;
  final String email;

  User({
    required this.name,
    required this.age,
    required this.email,
  });

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

// 运行命令生成代码
// flutter pub run build_runner build

5. 打包配置模板(Android/iOS,复制即用) ​

Android 打包配置 ​

生成签名文件 ​

bash
# 生成签名文件
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias

配置签名信息 ​

yaml
# android/app/build.gradle
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            storeFile file('my-release-key.jks')
            storePassword 'your-store-password'
            keyAlias 'my-key-alias'
            keyPassword 'your-key-password'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

打包命令 ​

bash
# 打包 APK
flutter build apk --release

# 打包 AAB
flutter build appbundle --release

iOS 打包配置 ​

Xcode 配置 ​

  1. 打开 iOS 项目:open ios/Runner.xcworkspace
  2. 在 Xcode 中配置:
    • 应用名称:General → Display Name
    • 版本号:General → Version
    • 构建号:General → Build
    • 证书:Signing & Capabilities

打包命令 ​

bash
# 打包 IPA
flutter build ios --release
# 然后在 Xcode 中归档并导出 IPA

6. 新手易错点对照表(快速排查问题) ​

布局相关 ​

错误现象可能原因解决方案
布局溢出组件尺寸超过屏幕边界使用 SingleChildScrollView 包裹内容
子组件不显示没有设置宽度或高度为容器设置宽高,或使用 Expanded
对齐方式不正确mainAxisAlignment 或 crossAxisAlignment 设置错误调整对齐方式参数
组件重叠Stack 布局使用不当调整 Stack 的 alignment 属性或使用 Positioned

状态管理相关 ​

错误现象可能原因解决方案
状态不更新在 StatelessWidget 中使用 setState使用 StatefulWidget
异步回调中 setState 报错Widget 已销毁使用 mounted 检查
状态共享失败状态管理方案选择不当选择合适的状态管理库(如 Provider)

网络请求相关 ​

错误现象可能原因解决方案
请求失败网络连接问题或 URL 错误检查网络连接和 URL
JSON 解析失败实体类与 JSON 格式不匹配检查实体类定义和 JSON 格式
数据不显示没有处理异步加载状态添加加载状态和错误处理

打包相关 ​

错误现象可能原因解决方案
签名错误签名文件配置错误检查签名文件路径和密码
权限错误缺少必要权限在 AndroidManifest.xml 或 Info.plist 中添加权限
图标不显示图标文件配置错误检查 pubspec.yaml 中的图标配置

7. 常用第三方插件推荐(按场景分类) ​

开发效率 ​

UI 增强 ​

功能扩展 ​

平台集成 ​

© 2026 编程马·菜鸟教程 版权所有