Skip to main content

Flutter走过的坑(持续更新)

Target of URI doesn't exist'package:flutter/material.dart'

官方下载的flutter中有一个example文件夹,里面有不少flutter的小demo,打开其中一个demo,执行运行的指令后,出现该错误。ios

错误缘由是没有下载flutter依赖包,就像RN没有执行npm install 同样npm

解决方法:执行flutter packages get

flutter: command not found

mac配置环境变量参考该网址https://jingyan.baidu.com/article/8065f87f47b29523312498e4.htmlapp

export PUB_HOSTED_URL=https://pub.flutter-io.cnless

export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cnide

export PATH="$PWD/flutter/bin:$PATH"post

关闭终端,从新打开一次就能够了

具体能够参考https://flutter.dev/community/china

Error on line 45, column 4 of pubspec.yaml: Expected a key while parsing a block mapping

assets: ^

assets前面多了一个空格,删除就行了

More than one device connected; please specify a device with the -d deviceId flag, or use -d all to act on all devices.

ios和flutter混合开发,使用flutter attach能够调试flutter代码

可是运行flutter attach后并无出现预期的效果,而是出现了

More than one device connected; please specify a device with the '-d deviceId' flag, or use '-d all' to act on all devices.

“xxx”的 iPhone • b13a6cf6ca28106dcbd0d6273c205d0fec8583aa • ios • iOS 12.1.2

iPhone X • 108E3AF0-CFF1-4069-8989-0CF95B2EAD31 • ios • iOS 12.1 (simulator)

当时就仔细看第一行是啥意思,又上网查资料浪费的好长时间,感受是个好低级的错误。

其实就是同时链接了2个设备,运行flutter attach -d deviceId选择其中一个就能够了,

或者断开一个设备,只链接一个设备就行了

A RenderFlex overflowed by 240 pixels on the right

渲染的部分超出屏幕右侧的宽度了

解决外层包裹一个能够滑动的widget,例如SingleChildScrollView,

由于我是水平方向超出了,因此还须要加上 scrollDirection: Axis.horizontal

ListView运行时, 报错Vertical viewport was given unbounded height

ListView(
shrinkWrap: true,
children...
)

ScrollView嵌套ListView滚动冲突

ListView添加physics:NeverScrollableScrollPhysics(),禁用ListView的滚动。

使用Android Studio调试项目

点击AS状态栏的flutter attach能够调试咱们的项目(打断点,看变量等),当进入flutter页面时,须要等一段时间才能链接上个人的手机或模拟器,而网络请求部分在等待时间就请求完了,没有进入断点。 解决:在网络请求前加一个延时

await Future.delayed(Duration(seconds: 6,));

The element type 'Type' can't be assigned to the list type 'Widget'

body: TabBarView(
controller: model._tabController,
children: <Widget>[
Content,
Content
]
)


class Content extends StatelessWidget{

@override
Widget build(BuildContext context) {
return Center(child: Text("测试"),);
}

}

调用时加上小括号,将Content改为Content()就能够了

dart中map方法获取index

List arr = ["a", "b", "c"];
List.asMap().map((index, item)=> MapEntry(index,Text(item)
)).values.toList()

关于GestureDetector中onTap点击事件对空白处点击不相应的bug

GestureDetector(
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Text("左"),
Text("右")
],
),
),
onTap: () {
print("点击了Container");
},
);

如上代码所示,当点击文字“左”“右”时会触发点击时间,点击其余地方并不会触发点击事件,若是想点击其余空白处也触发点击事件,能够在Contaier加一个color属性,以下代码所示

GestureDetector(
child: Container(
color: Colors.transparent,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Text("左"),
Text("右")
],
),
),
onTap: () {
print("点击了Container");
},
);

因为本地flutter环境与服务器打包flutter环境不一致致使连续点击2次flutter页面崩溃的问题

原来使用的flutter版本为1.2.1,以后升级了flutter版本到1.5.4,对应pubspec.lock中对应的依赖版本有变化

只是本地升级,服务器环境没有升级,因此打包时环境不对,出现了连续点击2次flutter页面致使崩溃,

升级服务器的flutter环境后,问题解决

pageView放在stack里,而此时stack是column的子组件,容易出错

将放置顺序调整为column放在stack里面,pageView放在column中没有问题

输入flutter attach时出现如下提示

Waiting for another flutter command to release the startup lock... 解决:

此时须要打开 flutter/bin/cache/lockfile,删除就好了

参考:https://www.jianshu.com/p/7507d087e9f1

更新flutter版本1.7.8+hotfix.3后出现如下错误

Error: The argument type 'Null Function(ImageInfo, bool)' can't be assigned to the parameter type 'ImageStreamListener'.

解决方法:

将出现错误的地方

_imageStream.addListener(_handleImageLoaded);

改为

_imageStream.addListener(ImageStreamListener(_handleImageLoaded));