最后
感谢您的阅读,在文末给大家准备一个福利。本人从事Android开发已经有十余年,算是一名资深的移动开发架构师了吧。根据我的观察发现,对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
所以在此将我十年载,从萌新小白一步步成长为Android移动开发架构师的学习笔记,从Android四大组件到手写实现一个架构设计,我都有一一的对应笔记为你讲解。
当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。
最后,赠与大家一句诗,共勉!
不驰于空想,不骛于虚声。不忘初心,方得始终。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
使用
通过监听滚动事件实现_DragOpenDrawer_ 组件,可以给滚动组件添加一个下拉抽屉。其使用方式如下:
DragOpenDrawer(
openDuration: Duration(microseconds: 900),
closeDuration: Duration(milliseconds: 300),
onOpen: (){
print("onOpen");
},
child: Column(
children: [
Expanded(
child: ListView.builder(
itemCount: 40,
itemBuilder: (context,index){
return ListTile(title: Text("$index"),);
}),
),
]
),
backgroundBuilder: (context){
return Container(child: FlutterLogo(style: FlutterLogoStyle.stacked,),color: Colors.blue[200],);
},
),
组件参数说明
- openDuration:抽屉打开动画持续的时间
- closeDuration: 抽屉关闭动画持续的时间
- onOpen: 抽屉打开事件回调
- child: DragOpenDrawer 组件监听的滚动组件
- backgroundBuilder:抽屉打开后展示的组件
运行效果
源码
import 'package:flutter/material.dart';
enum _DragOpenDrawerMode{
// 正在拖动
dragging,
// 抽同打开事件已经触发
done,
// 抽屉处于关闭状态
canceled,
// 抽屉已经打开了
opened,
}
class DragOpenDrawer extends StatefulWidget {
const DragOpenDrawer({
required this.child,
required this.backgroundBuilder,
this.onOpen,
this.openDuration = const Duration(seconds: 1),
this.closeDuration = const Duration(seconds: 1),
Key? key}) : super(key: key);
final Widget Function(BuildContext context) backgroundBuilder;
final Widget child;
/// 抽屉打开时的回调函数
final void Function()? onOpen;
final Duration openDuration;
final Duration closeDuration;
@override
_DragOpenDrawerState createState() => _DragOpenDrawerState();
}
class _DragOpenDrawerState extends State<DragOpenDrawer> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late double _maxHeight;
double _dragOffset = .0;
bool _openTriggered = false;
_DragOpenDrawerMode _dragOpenDrawerMode = _DragOpenDrawerMode.canceled;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override
void dispose() {
_changeDragOpenDrawerMode(_DragOpenDrawerMode.canceled);
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
_maxHeight = constraints.maxHeight;
return WillPopScope(
onWillPop: () async{
if(_dragOpenDrawerMode == _DragOpenDrawerMode.opened){
_changeDragOpenDrawerMode(_DragOpenDrawerMode.canceled);
return false;
}
return true;
},
child: Stack(
alignment: Alignment.topCenter,
children: [
SizedBox(
width: double.infinity,
height: double.infinity,
child: ScaleTransition(
alignment: Alignment.topCenter,
scale: _controller,
child: widget.backgroundBuilder(context)),
),
AnimatedBuilder(
animation: _controller,
builder: (BuildContext context, Widget? child) {
return Positioned(
top: Tween(begin: .0, end: _maxHeight).evaluate(_controller),
height: _maxHeight,
width: constraints.maxWidth,
child: NotificationListener(
onNotification: (notification){
if(notification is OverscrollNotification){
if(notification.overscroll >= 0){
## 学习分享
在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
**2021最新上万页的大厂面试真题**

**七大模块学习资料:如NDK模块开发、Android框架体系架构...**

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
> 这份体系学习笔记,适应人群:
> 第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。
> 第二,开发几年,不知道如何进阶更进一步,比较迷茫。
> 第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
> 由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**