美文网首页
Flutter 基础详解

Flutter 基础详解

作者: lukyy | 来源:发表于2025-03-19 16:27 被阅读0次
image.png
  • dart:是一种面向对象语言,dart是flutter的程序开发语言。
  • main函数:是程序运行的入口函数
  • runApp函数:是渲染根widget树的函数
    一般情况下runApp函数会在main函数里执行

语言的主要特点是什么?

  • 面向对象:支持类和单继承
  • 强类型:但支持类型推断
  • 异步编程:内置 Future 和 Stream 支持
  • 空安全:支持非空类型检查
  • JIT 和 AOT:支持即时编译和提前编译

widget
widget在flutter里基本是一些UI组件
有两种类型的widget:
statefulWidget:会自己重新构建自己(可以改变状态,通过 setState() 触发重建)
statelessWidget:不可变,一旦创建就不能改变
布局Widget:Container、Row、Column、Stack等。
常用Widget:Text、Image、ListView、GridView等。

StatefulWidget:通过setState管理状态。
状态管理方案:Provider、Riverpod、Bloc、GetX等状态管理工具。

Flutter 中的生命周期
  • StatelessWidget:
    build()
  • StatefulWidget:
    创建/初始化:createState()、initState()
    依赖:didChangeDependencies()
    构建:build()「每次父Widget重新构建时都会调用此方法」
    更新:didUpdateWidget()
    失活:deactivate() 「当应用从后台切换到前台时」
    清理:dispose() 「清理资源、取消订阅、关闭流等」

状态管理

Flutter 中有哪些状态管理方案?

基础方案:setState
中级方案:InheritedWidget、Provider
高级方案:Riverpod、BLC、Redux、MobX、GetX

Provider 的工作原理是什么?

Provider 是基于 InheritedWidget 的封装,它允许在 Widget 树中高效地共享数据。当数据变化时,只有依赖该数据的 Widget 会重建。

什么是 BLC 模式?

BLC (Business Logic Component) 是一种状态管理模式,它将业务逻辑与 UI 分离,使用 Stream 和 Sink 来处理数据流。

什么是 BuildContext?

BuildContext 是 Widget 在树中位置的句柄(上下文联系的桥梁),用于:

  • 查找父 Widget 或主题
  • 导航 (Navigator.of(context))
  • 显示对话框等
Hot Reload 和 Hot Restart 有什么区别吗?

Hot Reload比Hot Restart快
Hot Reload:会编译我们文件里新加的代码并发送给dart虚拟机,dart会更新widgets来改变UI,会保留之前的state。
Hot Restart:会让dart 虚拟机重新编译应用。Hot Restart会重置所有的state回到初始值。


异步编程:理解Stream,掌握async和await。
包管理:学习如何使用pubspec.yaml管理依赖。
Stream
Stream 用来处理连续的异步操作,Stream 是一个抽象类,用于表示一序列异步数据的源。它是一种产生连续事件的方式,可以生成数据事件或者错误事件,以及流结束时的完成事件
Stream 分单订阅流和广播流。
网络状态的监控

Dart 中的 final 和 const 有什么区别?
  • const:编译时常量,必须在编译时就知道值
  • final:运行时常量,只能赋值一次

布局与样式

常见的布局 Widget 有哪些?

Container:通用容器,可设置 padding/margin/decoration
Row/Column:水平和垂直布局
Stack:重叠布局
ListView/GridView:滚动列表
Flex/Expanded:弹性布局

如何实现响应式布局?

使用 MediaQuery.of(context) 获取屏幕尺寸
使用 LayoutBuilder 获取约束条件
使用 Flexible 和 Expanded 弹性布局
使用百分比或弹性布局
使用 OrientationBuilder 处理横竖屏变化

什么是 Theme?

Theme 是 Flutter 中统一管理应用样式的方式,可以定义颜色、字体、按钮样式等,并在整个应用中保持一致。

路由与导航

如何在 Flutter 中实现导航?
'//导航到新页面'
Navigator.push(context, MaterialPageRoute(builder: (context) => NewPage()));
'//返回上一页'
Navigator.pop(context);
命名路由如何配置?
MaterialApp(
  routes: {
    '/': (context) => HomePage(),
    '/details': (context) => DetailsPage(),
  },
);
解释 Dart 中的异步编程

Dart 使用 Future 和 async/await 处理异步操作:

Future<String> fetchData() async {
  var response = await http.get('https://api.example.com/data');
  return response.body;
}

网络与存储

如何进行网络请求?使用 http 包:

var response = await http.get(Uri.parse('https://api.example.com/data'));
Flutter 中的数据存储选项有哪些?

SharedPreferences:简单的键值对存储
SQLite:关系型数据库 (使用 sqflite 包)
Hive:轻量级 NoSQL 数据库
Firebase:云存储解决方案

性能优化

1. 如何优化 Flutter 应用性能?

使用 const Widget 减少重建
避免在 build 方法中进行耗时操作
使用 ListView.builder 处理长列表
减少 Widget 树的深度
使用性能分析工具 (Flutter DevTools)

2. 什么是 Widget 重建?如何避免不必要的重建?

Widget 重建是 Flutter 响应状态变化的机制。避免不必要重建的方法:
使用 const 构造函数
将不常变化的部分拆分为独立的 Widget
使用 Provider 等状态管理工具精确控制重建范围

Flutter 应用如何打包发布?

'//Android:'
flutter build appbundle
或
flutter build apk

//'iOS'
flutter build ios

引用
Flutter基础(二)--App结构和生命周期

相关文章

网友评论

      本文标题:Flutter 基础详解

      本文链接:https://www.haomeiwen.com/subject/naxtvjtx.html