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;在垂直方向会尽可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值