天天看点

Flutter随记

1.flutter sdk下载配置好环境变量后,在vscode里安装dart和flutter两个插件后就可以创建项目了;

2.创建项目可以用命令flutter create demo_01,则会自动创建demo_01项目目录(注意项目不要用demo-01而是用下划线)【可以加 --no-pub来不自动执行pub get】

3.flutter里布局是根据widget类型来实现的,比如scaffold是具有appbar和body和floatingactionbutton等三个布局块(上下分列,最后的那个其实是一个floatting的一个控件)的一个widget(在c#里叫control/控件),

而center这种代表它内部只有一个布局块(但是是全局居中对齐)【只有一个布局块的内容属性一般都叫child】

而像row,column之类的则有多个元素,因此表示内容的属性叫children(注意,column是一列而非columns多列,因此column的子元素是在这一列里上下排列的)

4.flutter创建项目还可以flutter create --no-pub --platforms=windows ft_demo01来创建指定目标源的项目;如果对这个项目需要增加目标源,可以执行flutter  devices查看本机flutter配置了哪些目标源,然后cd到项目根目录后通过flutter config --enable-linux-desktop来启用某个目标源(这里是linux desktop,还有--enable-windows-desktop);注意启用了目标源需要重新创建一下项目,即再执行flutter create --no-pub .;然后手动执行 flutter  pub get --offline后就可以通过 flutter run -d windows来debug此目标源;还可以用flutter build windows(可以加--release)来build此目标源;

5.shift+r可以热重启【r是热重载】【dart不行,要借助pub包】

6.事件冒泡(包括前端)的意思是,比如有这种情况,一个panel里面有个listview,而panel注册了双击左侧按钮事件(比如双击panel会提示啥),而listview的item也注册了双击事件;因此listview的item这个组件是panel的子孙组件,当双击item的时候事件被item先监听处理,如果不阻止冒泡,则会继续让panel也处理这个双击事件;(还有典型的场景为外层是一个scrollview,而内部子孙里也有scrollview,因此对子孙scroll时产生的事件如果不取消冒泡,则父scroll也能收到,就会发生两个scrollview一起动的情况)

7.flutter里一个新的页面(路由页面)其实就是一个constrainedbox【expand()的】,因此对container设置大小不生效;但是可以先用unconstrainedbox包裹后,再用container、sizedbox、constrainedbox等就有用了;【即如果父组件是constrainedbox,设置了最小长宽,则其子容器设置的大小如果小于父constrainedbox则以父constrainedbox为主(可以用unconstrainedbox来取消父constrainedbox对子组件的影响,但是父constrainedbox大小是不受影响的);constrainedbox优先级大于sizedbox(也不能这么说,应该说这两个谁是父组件则谁的优先级更高)】

继续阅读