打开该目录下的flutter.gradle文件修改如下内容:

buildscript {

repositories {

//google()

//jcenter()

maven { url ‘https://maven.aliyun.com/repository/google’ }

maven { url ‘https://maven.aliyun.com/repository/jcenter’ }

maven { url ‘http://maven.aliyun.com/nexus/content/groups/public’ }

}

dependencies {

classpath ‘com.android.tools.build:gradle:4.0.1’

}

}

class FlutterPlugin implements Plugin {

//private static final String DEFAULT_MAVEN_HOST = “https://storage.googleapis.com”;

private static final String DEFAULT_MAVEN_HOST = “https://storage.flutter-io.cn”;

}

至于为啥这样改就不用多说了,做android开发的应该比较清楚,其实主要是针对android端的,另外gradle插件不一定是4.0.1的可以根据你的AS版本来。网上有人说还要修改resolve_dependencies.gradle文件中的地址,但是我修改了会出现问题,其实在最新版的文件里,它已经替换成你前面配置的环境变量的值啦,你可以看到:

Flutter 学习书籍


  • 第一个首推wendux的《Flutter实战》 (机械工业出版社/2020-03-20出版)

作者是国产巨佬,书的内容质量自然是没话说,讲的非常详细,几乎各个方面都涉及到了,而且有示例代码,可以边看边实践,应该有很多小伙伴跟我一样看的是这本。 作者写的网络请求开源库Dio已经成了Flutter社区最流行的网络请求库, 看了确实不错,好像很多人也都在用这个。

需要指出的是,该书有部分内容可能你只需要了解大概实现原理,实际中pub社区有现成的库可以直接依赖使用,如第七章中的跨组件状态共享Provider我们可以直接使用provider库;json转Model序列化中提到的json_model库可以使用json_to_model这个库来代替, 因为他原来的库好像没有升级了依赖有点冲突问题;关于原生插件开发一节内容建议可以直接去看官网的介绍,因为最新的plugin实现方式好像与文中提到的略有不同了,已经不需要在一个MainActivity去做了。其他基本没有啥大问题。

  • 另外一个推荐的是《Flutter In Action》(美国Manning(曼宁)出版社/2020-1月出版)

不过这本书是外国的,目前国内市面上还买不到,京东预售价居然要486?还是看电子版的好啊,我放在了百度网盘上:

链接:https://pan.baidu.com/s/1ZFtzlo5xX0YjxIC6AlHCcg

提取码:vsux

只可惜该书目前没有中文翻译版的,全书都是英文版的,看得可能会有些吃力(正在研读中。。)不过美国人写书的视角跟中国人完全不同,书里介绍的也非常详细,看完应该能学到很多,毕竟flutter也是外国人开发的。

Flutter更新的速度也是够快,还没有一本书能追上它更新的速度。

Dart 开发语言


Flutter是一个高性能的渲染引擎框架,本身不是一门语言,它是使用Dart语言开发的,就像Android是用java、H5是用js开发的一样,首先要学习了解的是Dart语言。

关于Dart,它其实是一个集成了众多优秀开发语言如 Java、JS、C++、C#等语言的优秀特性的一个面向对象的开发语言,如果你是接触过web开发或者是客户端原生开发的,学习dart几乎不费力,简直可以无缝过渡,因为你能看到一些你非常熟悉的东西,所以花一天或半天的时间了解一下就可以了。

主要记住Dart是一个纯面向对象的,强类型的语言,这点很重要。

学习Dart的主要网站还是先看官网的:Dart编程语言中文官网,

我觉得官网的这个是必看的:Dart语言概览

官网除了Dart语言概览还有其他内容,可以简单浏览一下,用的时候再详细查。

除了官方的网站,下面的博文你可以选择性的学习:

  • Dart 中 List 数组的常用方法

  • Dart快速学习之路

  • flutter开发之Dart[必读篇]

  • Dart语言之从入门到放弃

其中第一个可以看一下,毕竟数组是开发中高频使用的东西,其他三个看一个就可以了,内容基本类似,跟官网的教程查不多,但是有些细节会提到不一样的地方。如果是纯练习Dart语法的话,你可以使用Visual Studio运行,参考上面的第二个博文链接里有介绍。另外,如果已安装了Flutter SDK的话是不需要再另外单独安装Dart SDK的,因为Flutter SDK中已经包含了Dart。

Flutter 官网教程


除了wendux的《Flutter实战》, 官网的 Flutter 开发文档 有些内容也是初学者必看的,我这里把我看的觉得重要的列一下:

  • Flutter 中的布局

  • 布局构建教程

  • 深入理解布局约束

  • 处理边界约束 (Box constraints) 的问题

  • 在后台处理 JSON 数据解析 (可以学到如何在不阻塞界面的情况下处理耗时任务)

  • Flutter Packages 的开发和提交

  • 升级Android插件(如果是新开发一个插件的话直接看它最后的介绍)

  • 使用 Flutter inspector 工具

其中关于布局约束一节官方总结的很精辟:

可能英文的这张图片更好理解,说的更加简洁:

理解Flutter的布局约束原理对于流畅的书写布局十分重要,布局时你可能不会感到像android中那样舒服,因为经常会遇到一些约束边界报错的问题或者溢出问题,官网教程给出了大概的原理可以帮助你理解并解决这些问题。

关于最新版的插件开发方式官网介绍的还不是很详细,补充两篇:Flutter Plugin插件开发填坑指南、Flutter 插件的创建及使用

其实最新的主要是通过实现一些接口来做的:

public class MyFlutterPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler {

}

Flutter还支持将原生应用的部分页面替换成flutter, Android中集成教程可以看这里 在 Android 中集成 Flutter

Flutter pub 社区


Flutter 提供了一个发布网站,可以搜索别人开发好的插件:https://pub.dev

一些官方推荐的插件还有一些优秀个人开发的插件都会在这上面能搜索到,如果你想使用某个功能,如获取照片?拍照?像gilde一样的具有缓存功能的网络图片加载库?首先到pub上搜索,将大大减少你的开发时间,当然如果你有好的插件也可以开源发布到pub上给别人使用。

注意:pub上只支持英文package插件名的搜索,搜中文是搜不到的

下图是Flutter提供的官方维护的插件列表:

需要的可以直接按名字到pub上去搜索,一般搜索结果的第一个就是。只看名字你就能猜出来,很多插件基本上是完全模仿的android开发当中的库。其中有一些开发中会高频使用到的,如device_info获取设备信息、camera拍照、image_picker图片选择、shared_preferences类似android的sp存取数据、path_provider文件操作、url_launcher打开外部链接、video_player视频播放、webview_flutter浏览器等。当然官方维护的插件在Github上也提供了源码,需要的话可以直接下载下来修改代码然后本地使用或者作为新版本发布到pub, 官方的插件源码也提供了插件开发方式最好的学习例子。

另外补充一些比较好用的插件:

| 插件名字 | 功能 |

| — | — |

| dio | 超级好用的网络请求库 |

| sqflite | 类似android中的sqflite数据库 |

| fluttertoast | 类似android中的toast功能 |

| wechat_assets_picker | 类似原生的微信图片选择器 |

| flutter_staggered_grid_view | 支持瀑布流的gridview, 比flutter自带的强大太多 |

| provider | 跨组件状态共享的官方推荐库 |

| event_bus | 类似android中的EventBus消息通信开源库 |

| web_socket_channel | websocket库在官方自带的基础上封装的 |

| flutter_webview_plugin | 比官方的功能要好一点的,官方的插件目前还是开发者预览版 |

| json_annotation | json序列化注解,详细使用可以参考《Flutter实战》中的介绍 |

| json_serializable | json序列化工具dev_dependencies库,详细使用可以参考《Flutter实战》中的介绍 |

| | |

| json_to_model | Json文件转Dart类工具dev_dependencies库,《Flutter实战》中json_model 优化版本 |

| intl | 国际化翻译,详细使用可以参考《Flutter实战》中的介绍 |

| intl_translation | 国际化翻译工具dev_dependencies库,详细使用可以参考《Flutter实战》中的介绍 |

| cached_network_image | 一个支持占位图和图片缓存的网络图片加载库 还可以支持图片下载进度 |

| progress_dialog | 轻量级的进度等待弹窗控件 类似android系统默认进度弹窗 |

| camera_camera | 相机拍照录视频插件,比官方的好用一些 |

Flutter 学习实例


以下列举一些都是我在G站上发现的,虽然有些功能不是很完善,但是当做入门实例来学习的都是相当不错的:

  • Flutter版的微信客户端框架:wechat_flutter

  • Flutter版的玩android客户端:flutter_wanandroid

  • Flutter版的玩android客户端2:WanAndroid_Flutter

(PS:这里吐槽一下 感觉鸿洋的玩android网站要被玩坏的节奏啊,各种版本的玩android: java版的、 kotlin版的、小程序版的。。现在又出了flutter版的,光flutter版的github上就一搜一大堆。。不过他的网站上有开放的API请求接口可以使用,拿来练手的确是最好不过的了,也难怪这么多人拿它来开刀。。。)

  • Flutter版的Github客户端实例:gsy_github_app_flutter (这个作者也写了一本Flutter开发的书,可以去看看)

  • Flutter 练习项目:flutter_deer (更切近实际开发问题)

更多实例参考:flutter-do 、 awesome-flutter(这个是国外大神维护的)

另外特别推荐两个可以用来当做API控件功能查询使用的:

  • Flutter UI集录指南: FlutterUnit(特点是可以一边看效果一边展开当前效果对应的代码,demo支持手机/桌面/web端,支持搜索,UI也比较漂亮)

  • Flutter 控件大全_老孟(这个就更厉害了,330多个控件每个控件的使用例子他都整理了,支持搜索,感觉有了这个都不需要去官网查API了。。老孟是个狠人。。。)

Flutter 的一些实际开发问题


下面几篇是超级干干干货的Flutter文章,特别实用,介绍了很多实际开发场景中遇到的问题及解决方法:

  • Flutter开发中的一些Tips

  • Flutter开发中的一些Tips(二)

  • Flutter开发中的一些Tips(三)

  • 正确操作Dart中的字符串【译】

  • Flutter三种方式实现页面切换后保持原页面状态

下面是我在学习过程中遇到的一些问题:

国际化过程中执行命令arb文件生成dart时报错

在Flutter实战教程中,最后一步根据翻译好的arb文件生成dart文件,执行如下命令报错Cannot open file

flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/l10n/localization_intl.dart l10n-arb/intl_*.arb

解决方法:文件管理器中进入项目根目录下,在git bash终端执行命令即可,原因是windows下执行不识别*号通配符会报错。

这句命令在首次运行时会在"lib/l10n"目录下生成多个文件,对应多种Locale,这些代码便是最终要使用的dart代码。

Android Studio运行Flutter时无法连接设备

如下图,有时会发现这里找不到设备无法运行:

解决方法:先关闭AS,然后到flutter sdk的安装目录下, 将\flutter\bin\cache下的lock文件删除,再重启AS。如果还是不行,那么多试几次就可以了。或者有其他的IDE工具连接了你的设备,关闭其他的IDE就可以了。

Fliutter运行时一直卡在Running Gradle task 'assembleDebug’

这个有时会卡很久,有时卡一会儿就好了,原因是AS正在后台执行下载,此时可以打开任务管理器,查看AS的磁盘和网络使用状况:

如果你发现这里的速度很高,说明它正在疯狂的下载,一般多等待一会儿就可以了。可是如果你发现这里也没有什么流量,而它一直卡在那里,说明是依赖库无法下载,如果是android端,可以打开项目的android文件夹,然后修改build.gradle文件如下:

使用阿里云的maven地址就可以,速度会很快,然后在AS的Tools工具菜单中执行Flutter>Flutter Clean,再重新运行即可。如果还是不行,首先到前面的Flutter 环境配置参考url的配置。如果还不行的话,那可能需要在Terminal终端中cd到android目录下,执行下面命令:

gradlew clean

gradlew build

或者可以选中android文件夹右键Flutter->Open Android module in Android Studio可以把android目录当成一个标准的android项目打开重新build即可。最终再重新回到Flutter项目运行。

showSnackBar报错

Unhandled Exception: Scaffold.of() called with a context that does not contain a Scaffold.

解决方法:使用GlobalKey

var _scaffoldkey = GlobalKey();

return Scaffold(

key: _scaffoldkey,

),

onPressed: () {

_scaffoldkey.currentState.showSnackBar(SnackBar(content: Text(‘显示snackBar’)));

}

使用Utf8Decoder时提示参数错误

在Flutter实战教程中遇到代码片段socket.transform(utf8.decoder).join()报参数不匹配的错误,于是找到了stack overflow的这个utf8.decoder not working after latest Flutter Upgrade,原来这只是一个api的兼容性问题,解决方法:

使用StreamTransformer.bind(Stream) 代替 Stream.transform(StreamTransformer).

例:

  • Before: foo.transform(utf8.decoder)...

  • After: utf8.decoder.bind(foo)...

viewport was given unbounded height.width.

一般情况下是需要给一个固定的高度或宽度,可以参考这个, 但是有时可能都不起作用,还是嵌套的布局使用有问题,去参考官网的布局约束原理 | 处理边界问题。

从其他应用切回Flutter应用页面无响应

这是我偶尔发现的一个神奇的问题:Flutter应用在切出应用以后再切回到应用,页面没有响应(不响应任何点击事件),测试手机版本:Android 7.1.1 魅族Pro6

本来我愉快的写着demo, 但是突然有一天,当我按下Home返回桌面再返回来的时候,发现什么都不能点击了。。whf。。?

后来我想了下Flutter这么牛逼的团队,应该不会把有如此明显的严重问题的版本发出来使用吧。。但是它确实是发生了,就发生在我的眼前,而且是百分百重现。

这个问题困扰了好久,因为几乎所有的我创建的应用都是这样的,从github上下载的其他人的demo也有类似情况,但是大多数都是正常的。

后来调查发现是跟flutter sdk版本有关系:

| 版本 | 测试结果 |

| — | — |

| flutter sdk 1.17.4 | 切回应用正常 |

| flutter sdk 1.20.1 | 切回应用无响应 |

| flutter sdk 1.20.2 | 切回应用无响应 |

| flutter sdk 1.20.3 | 切回应用正常 |

现在至少可以确定在 >1.17.4 <1.20.3之间的版本是可能会有兼容性问题的。也可能是Flutter团队在最新版本修复了这个不为人知的bug。

获取屏幕的宽高尺寸

double width = MediaQuery.of(context).size.width;

double height = MediaQuery.of(context).size.height;

有时遇到一些边界问题,不得不指定一个固定的宽度高度,这时可以参考屏幕的宽高,尽量按屏幕尺寸的百分比去设置,而不是写死魔法值。

判断当前是哪个平台

import ‘package:flutter/foundation.dart’;

//TargetPlatform目前支持6种平台

if (defaultTargetPlatform == TargetPlatform.android) {

// 是安卓系统,do something

}

// 我们可以通过显式指定debugDefaultTargetPlatformOverride全局变量的值来指定应用平台。比如:

debugDefaultTargetPlatformOverride = TargetPlatform.iOS;

print(defaultTargetPlatform); // 会输出TargetPlatform.iOS

//上面代码即在Android中运行后,Flutter APP就会认为是当前系统是iOS,Material组件库中所有组件交互方式都会和iOS平台对齐,defaultTargetPlatform的值也会变为TargetPlatform.iOS。

RefreshIndicator有时无法下拉刷新

RefreshIndicator组件的子组件listview或gridview的item数量较少时,无法触发下拉刷新操作,解决方法:滚动组件的physice属性设置为AlwaysScrollableScrollPhysics(),总是保持可滚动状态。

release模式下运行app无法连接网络

首先release模式运行的命令:

flutter run --release

运行之后发现请求接口的列表都出不来了,原来是AndroidManifest文件中默认没有添加INTERNET权限,手动添加上即可。奇怪的是,在debug模式下运行,就算不添加默认也是能请求网络的,害我找了好久原因。。

AS中运行除了main.dart以外的dart文件到手机上

Android Studio中运行除了main.dart以外的dart文件(必须包含main函数),Terminal执行命令:

flutter run lib/animated_list.dart

热加载直接在Terminal键入:r 即可

pubspec.yaml中批量添加图片资源

一开始我都是按照规矩这样添加的:

flutter:

uses-material-design: true

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

assets:

  • images/ic_test.png

  • images/ic_timg.jpg

  • images/timg4.jpg

  • images/avatar.png

后来看了官网的demo,原来这样也可以:

flutter:

uses-material-design: true

assets: [images/]

这样如果我有很多图片就不用一个一个的去添加依赖了,省了很多力气,哈哈

Flutter 代码/性能优化


目前主要学到的几点:

  • 尽量使用无状态的类组件来代替函数式的组件

  • 尽量保持build方法的纯净,减少跟UI无关的逻辑处理

  • 尽量使用const final等修饰符来避免重复创建新的组件

主要理解两个问题

第一个问题:为啥要使用类组件来代替函数组件?

Class Widget VS Function Widget 的口水之战:

  • [Why should I ever use stateless widgets instead of functional widgets?

]( )(为什么我应该使用无状态组件而不是函数组件?) ——来自Flutter的Github源码的一个issue,国外各路神仙们就此展开了激烈辩论。。

  • What is the difference between functions and classes to create reusable widgets?(使用类和函数构建可复用组件的不同点是什么?) ——来自stackoverflow的issue

两个链接都是出自同一大神Rousselet的回答,他首先指出的是这两者之间的一个显著的不同点,就是:Flutter的framework对函数是无感知的,但是对类是有感知的

也就是说通过类创建的组件最终会作为一个独立的element被挂载在element树上面去,而函数构建方式仅仅是纯粹的插入到了调用的地方,函数内的组件只是作为调用者的组件的一部分而已。使用函数构建组件会比较容易产生bug,这并不是说你使用函数构建组件就一定会有bug, 只不过如果你使用类构建组件的话,则一定能够保证不会面临用函数构建组件时可能会产生的bug。

既然使用函数实际也是可以的,也不一定就会产生bug, 而且使用函数会比使用类少写很多代码,那么为啥还一定要推荐类组件呢,有啥更特别的地方吗?

——因为使用类组件你会发现有如下显著优势:

  • 允许性能优化(使用const构造函数,做到更精细的重建)

  • 确保在两种不同布局之间的切换时能正确地释放资源(函数可能会重用一些先前的状态)

  • 能确保热重载正常工作(函数则可能会中断热重载)

  • 类组件会被显示到devTool的widget inspector检查器当中,便于调试

  • 类组件可以拥有key, 而函数则不行

  • 类组件可以使用context API, 而函数则不行

  • 类组件可以通过重写运算符==, 减少重建次数, 而函数则不行

Github上的那个issue评论了两年多终于被关闭了。。不得不佩服外国人的钻研精神。。但是直到这个issue被关闭的时候,仍然有很多人还是不是很理解,为啥要优先用类,其实官方的说法也只是强烈推荐,但并不是必须的强制规则。也有很多人提出了如下代码:

class Toggler extends StatelessWidget {

final VoidCallback onToggle;

const Toggler({Key key, this.onToggle}) : super(key: key);

@override

Widget build(BuildContext context) {

return Row(

children: [

FlatButton(onPressed: onToggle, child: Text(‘On’)),

FlatButton(onPressed: onToggle, child: Text(‘Off’)),

],

);

}

}

上面方法中有两个FlatButton是一样的使用方式,那么你可能会考虑这样去重构:

//…

Widget _toggleButton(String text) =>

FlatButton(onPressed: onToggle, child: Text(text));

@override

Widget build(BuildContext context) {

return Row(

children: [

_toggleButton(‘On’),

_toggleButton(‘Off’),

],

);

}

按照我的理解,其实这样做是完全可以的,因为这两种方式最终是等价的,包括我们经常会写的构建列表组件会使用map方法:

final List fruits;

//…

@override

Widget build(BuildContext context) {

return Column(

children: _buildChildren(),

);

}

List _buildChildren() {

return fruits.map((f) => _FruitInfo(fruit: f)).toList();

}

这样应该也是完全OK的,也就是说使用箭头函数和inline组件的方式完全没有任何区别。更多的可能还是要考虑实际业务场景,如下面的代码,flutter就很难理解,某些情况下可能会造成不可预期的结果,这时应该去函数化来得到更加安全的保障。

bool condition;

Widget _foo();

Widget _bar();

Widget build(BuildContext context) {

return condition

? _foo()
_bar();

}

为了更好理解再看两组代码

以下两组代码等价:

Widget functionA() => Container()

@override

Widget build() {

return functionA()

}

@override

Widget build() {

return Container();

}

以下两组代码等价:

class ClassA extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Container();

}

}

@override

Widget build() {

return ClassA()

}

@override

Widget build() {

return KeyedSubtree(

key: ObjectKey(ClassA),

child: Container(),

);

最后

总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。

这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

想要面试顺通嘛,赶紧领取下面的面试资料为之后的面试做足准备叭!这里提前祝各位面试成功!

资料领取方式:  Android架构设计

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

dget build(BuildContext context) {

return Container();

}

}

@override

Widget build() {

return ClassA()

}

@override

Widget build() {

return KeyedSubtree(

key: ObjectKey(ClassA),

child: Container(),

);

最后

总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。

这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

想要面试顺通嘛,赶紧领取下面的面试资料为之后的面试做足准备叭!这里提前祝各位面试成功!

资料领取方式:  Android架构设计

[外链图片转存中…(img-H3gzopC4-1646555979387)]

[外链图片转存中…(img-1XzATmZM-1646555979388)]

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

Flutter学习笔记学习资料推荐,手机端开发工具相关推荐

  1. TQ2440 学习笔记—— 1、Windows平台下开发工具安装与环境建立

    板子:广州天嵌公司的TQ2440,处理器为三星的S3C2440 1.开发工具的安装与环境建立 系统:win7  64位 SecureCRT软件:该软件可以代替Windows中的超级终端,是个非常好的串 ...

  2. 分享CFA学习笔记和资料!

    21年最新学习笔记和资料 复制这段内容后打开百度网盘App,操作更方便哦. 链接:https://pan.baidu.com/s/1GPukBzxG6fw8Hz5vyy_Aiw 提取码:rv5r–来自 ...

  3. Kinect开发学习笔记之(二)Kinect开发学习资源整理

    Kinect开发学习笔记之(二)Kinect开发学习资源整理 zouxy09@qq.com http://blog.csdn.net/zouxy09 刚刚接触Kinect,在网上狂搜资料,获得了很多有 ...

  4. Unity 入门笔记 - 07(完) - 菜单手机端静态类生成游戏

    Unity 入门笔记 - 07(完) - 菜单&手机端&静态类&生成游戏 前言:入门笔记的最后一篇.这个系列教程看完了.接下来有空就看例子项目,动手做点东西. 目录 Unity ...

  5. C# 学习笔记(11)蓝屏小工具

    C# 学习笔记(11)蓝屏小工具 加载界面参考 C# Winform 现代化扁平化启动界面设计https://www.bilibili.com/video/BV17E41147wM PS做一张图 70 ...

  6. Halcon学习笔记(一):Qt+Halcon联合开发配置

    Halcon学习笔记(1):Qt+Halcon联合开发配置 首先是新建一个QT项目qtest_hc 方法一: 1)QT项目文件 qtest_hc 添加库: #1.包含目录添加 INCLUDEPATH ...

  7. Kinect开发学习笔记之(三)Kinect开发环境配置

    Kinect开发学习笔记之(三)Kinect开发环境配置 zouxy09@qq.com http://blog.csdn.net/zouxy09 我的Kinect开发平台是: Win7 x86 + V ...

  8. 【QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)】

    [QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)] 1.说明 2.实验环境 3.参照学习链接 4.自己的学习与理解 5.学习与实践代码. (1)建立基础工程. (2)加入绘图事 ...

  9. 「学习笔记」黑马面面布局开发

    「学习笔记」黑马面面布局开发 黑马面面布局开发 一.目的 1.1 技术方案 1.2 代码规范 1.2 目录规范 二.流程开发 2.1 蓝湖/摹客协作平台 2.2 适配方案 2.3 初始化文件 2.4 ...

