Flutter面经
StatelessWidget和StatefulWidget
在Flutter中,widget分为两类:Stateful(有状态)和 stateless(无状态)widget。
stateless widget 没有内部状态,Icon、IconButton, 和Text都是无状态widget, 它们都是 StatelessWidget的子类。
stateful widget 是动态的,用户可以和其交互(例如输入一个表单、 或者移动一个slider滑块),或者可以随时间改变 (也许是数据改变导致的UI更新)。Checkbox, Radio, Slider, InkWell, Form, and TextField 都是 stateful widgets, 它们都是 StatefulWidget的子类。
StatelessWidget
Stateless widgets 是不可变的, 这意味着它们的属性不能改变——所有的值都是最终的。
如果无状态Widget里面有子Widget,并且子Widget是有状态的,则子Widget的内容是可以通过setState来更改的。无状态Widget影响的仅仅是自己是无状态的,不回影响他的父Widget和子Widget。
StatefulWidget
Stateful widgets 持有的状态可能在widget生命周期中发生变化。
创建一个有状态的widget需要进行以下操作:
要创建一个自定义有状态widget,需创建两个类:StatefulWidget和State。
我们要定义一个widget类,继承自StatefulWidget。
子State,包含该widget状态并定义该widget build()方法的类,它继承自State。
状态对象包含widget的状态和build() 方法。
当widget的状态改变时,状态对象调用setState(),告诉框架重绘widget
class TextPage extends StatefulWidget{
@override
TextPageState createState() => new TextPageState();
}
class TextPageState extends State<TextPage>{
@override
Widget build(BuildContext context)
}
Navigator路由
有显示跳转
Navigator.push(context, MaterialPageRoute(builder: (context) => LoginPage()));
还有隐式跳转
这种跳转需要先定义,后使用
Navigator.push 用来执行 Route 的入栈操作,就可以通过指定的 Route 跳转到对应的页面了
Navigator.pop 用来执行 Route 的退栈操作,即页面回退,可以添加可选参数 result 作为页面返回时携带的参数
context跨组件获取数据的一个封装
Flutter 中的生命周期
-
initState()
表示当前 State 将和一个 BuildContext 产生关联,但是此时BuildContext 没有完全装载完成,如果你需要在该方法中获取 BuildContext ,可以 new Future.delayed(const Duration(seconds: 0, (){//context}); 一下。 -
didChangeDependencies()
didChangeDependencies() 在 initState() 之后调用,当 State 对象的依赖关系发生变化时,该方法被调用,初始化时也会调用。 -
deactivate()
deactivate() 当 State 被暂时从视图树中移除时,会调用这个方法,同时页面切换时,也会调用。 -
dispose()
dispose() Widget 销毁了,在调用这个方法之前,总会先调用 deactivate()。
Scaffold
一个完整的页面可能会包含导航栏、抽屉菜单以及底部导航等等。如果每个路由页面都需要开发者自己手动去实现这些组件,这将会是很差的体验。在 Material 组件库中,提供了 Scaffold 组件用于搭建一个页面的骨架,让我们很容易的拼装出一个完整的页面。
- AppBar 设置导航栏标题、导航栏菜单、导航栏底部的 Tab
- TabBar 组件用于快速生成 Tab 菜单。在导航栏的底部通常是一组 Tab 菜单,可以通过上面 AppBar 的 bottom 属性来指定这组菜单
- TabBarView
通过上面的 TabBar 只能生成一个静态的菜单,Tab 菜单和 Tab 页面切换需要同步,然而实现这一功能的就需要通过 TabBarView 组件了。TabBarView 组件不仅可以轻松实现 Tab ,而且可以非常容易配合 TabBar 来实现同步切换和滑动状态同步 - 抽屉菜单 drawer 、endDrawer 两个属性用于表示一个页面的左、右抽屉菜单。
- 底部 Tab 导航栏 提供了 bottomNavigationBar 属性来指定底部导航,Material 组件库提供了 BottomNavigationBar 和 BottomNavigationBarItem 来实现底部导航。
- 详细
Row和Column
Row和Column是flutter中最基础的容器组件,Row用来水平放置子组件,Column用来垂直放置子组件。它们都可以设置子组件的对齐方式。重点需要了解它们有哪些对齐方式,以及如何对齐的。
布局行为
Row默认行为:在水平方向会尽可能大,大到会撑满parent;在垂直方向会尽可


5254

被折叠的 条评论
为什么被折叠?



