Flutter开发问题记录

288 阅读2分钟

刚开始开发flutter,难不免会遇到一些问题,所以在此分为(页面布局问题、开发问题)两部分记录下来,以供来日后找寻问题和方便有缘人

本文已参与「新人创作礼」活动,一起开启掘金创作之路

一:页面布局

1.页面中组件太多不建议用expend,软键盘弹出最下面组件会随着浮动,建议在最外层Container里用SingleChildScrollView

2.需要动态更新界面的对话框
利用StatefulBuilder来实现一些对话框场景,需要对话框动态更新界面的。
比如在对话框里面显示一个checkbox,然后点击会修改checkbox的显示状态。如果是跟之前一样的实现对话框方法,
是无法实现动态去刷新对话框的界面的。
StatefulBuilder可以包含一个child,具有状态,可以调用setState刷新界面。
builder参数,用于创建想要显示的widget,可以调用StateSetter类型的setState参数来进行刷新界面。

二:开发问题

1.type 'String' is not a subtype of type 'Map<String, dynamic>'
这种是类型转换失败
可以通过response.data.runtimeType.toString();方法获取知道运行类型  
然后再把它转化为你想要的类型
2.This widget has been unmounted, so the State no longer has a context (and should be considered defunct). 
此小部件已被卸载,因此状态不再具有上下文(应该认为已失效)。
产生原因:
在调用setState方法,或者在未挂载的页面使用 context,比如 Provider
if (mounted) {
        setState(() {});
      }
PS:dart是单线程语言,基于异步模型。对于 setState 更新数据的时候而 context 已经不存在的情形,会抛出异常,但是 APP 并不会崩溃。 但是在调试模式下,会被捕获且进入该断点
3.The following NoSuchMethodError was thrown building HomePage(dirty, state: Page#644e1):The getter ‘results’ was called on null.
调用为空 可能是所用对象没有new 或者使用对象没有做空处理
4.error-the-instance-member-cant-be-accessed-in-an-initializer
无法在初始值设定项中访问实例成员“用户名” 不能获取到值 因为还没有初始化 没有权限获取到值