当前位置: 代码迷 >> 综合 >> flutter 学习笔记 踩坑记录
  详细解决方案

flutter 学习笔记 踩坑记录

热度:54   发布时间:2023-10-12 18:06:35.0

1、flutter在Android studio中开发,查看log的方式:在代码中打印log的地方使用debugPrint(“”)方式,然后在Android Studio中Terminal中使用如下命令:flutter logs,即可查看log。取消查看,ctrl+C。eg:

flutter 学习笔记 踩坑记录

flutter 学习笔记 踩坑记录

2、学习的一个小技巧,可以借助使用map或者list去动态生成,让变化对应变化,而不是cv大法。

例如如下:要查看颜色的叠合组合模式,可以使用下面的方法:

//叠合组合模式var colorBlendMode = [BlendMode.clear,BlendMode.exclusion,BlendMode.color,BlendMode.colorBurn,BlendMode.colorDodge,BlendMode.darken,BlendMode.difference,BlendMode.dst,BlendMode.dstATop,BlendMode.dstIn,BlendMode.dstOut,BlendMode.dstOver,BlendMode.hardLight,BlendMode.hue,BlendMode.lighten,BlendMode.luminosity,BlendMode.overlay];formImgsColorBlendMode() {var imgsLi = <Widget>[];colorBlendMode.forEach((mode) {imgsLi.add(Column(children: <Widget>[Padding(padding: EdgeInsets.all(5),child: Image(image: AssetImage("assets/imgs/avatar.png"),width: 60,height: 60,color: Colors.red,colorBlendMode: mode,),),Text(mode.toString().split(".")[1]),],));});return imgsLi;}child: Wrap(children: formImgsColorBlendMode(),),

短短几行代码就可以对比查看,而不是改一次,看一次。

参考链接https://juejin.im/post/5c1a34f95188253ff1477cfd

3、修改Android Studio编辑器代码块右边竖线:

3.1 竖线的显示与隐藏

flutter 学习笔记 踩坑记录

3.2 修改编辑器竖线的右移:

flutter 学习笔记 踩坑记录

4、flutter打包apk流程

keytool -genkey -v -keystore F:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias keyn

首先,命令行执行上面命令

然后,在Android包下创建jks文件夹,如图:

flutter 学习笔记 踩坑记录

然后,在Android下创建key.properties文件,如下:

flutter 学习笔记 踩坑记录

然后修改build.gradle文件如下:

flutter 学习笔记 踩坑记录

flutter 学习笔记 踩坑记录

最后,执行命令:flutter build apk即可。

参考1:https://www.jianshu.com/p/fabcfd621e01

参考2:https://www.cnblogs.com/gdsblog/p/10100972.html

5、写一个圆形头像:

Container(width: 80,height: 80,decoration: BoxDecoration(shape: BoxShape.circle,color: Colors.transparent,image: DecorationImage(image: NetworkImage("https://avatars2.githubusercontent.com/u/20411648?s=460&v=4"),fit: BoxFit.cover),border: Border.all(color: Colors.white, width: 1.0)),)

