flutter 学习零碎知识点01

1.Expanded组件 占满可用空间 -----可以到达类似flex布局中  第一列占用大量空间,所以它必须包装在Expanded widget中。

写死的高度改成Expanded自动撑满屏幕如果还是不能撑满试试加上flex:1的属性

Expanded expands its child to fill the available space
--Using an Expanded widget makes a child of a Row, Column, or Flex expand to fill the available space in the main axis (e.g., horizontally for a Row or vertically for a Column). If multiple children are expanded, the available space is divided among them according to the flex factor. 

2.如何改变text组件的高度:可以直接给height (单位感觉像字体单位)或者外面包一个容器

3.Text组件中文本居中 textAlign: TextAlign.center,

4.Container如果不设置宽度 宽度则由内容撑起了 背景色设置 color: Colors.pink,
无法设置背景色的组件 可以给他包一个Container容器再设置
边框属于修饰的属性需要在decoration中定义
5.使用Stack来组织需要重叠的widget。widget可以完全或部分重叠底部widget。类似于css中的

6.DefaultTextStyle.merge可以允许您创建一个默认的文本样式,该样式会被其
     // 所有的子节点继承

7.什么是无状态组件、有状态组件?

1)如果用户与widget交互,widget会发生变化,那么它就是有状态的.----
stateless widget 没有内部状态. Icon、 IconButton, 和Text 都是无状态widget, 他们都是 StatelessWidget的子类。
它不依赖于除了传入的数据以外任何其他数据,意味着改变传入其构造函数的参数是改变其显示的唯一方式

2)stateful widget 是动态的. 用户可以和其交互

如果动态组件中的变量有变化请外面套一个setState(() { _favoriteCount -= 1; }

------>无状态组件类似react中的纯组件

无状态组件里面child居然可以有状态组件。。。。。widget管理自己的状态时

8.flutter传递参数到子组件时,参数要给类型,只传值会提示少参数类型Too many positional arguments: 0 expected, but 1 found.

9.Future类型的函数类似于js中的promise 返回值可以使用then

10.拿到后台接口的数据后如果像js中通过遍历、属性访问等方式使用数据

方法1:as List).cast();

方法2:建立数据模型

var data=json.decode(data.toString());
List<Map> swiperDataList = (data['data']['slides'] as List).cast(); // 顶部轮播组件数

var data = json.decode(val.toString());
1   list = (data['data'] as List).cast(); //cast方式 访问字段属性是使用中括号 item['presentPrice']  model.formJson方式使用点符号  item.presentPrice ------->2中属性访问一种不行,就换一种
2  GoodsListModel goodsList = GoodsListModel.fromJson(data);

11.dart中map----->js中的对象{},dart中list---->js中的数组  [{},{},{}] : list中的map
12.动态创建一个List<Widget> 
             children: str.split("")
                 //每一个字母都用一个Text显示,字体为原来的两倍
                 .map((c) => Text(c, textScaleFactor: 2.0,))
                 .toList(),
13.dart中 变量设置默认值
?. 运算符在左边为null的情况下会阻断右边的调用,?? 运算符主要作用是在左侧表达式为null时为其设置默认值。

child: Text(text ?? '加载中...')),


14.反序列化(json字符串->对象)

1)、什么是序列化?为什么要序列化?

Java中 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。


15使用dart:ui包里的window中的方法来获取屏幕宽高,它不受context限制,其实,MediaQuery的源码就会发现其获取屏幕宽高,最终还是调用的window方法中的方法的

16.UI提供的颜色值如何快速在flutter使用 16进制颜色#2D4ED1
#2D4ED1 ------>Color(0xff2D4ED1),

17.itemBuilder一般都有根据一个固定模板产生一系列子元素

18.StatefulWidget 组件接受参数xxx的时候需要加前缀 widget  widget.xxx

19.ListView 作为整个页面的根节点的唯一子元素时,可以不加高度,但是如果有兄弟元素时,必须加高度,否则界面无效

20.TextField 的prefixIcon图标宽度最小值小到一定长度,就不会再小了,通过包一个Padding或者Container组件使用padding属性挤小图标尺寸

21.Row组件子元素2端对其: mainAxisAlignment:MainAxisAlignment.spaceBetween,

22.去掉AppBar下面的阴影elevation: 0,  appBar: AppBar(title: Text('登录页面',style: TextStyle(color: Colors.white),),elevation: 0,),

23.Container设置最小宽度constraints : ---场景:有撑满屏幕的背景图的容器中放2个输入框,容器高度由子元素撑起,但高度太小导致背景图显示不完整,
     Container(
                   constraints: BoxConstraints(minHeight: 800),

24.Expanded(撑满空间)不能放在SingleChildScrollView(空间不够滚动)里面会报错


开发、调试、环境、资源类

1.只有在调试模式下写代码时,当ctrl+s才会编译。cmd窗口模式下flutter run运行项目时,需要切换到cmd按R/r才可以重新编译预览界面没有变化,或者命令行不返回print 输入R刷新一下

2.安装包的时候 需要在dependencies:字段下配置  dio: ^2.0.7 然后直接保存

3.print的内容如果前面有字符串需要toString一下 如print('--------------------------》'+ result);但是直接print(result);却可以 ---->原因可能是dart不支持字符串拼接只支持字符串模板?

4.ContentType.parse("application/x-www-form-urlencoded"); ContentType无效 解决办法----->import 'dart:io';

5.android studio 快捷键
如果Ctrl+z 掉的内容,又反悔了,快捷键为:Ctrl + Shift + z
ctrl+D 向下复制一行
shift+F6 重命名

6.win10 android studio 代码提示选择属性时卡死

Settings -->Editor -->General--> Code Completion 中去掉勾选的show the completion popup in 1000ms选项

原文地址:https://www.cnblogs.com/ruoqiang/p/10619813.html