![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Flutter
IT学霸
这个作者很懒,什么都没留下…
展开
-
SafeArea的使用
一、背景现在的手机屏幕尺寸外观多种多样,显示区域不再是方方正正的,一些带圆角或者是刘海屏让应用程序的布局更加复杂,甚至是需要单独适配,这对开发者来来太糟糕了。因此SafeArea控件应用而生,SafeArea通过MediaQuery检测屏幕的尺寸使应用程序的大小与屏幕适配,自动避开遮挡区域。它的原理是通过对被包装元素添加Padding来避开遮挡区域。因此可以分别指定上下左右4个区域是否需要添加Padding,例如下面的代码只在底部和左侧添加Padding用于避开遮挡区域。SafeArea(原创 2020-06-04 10:47:43 · 2866 阅读 · 0 评论 -
升级flutter到1.17.2/Dart到2.8.3编译下载错误的解决方案
一、出现项目编译下载错误,如下面的错误提示:* What went wrong:Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.> Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'. > Could not resolve io.flutter:flut..原创 2020-06-03 22:42:50 · 645 阅读 · 0 评论 -
android studio手机模拟器开启刘海屏
android studio创建好模拟器后都是英文的,为了方便操作,可以设置为中文。一、设置中文手机模拟器启动后,点击桌面上的Settings图标,如下图所示:打开Settings面板后,拖动到下方选择System在System面板中选择如下图所示的Languages & input再选择Languages,打开语言面板后,如果是第一次打开,是没有简体中文的,这时候点击下面的 《Add a language》,点击搜索,输入简体中文,搜到后添加进来,然后拖动它到第一项原创 2020-06-03 18:54:10 · 3739 阅读 · 0 评论 -
export关键字的使用
一、使用背景大多数情况下,使用另一个dart文件中的变量/方法/类时,需要先导入(使用import关键字)。但是当被导入的文件很多,且都在某一个目录时,可以新建一个导入入口文件,在这个入口文件中,使用export关键字将这些dart文件集中导出。然后其他地方使用的使用只需要import这个入口文件就可以了。二、例子以下是flutter官方的一个事例代码库,在material目录中定义了很多界面类库。在这material文件中,就使用了export关键字导出这些界面类库,用于供外层的文件i原创 2020-06-03 10:25:12 · 3142 阅读 · 0 评论 -
Cupertino和url_launcher
一、Cupertino (iOS风格) Widgets一系列IOS 风格的控件。官网地址:https://flutterchina.club/widgets/cupertino/使用导入:import 'package:flutter/cupertino.dart';二、url_launcher一款支持android和IOS的插件,其中包含打开网址、发送邮件、拨打电话、以及发送信息功能。官网地址:https://pub.dev/packages/url_launcherpubsp原创 2020-06-02 19:04:32 · 133 阅读 · 0 评论 -
Row中2列图片平分宽度
一、效果基于官方例子修改,效果如下:如果不加上Expand,图片的宽度就会导致Row的总宽度大于屏幕的宽度,出现下面的这种情况。二、代码在Row容器中,使用Expand让每个子Widget平分父Widget的总宽度(这里就是整个屏幕的总宽度)。代码如下: Widget _buildDecoratedImage(int imageIndex) { return Container( decoration: BoxDecoration( bord原创 2020-06-02 16:16:26 · 1797 阅读 · 0 评论 -
Provider4.0状态管理
一、单状态共享定义可以修改的模型: 使用mixin(with ChangeNotifier),在数据修改后,调用notifyListeners()通知观众刷新。class CounterModel with ChangeNotifier { int _count = 10; int get counter => _count; void increment(){ _count++; notifyListeners(); }}数据资源挂载,可以使...原创 2020-05-27 15:42:56 · 689 阅读 · 0 评论 -
Future和async(异步函数)、await(同步等待)
一、Future异步任务then 与 Future 函数体共用一个事件循环。而如果 Future 有多个 then,它们也会按照链式调用的先后顺序同步执行,同样也会共用一个事件循环。then 会在 Future 函数体执行完毕后立刻执行,无论是共用同一个事件循环还是进入下一个微任务。对于一个Future对象,执行完成后,后面的then调用会共用Future 函数体的事件循环。会在函数体执行完后,顺序执行。如上图中的黄框所示。如果then函数体是一个 Future 异步任务,这个 t.原创 2020-05-26 11:17:33 · 2170 阅读 · 0 评论 -
Dart语言dynamic类型的使用技巧
在Dart语言中,dynamic可以存储任意类型。当一个变量被声明为dynamic后,编译器则会关闭对此变量的类型检查,对此变量的操作都要靠我们自己来保证正确性。虽然很自由,但带来的隐患确实很大。1、dynamic变量和非dynamic变量之间的赋值 // 同类型赋值没有问题 dynamic a1 = 100; int a2 = a1; // 此时由于a1实际上是int类...原创 2020-04-21 23:05:29 · 3715 阅读 · 0 评论 -
Dart基础之关键知识点2
1、final和const使用场景const适用于编译期就能确定的字面值常量。final适用于需要在运行期才能确定值的常量,且赋值后不能再改变值。只看文字描述可能不好理解,通过下面的例子就会很清楚了,下面的例子如果把final改为const会编译不通过的。 var x = 100; var y = 200; final double xdy = x/y; // x/y的值在运...原创 2020-04-21 13:43:05 · 155 阅读 · 0 评论 -
Dart基础之关键知识点
1、final变量和const变量final 表示一个运行时常量(在程序运行的时候赋值,赋值后值不再改变)。const 表示一个编译时常量,在程序编译的时候它的值就确定了。实例变量可以是final类型但不能是const类型, 只能在以下3个对方进行初始化:在变量声明时; 参数构造函数中(this.变量名); 构造函数的初始化列表中进行初始化;2、常变量可以赋值给非常变量,反...原创 2020-04-20 23:35:21 · 326 阅读 · 0 评论