6、dart语言笔记

  1. 在map中添加元素,var map = Map(); map['aaa']='123';这样就可以添加到map中了。如果当且仅当该 key 不存在于 map 中,且要为这个 key 赋值, 可使用putIfAbsent()方法。 该方法需要一个方法返回这个 value 。使用 isEmpty 和 isNotEmpty 方法可以检查 list, set 或 map 对象中是否包含元素。使用 forEach() 可以让 list, set 或 map 对象中的每个元素都使用一个方法。当在 map 对象上调用 `forEach() 方法时,函数必须带两个参数(key 和 value)。使用 map().toList() 或 map().toSet() , 可以强制在每个项目上立即调用函数
  2. 字符串可以通过 ${ expression} 的方式内嵌表达式,可以使用 + 运算符来把多个字符串连接为一个,也可以把多个字面量字符串写在一起来实现字符串连接,使用连续三个单引号或者三个双引号实现多行字符串对象的创建,使用 r 前缀,可以创建“原始”字符串。原始字符串,也就是不转义的字符串
  3. 如果函数中只有一句表达式,可以使用简写语法 =>箭头来代表;调用函数时,可以使用指定命名参数 paramNamevalue;定义函数是,使用 { param1param2, …} 来指定命名参数;使用 @required 注释表示参数是 required 性质的命名参数,当 required 参数缺少时,分析器会提示错误;将参数放到 [] 中来标记参数是可选的,在定义方法的时候,可以使用 = 来定义可选参数的默认值。 默认值只能是编译时常量。 如果没有提供默认值,则默认值为 null。
  4. as, is, 和 is! 运算符用于在运行时处理类型检查,as相当于类型强转,is相当于java中的instanceof,is!就是is的取反:eg: emp as Person      if(emp is Person){}  等   
  5. + 加, - 减, * 乘 , / 除, ~/ 取整 ,%取余 ,
  6. 使用 ??= 运算符时,只有当被赋值的变量为 null 时才会赋值给它。 eg:tmp ??= "123";就是当tmp为null时,赋值为“123”
  7. !expr 反转运算符,当expr为true,则反转为false,eg:bool str = false;print(!str);则输出为true
  8. expr1 ?? expr2

    如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。如果赋值是根据布尔值, 考虑使用 ?:。如果赋值是基于判定是否为 null, 考虑使用 ??。eg:

    String playerName(String name) => name ?? 'Guest';
  9. 级联运算符 (..) 可以实现对同一个对像进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。 这通常可以节省创建临时变量的步骤, 同时编写出更流畅的代码。

    考虑一下代码:

    querySelector('#confirm') // 获取对象。..text = 'Confirm' // 调用成员变量。..classes.add('important')..onClick.listen((e) => window.alert('Confirmed!'));

    级联运算符可以嵌套,例如:

    final addressBook = (AddressBookBuilder()..name = 'jenny'..email = 'jenny@example.com'..phone = (PhoneNumberBuilder()..number = '415-555-0100'..label = 'home').build()).build();

    在返回对象的函数中谨慎使用级联操作符。 例如,下面的代码是错误的:

    var sb = StringBuffer();
    sb.write('foo')..write('bar'); // Error: 'void' 没哟定义 'write' 函数。

    sb.write() 函数调用返回 void, 不能在 void 对象上创建级联操作。

    提示: 严格的来讲, “两个点” 的级联语法不是一个运算符。 它只是一个 Dart 的特殊语法。

  10. ?.运算符:eg :foo?.bar 表示左边的操作符foo可以为null,当foo为空的时候,返回null,否则返回foo.bar。eg:
    class Foo{String bar = "123";
    }var foo;print(foo?.bar);//nullfoo=Foo();print(foo?.bar);//123

    使用 ?. 来代替 . , 可以避免因为左边对象可能为 null , 导致的异常。

  11. 如果要迭代一个实现了 Iterable 接口的对象, 可以使用 forEach() 方法, 如果不需要使用当前计数值, 使用 forEach() 是非常棒的选择;实现了 Iterable 的类(比如, List 和 Set)同样也支持使用 for-in 进行迭代操作 iteration 
  12. 如果 assert 语句中的布尔条件为 false , 那么正常的程序执行流程会被中断.assert 语句只在开发环境中有效, 在生产环境是无效的; Flutter 中的 assert 只在 debug 模式 中有效。

    assert 的第二个参数可以为其添加一个字符串消息。

    assert(urlString.startsWith('https'),'URL ($urlString) should start with "https".');

    assert 的第一个参数可以是解析为布尔值的任何表达式。 如果表达式结果为 true , 则断言成功,并继续执行。 如果表达式结果为 false , 则断言失败,并抛出异常 (AssertionError) 。

  13. 使用类对象的 runtimeType 属性, 可以在运行时获取对象的类型, runtimeType 属性回返回一个 Type 对象。

  14. 在开发期间, 可以使用 assert 来验证输入的初始化列表。

    Point.withAssert(this.x, this.y) : assert(x >= 0) {print('In Point.withAssert(): ($x, $y)');
    }

 

 

 

 

 

 

  相关解决方案