Flutter 随笔

346 阅读3分钟
1.Spacer                      ------包装了一个Expanded的SizedBox,撑开


2.Wrap+List.generate(length,generator)    -----横向排列,多出换行


3.DefaultTabcontroller+TabBar+TabBarView    -----左右滑动与appbar绑定


4.showDialog(context:context,builder:(context)=>
  {Material=>type:MaterialType.transparency})     ----弹出透明层


5.Future.delayed(Duration(seconds: 1),(){});    ---延迟执行


6.GestureDetector(
      behavior: HitTestBehavior.translucent,
   onTap: (){FocusScope.of(context).requestFocus(FocusNode());},
     child:-----)                         ---失去焦点


7. controller.addListener()    ---------------打印输入框内容


8.class!extends!implements PreferredSizeWidget{ 
      @override
      // TODO: implement preferredSize
      Size get preferredSize => Size.fromHeight()}  ---抽离appbar时


9.WillPopScope            -----退出拦截路由 


10.Table+TableRow        -----表格


11.CupertinoPicker+onSelectedItemChanged       ---滑动选择器+滑动改变选择


12.showModalBottomSheet    ----底部弹出

13.ButterBar         ---顶部按钮

14.CupertinoDatePicker     ----时间选择器

15.CupertinoButton       ----点击渐变按钮

16.CupertinoContextMenu    ----ios弹出框

17.showCupertinoModalPopup    ---ios底部弹出框

18.assert(context!=null);      ---断言,保证数据不为空

19.UnconstrainedBox            ----取消约束的默认全屏宽高

20.Overlay         -----置于屏幕最上层

21.ShaderMask-->RadialCradient       ----随机使组件内渐变显示两种颜色
             -->LinearGradient       ----使组件内线性渐变显示两种颜色
             -->SweepGradint         ----使组件内圆形渐变显示两种颜色

22.WidgetSpan              ---图文结合显示

23.NotificationListener     ------监听listview的滑动距离

24.   .runtimeType         ----打印类型
     
25.    .statusCode         ----判断请求数据成功是否的状态码

26.VerticalDivider         --垂直分割线

27.Visibility             ----存在判断条件(类似if)

28.flutter create -h        ---创建flutter插件项目

29.expanded,spacer,mediaquery,wrap,aspectRatio          ----屏幕适配

30. git stash        ---as恢复初始代码

31.with AutomaticKeepAliveClientMixin       -------避免TabBar内存开销,重复刷新

32.IndexedStack()       ----组件,可使用index判断页面

33.IgnorePainter()      ----禁用app

34.FadeInImage()       ---缓存图片过程效果

35.textAlign: TextAlign.end               ------TextField光标从右往左

36.popToRootPage()                ---返回根目录

37.void insert(int index, E element)    ---数据插入

38.popUntil(ModalRoute.withName(x))     ----跳转到x页面并销毁当前页面

39.pushReplacementNamed/pushReplacement      ----A->B->C->A

40. A -> B -> C 在 C 页面采用 pushNamedAndRemoveUntil / pushAndRemoveUntil     方式启动新页面 D,则优先启动 D 并将 C -> B -> A 全部销毁

回到第一个路由页
Navigator.popUntil(context, (route) => route.isFirst);


41.
   A -> B -> C 在 B 页面采用Navigator.popAndPushNamed(context, '/screen4'); 方式到 C 时,B 优先销毁,再打开C;
    等同于Navigator.pushReplacement( context, MaterialPageRoute(builder: (BuildContext context) =>screen4()));
    
   要求:A->B->C->D->B->A,D跳转B的时候销毁D和C
   实现:
Navigator.popUntil(context, (route) {
  if (route.settings.name == 'B') {
    return true;
  }
  return false;
});
其中route.settings.name是在进栈的时候为该页面设置的
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => BPage(),
    settings: RouteSettings(name: 'B'), // 设置B页面的路由名称为'B'
  ),
);


42.json.encode()    ---map列表转String

43.jsonDecode()     ---String转Map<String,dynamic>

44.AnimatedSwitcher()    ---动画切换

45.random().nextInt(x)   ---在x中随机生成一个随机数

46.list.reversed   list数组元素顺序反转

47.flutter upgrade   命令更新sdk

48.flutter build apk --target-platform android-arm --split-per-abi  打包apk

49.2021427号 = DateFormat.yMMMMd("zh-cn").format(DateTime.parse(2021-04-27T09:02:03))

50.CircularProgressIndicator    加载中转圈圈

51.DefaultTabController 顶部导航


52.
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp("[a-zA-Z]|[\u4e00-\u9fa5]|[0-9]|[ ]")),//限制表情的输入
LengthLimitingTextInputFormatter(15),//限制输入框输入的字符长度
],

53. CancelableOperation.fromFuture   ---遇到相同请求中断上一个重新开始 

54.全局设置系统栏颜色,在main里面设置
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
  statusBarColor: Colors.white, // 设置顶部状态栏颜色
  systemNavigationBarColor: Colors.white, // 设置底部操作栏颜色
));


55.adb logcat 日志打印到指定文件        

Linux or Mac:
adb logcat | grep -F "`adb shell ps | grep com.abc.package | cut -c10-15`"

windows:
adb logcat | findstr com.abc.package

打印全部
adb logcat -v time >D:\log.txt

打印指定内容 XXX可以用包名,或者关键字去代替。双引号是必须
adb logcat -v time | find “XXX” >D:\log.txt 


56. window.devicePixelRatio 获取设备像素密度

57. 忽略触摸事件IgnorePointer和AbsorbPointer,
   这两个Widget都能阻止子树接收指针事件,
   不同的是AbsorbPointer本身是可以接收指针事件的(但其子树不行),
   而IgnorePointer本身就不可以接收指针事件

58. IntrinsicHeight 将其子widget的高度调整其本身实际的高度,不推荐使用

59. 反编译apk使用到的权限: `aapt dump permissions xxx.apk`