万物皆widget
StatelessWidget+state
StatefulWidget
数据传递provider
provider: ^6.0.2
页面跳转
Navigator.push(context, MaterialPageRoute(builder: (context) {
return SecondPage();
}))
常用的组件
/flutter/packages/flutter/lib/src/material/scaffold.dart
各种嵌套
obj(key:value, key2:value2)
flutter单线程
异步处理 isolate、future、
async+await组合使用
集成父类方法
with SingleTickerProviderStateMixin, PrivacyPolicy
私有方法下划线
_xxxx( )
DefaultTabController分页
https://blog.csdn.net/zuo_er_lyf/article/details/105920630
加载图片image
@override
Widget build(BuildContext context) {
return Image.asset(
ImageUtil.getImgPath(image, format: format),
height: height,
width: width,
cacheWidth: cacheWidth,
cacheHeight: cacheHeight,
fit: fit,
color: color,
/// 忽略图片语义
excludeFromSemantics: true,
);
}
Image.asset 返回一个
class Image extends StatefulWidget {
...
}
随机练习
未做练习
难题攻克
NavigatorUtil.jumpWithParams(context, Routes.publicQuestion,
params:params)
顺序练习
NavigatorUtil.jumpWithParams(context, Routes.answerQuestions, params:params);
章节练习
NavigatorUtil.jumpWithParams(context, Routes.chapterPractice, params:params);
考试记录
NavigatorUtil.jumpWithParams(context,
Routes.personalRstRecords, params:params);
模拟考试
NavigatorUtil.jumpWithParams(context, Routes.simulationTest, params:params);
成绩排行
NavigatorUtil.jumpWithParams(context, Routes.personaList, params:params);
图片文字组合
上中下 column
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
LoadAssetImage(
icon,
width: ScreenAdapterUtil.width(36),
height: ScreenAdapterUtil.width(36),
),
Padding(
padding: EdgeInsets.only(top: 12),
child: Text(
name,
style: TextStyle(
fontSize: 13, color: Color.fromRGBO(32, 32, 32, 1)),
),
),
],
)
左中右 row
Row(
children: <Widget>[
LoadAssetImage(
"answer_question/ic_error",
format: ImageFormat.png,
fit: BoxFit.cover,
width: 16,
height: 16,
),
Gaps.hGap10,
Text(
errorCount.toString(),
style: TextStyle(color: Color(0xFFFD4D66), fontSize: 15),
),
],
)
Map<String, dynamic> _notificationInfo = Map<String, dynamic>();
动态的dynamic
如果将变量声明为dynamic,则其类型会随着不断赋值动态变化类型。
dynamic a =‘abc’; //最初是一个字符串
a = 123; //然后给它分配一个int值
a = true; //然后是布尔
如果将变量声明为var,则一旦分配的类型就无法更改。
var b =‘cde’; // b是一个字符串,其类型不能更改
b = 123; // 这将无法编译 ,无法将int分配给字符串变量
但是,如果您声明一个var而不进行初始化,那么它将变为动态的:
var a; // 这实际上是一个动态类型
a = 2; //为其分配一个整数
a =‘hello!’; //为其分配一个字符串
print(a); //打印出“ hello”
dynamic:是所有Dart对象的基础类型, 在大多数情况下,通常不直接使用它,
通过它定义的变量会关闭类型检查,这意味着 dynamic x = ‘hal’;x.foo();
这段代码静态类型检查不会报错,但是运行时会crash,因为x并没有foo()方法,所以建议大家在编程时不要直接使用dynamic。
Object和dynamic的相同点:
1.都是运行时动态类型:可以任意修改类型或者声明,只要最终运行的时候能确定类型。
Object和dynamic的不同点:
1.dynamic属于自动推断类型,调用该类型的属性。
2.Object的类编译器无法推断具体类型,默认为还是Object类型,所以只能调用Object的属性和方法
var:是一个关键字,意思是“我不关心这里的类型是什么。”,系统会自动推断类型runtimeType。
Object:是Dart对象的基类,当你定义:Object o=xxx;时这时候系统会认为o是个对象,你可以调用o的toString()和hashCode()方法
因为Object提供了这些方法,但是如果你尝试调用o.foo()时,静态类型检查会进行报错;
flutter 基本数据类型:
Number:数字类型,包括 int整型和double浮点型;
int:整型,取值范围为-253到253,int类型不能包含小数点;
double:浮点型,64位(双精度)浮点数;
num:数字类型,int和double都是num类型的子类,num类型包括的运算 *** 作有:+、-、*、/、以及移位 *** 作>>,num类型包括的常用方法有:abs、ceil和floor;
String:字符串
Boolean:布尔
List:数组
Map:集合 symbol:符号
定义一个方法对象
typedef NotificationUsingBlock2222 = Function(dynamic object);
NotificationUsingBlock2222 就是对象的名称,是一个方法,传入实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)