最新文章

  1. oracle将多行转成多列,oracle 多行转多列查询
  2. 深圳内推 | 腾讯IEG互动娱乐事业群招聘算法工程师、数据研究员(可实习)
  3. boost::sub_range相关的测试程序
  4. Java黑皮书课后题第3章:**3.22(几何:点是否在圆内)编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以(0,0)为圆心、半径为10的圆内
  5. LeetCode 1733. 需要教语言的最少人数(哈希+枚举)
  6. 程序员必修课:为什么非要用Python做数据分析?Excel不好吗?
  7. Spring MVC(三) 数据转换、格式化、校验
  8. ERROR: modinfo: could not find module rbd FATAL
  9. Java 集合系列13之 WeakHashMap详细介绍(源码解析)和使用示例
  10. 自学-Linux-老男孩Linux77期-day7
  11. Springboot毕设项目高校食堂饭卡管理824ct(java+VUE+Mybatis+Maven+Mysql)
  12. php排课系统设计,基于PHP+MYSQL教务排课系统设计实现论文
  13. Win7系统运行慢如何解决?——系统天地
  14. [王垠系列]什么是语义学
  15. 远程清卡失败服务器内部错误,​航天信息远程清卡失败怎么处理
  16. vue 项目中高德地图 API 使用流程
  17. 【EXLIBRIS】名副其实
  18. BootStrap实现一个简单的界面
  19. Redis大数据应用场景
  20. QML用径向渐变做波纹效果

热门文章

  1. PHP 使用 swoole 实现即时通讯 demo,以及聊天室实现方式
  2. python循环练习题(1)
  3. 视频教程-【通关密码】项目管理师计算类试题辅导教程(简版)-软考
  4. 2d俯视视角游戏,可以切换多种枪械
  5. 增值税等普通发票扫描识别系统
  6. 工具教程第二十一讲:比特儿交易平台APP的使用(一)
  7. linux的x64与x86_在Linux x86 64机器上链接
  8. c语言rand函数的作用,详解C语言中rand函数的使用
  9. java开发之Java ORM 框架推荐
  10. python的输入函数是什么意思_「小白学Python」像风一样自由的输入:input( )函数详解...