移动开发最新Flutter 从零开始 002 创建第一个flutter项目,2024年最新android开发面试

如何做好面试突击,规划学习方向?

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节

image

在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。

image

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

To add assets to your application, add an assets section, like this:

assets:

- images/a_dot_burr.jpeg

- images/a_dot_ham.jpeg

An image asset can refer to one or more resolution-specific “variants”, see

https://flutter.dev/assets-and-images/#resolution-aware.

For details regarding adding assets from package dependencies, see

https://flutter.dev/assets-and-images/#from-packages

To add custom fonts to your application, add a fonts section here,

in this “flutter” section. Each entry in this list should have a

“family” key with the font family name, and a “fonts” key with a

list giving the asset and other descriptors for the font. For

example:

fonts:

- family: Schyler

fonts:

- asset: fonts/Schyler-Regular.ttf

- asset: fonts/Schyler-Italic.ttf

style: italic

- family: Trajan Pro

fonts:

- asset: fonts/TrajanPro.ttf

- asset: fonts/TrajanPro_Bold.ttf

weight: 700

For details regarding fonts from package dependencies,

see https://flutter.dev/custom-fonts/#from-packages




这里面就是对工程的配置,库的依赖,资源的依赖等



### []( )3\. 项目简介



这是Flutter的入口函数,runApp启动的Widget



void main() => runApp(MyApp());




**MyApp**类代表 **Flutter** 应用,它继承了 **StatelessWidget**类,这也就意味着应用本身也是一个**widget**。



在 **Flutter** 中,大多数东西都是 **widget(后同“组件”或“部件”)**,包括对齐(**Align**)、填充(**Padding**)、手势处理(**GestureDetector**)等,它们都是以 **widget** 的形式提供。



**Flutter** 在构建页面时,会调用组件的**build**方法,**widget** 的主要工作是提供一个 **build()** 方法来描述如何构建 UI 界面(通常是通过组合、拼装其它基础 **widget** )。



**MaterialApp** 是**Material** 库中提供的 **Flutter APP** 框架,通过它可以设置应用的名称、主题、语言、首页及路由列表等。**MaterialApp**也是一个 **widget**。



**home** 为 **Flutter** 应用的首页,它也是一个 **widget**。



![在这里插入图片描述](https://img-blog.csdnimg.cn/b909c95c47554035a3272530bc37b3fa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN54ix5a2m5Lmg55qE54yq,size_20,color_FFFFFF,t_70,g_se,x_16)



**MyHomePage** 是应用的首页,它继承自**StatefulWidget**类,表示它是一个有状态的组件\*\*(Statefulwidget)\*\*。关于有状态组件和无状态组件,我在后面会和大家讲,现在只需要知道他是一个有状态组件就可以了。



**Statefulwidget** 可以拥有状态,这些状态在 **widget** 生命周期中是可以变的,而 **Statelesswidget** 是不可变的。



**Stateful widget** 至少由两个类组成:



一个**StatefulWidget**类。  

一个 **State**类; **StatefulWidget**类本身是不变的,但是State类中持有的状态在 **widget** 生命周期中可能会发生变化。  

**\_MyHomePageState**类是**MyHomePage**类对应的状态类。看到这里,读者可能已经发现:和**MyApp** 类不同, **MyHomePage**类中并没有**build**方法,取而代之的是,**build**方法被挪到了\*\*\_MyHomePageState\*\*方法中。



![在这里插入图片描述](https://img-blog.csdnimg.cn/dbb780253c0d4517bd7940e6c2b3b4b0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN54ix5a2m5Lmg55qE54yq,size_20,color_FFFFFF,t_70,g_se,x_16)



### []( )State类



接下来,我们看看\*\*\_MyHomePageState\*\*中都包含哪些东西:



该组件的状态。由于我们只需要维护一个点击次数计数器,所以定义一个\*\*\_counter\*\*状态:



int _counter = 0; //用于记录按钮点击的总次数




**\_counter** 为保存屏幕右下角带“+”号按钮点击次数的状态。



设置状态的自增函数。



void _incrementCounter() {

setState(() {

  _counter++;

});

}




当按钮点击时,会调用此函数,该函数的作用是先自增\*\*\_counter\*\*,然后调用**setState** 方法。**setState**方法的作用是通知 **Flutter** 框架,有状态发生了改变,**Flutter** 框架收到通知后,会执行 **build** 方法来根据新的状态重新构建界面, **Flutter** 对此方法做了优化,使重新执行变的很快,所以你可以重新构建任何需要更新的东西,而无需分别去修改各个 **widget**。



### []( )构建UI界面



构建UI界面的逻辑在 build 方法中,当**MyHomePage**第一次创建时,**\_MyHomePageState**类会被创建,当初始化完成后,**Flutter**框架会调用 **widget** 的**build**方法来构建 widget 树,最终将 **widget** 树渲染到设备屏幕上。所以,我们看看\*\*\_MyHomePageState**的**build\*\*方法中都干了什么事:



@override

Widget build(BuildContext context) {

return Scaffold(

  appBar: AppBar(



    title: Text(widget.title),

  ),

  body: Center(



    child: Column(

      mainAxisAlignment: MainAxisAlignment.center,

      children: <Widget>[

        const Text(

          'You have pushed the button this many times:',

        ),

        Text(

          '$_counter',

          style: Theme.of(context).textTheme.headline4,

        ),

      ],

    ),

  ),

  floatingActionButton: FloatingActionButton(

    onPressed: _incrementCounter,

    tooltip: 'Increment',

    child: const Icon(Icons.add),

  ), // This trailing comma makes auto-formatting nicer for build methods.

);

}




**Scaffold** 是 **Material** 库中提供的页面脚手架,它提供了默认的导航栏、标题和包含主屏幕 widget 树(后同“组件树”或“部件树”)的body属性,组件树可以很复杂。本书后面示例中,路由默认都是通过**Scaffold**创建。



**body**的组件树中包含了一个**Center** 组件,**Center** 可以将其子组件树对齐到屏幕中心。此例中, **Center** 子组件是一个**Column** 组件,**Column**的作用是将其所有子组件沿屏幕垂直方向依次排列; 此例中**Column**子组件是两个 Text,第一个Text 显示固定文本 “You have pushed the button this many times:”,第二个Text 显示\*\*\_counter\*\*状态的数值。



**floatingActionButton**是页面右下角的带“+”的悬浮按钮,它的**onPressed**属性接受一个回调函数,代表它被点击后的处理器,本例中直接将\*\*\_incrementCounter\*\*方法作为其处理函数。  


## 总结:

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。

* BAT大厂面试题、独家面试工具包,

* 资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,

  ![](https://img-blog.csdnimg.cn/img_convert/18191202e9739091c3abd47972adffbf.webp?x-oss-process=image/format,png)
  ![](https://img-blog.csdnimg.cn/img_convert/d951b33fc9d0c2f770c8dc08a4c3db45.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

图片转存中...(img-GEeCyfQ2-1715448311632)]
  [外链图片转存中...(img-uWDcqG0u-1715448311632)]



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值