appBar 设置透明
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
brightness: Brightness.light,Flutter inspector 在手机屏幕上,查看控件所占有的位置大小。
Flutter四种工程类型
1. Flutter Application (全新的APP)
flutter create xxapp
2. Flutter Module (混编到已有的安卓/iOS工程内)
flutter create -t module xxapp_module
3. Flutter Plugin
Flutter平台插件工程,包含Dart层与Native平台层的实现
flutter create --org com.aliu --template=plugin qr_scan
4. Flutter Package
Flutter纯Dart插件工程,仅包含Dart层的实现,往往定义一些公共Widget
flutter create --template=package xxapp_package
-i 修改 默认语言kotlin swift
-a java StatefulWidget和StatelessWidget
将 命令式编程 ------> 声明式编程。
选用规则:父Widget能否通过初始化参数,来完全控制其UI展示效果。
重点:1、初始化参数,2、彻底控制。
tip
如Container这种图层,是非可视的容器,并不会参与绘制,对于非透明的视图叠加,flutter在绘制完成后,会做图层合并。
与大前端倡导的减少图层数量,做区分。
控制TextField获取焦点及失去焦点
场景:点击让文本框获取焦点,弹出键盘。
先定义一个FocusNode
FocusNode _commentFocus = FocusNode();
TextField(
focusNode:_commentFocus, //*****
),获取焦点
FocusScope.of(context).requestFocus(_commentFocus);失去焦点
_commentFocus.unfocus();控件部分
AspectRatio(
aspectRatio: 1.85,stack
配合positioned(使用
Positioned.fill(
top: 37.0,
child: Column(Row、Column
大小,宽度 决定因素
mainAxisAlignment
crossAxisAlignment:
mainAxisSize: MainAxisSize.min,body: ListView.builder(
itemCount: 8,
itemBuilder: (_, index){
return StickyHeader(
header: Container(
alignment: Alignment.centerLeft,
width: double.infinity,
color: Color(0xFFFAFAFA),
padding: const EdgeInsets.only(left: 16.0),
height: 34.0,
child: Text("2018/06/0${index + 1}"),
),
content: _buildItem(index),
);List<Widget> list = List.generate(index + 1, (i){
return Container(
height: 72.0,resizeToAvoidBottomInset: false,body: SafeArea(
child: Column(
children: <Widget>[
Expanded(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,Offstage(
offstage: _isWechat,
child: Column(
children: <Widget>[rootBundle.loadString(child: AzListView(
data: _bankList,
itemBuilder: (context, model) => _buildListItem(model),
isUseRealIndex: true,
itemHeight: 40,
suspensionWidget: null,
suspensionHeight: 0,
indexBarBuilder:(context, list, onTouch){
return IndexBar(Expanded(
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),
itemExtent: 40.0,
itemCount: _bankNameList.length,
itemBuilder: (_, index){
return InkWell(children: <Widget>[
Opacity(FocusNode _focusNode = FocusNode();
TextEditingController _controller = TextEditingController();body: AnimatedContainer(
alignment: Alignment.center,
height: MediaQuery.of(context).size.height - MediaQuery.of(context).viewInsets.bottom,
duration: const Duration(milliseconds: 120),
curve: Curves.easeInCubic,body: ListView.separated(
itemCount: _list.length,
separatorBuilder: (_, index) {
return Divider(height: 0.6);
},showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Material(
color: Colors.white,
child: SafeArea(body: ListView.builder(
itemCount: 8,
itemBuilder: (_, index){
return StickyHeader(
header: Container(
alignment: Alignment.centerLeft,
width: double.infinity,
color: Color(0xFFFAFAFA),
padding: const EdgeInsets.only(left: 16.0),
height: 34.0,
child: Text("2018/06/0${index + 1}"),
),
content: _buildItem(index),flutter反射相关
1、运行时反射破坏了类的封装性和安全性,会带来安全风险。
Fastjson 框架就爆出了一个巨大的安全漏洞。这个漏洞使得精心构造的字符串文本,可以在反序列化时让服务器执行任意代码,直接导致业务机器被远程控制、内网渗透、窃取敏感信息等操作。
2、运行时反射会增加二进制文件大小。因为搞不清楚哪些代码可能会在运行时用到,因此使用反射后,会默认使用所有代码构建应用程序,这就导致编译器无法优化编译期间未使用的代码,应用安装包体积无法进一步压缩,这对于自带 Dart 虚拟机的 Flutter 应用程序是难以接受的。
so,没有反射,json文件解析,就得手动做解析了。