记录一次flutter编程中的报错以及解决

记录一次flutter编程中的报错以及解决

  • type '_HashMap ' is not a subtype of type 'Map '
  • flutter把一个组件放到屏幕的下方
  • ListView点击跳转下一个界面返回有问题
  • SizeBox无法约束ListView的子组件宽度
  • 找不到Scallfold
  • String is not type of List
  • Flutter: Unhandled Exception: inheritFromWidgetOfExactType(_LocalizationsScope) or inheritFromEle
  • 几个项目中用到的轮子

type '_HashMap ’ is not a subtype of type 'Map ’

在做Dio的get请求的时候弹出错误提示type ‘_HashMap’ is not a subtype of type ‘Map’。
详情:
这是源代码

	Map params = HashMap();
    params['site'] = site;
    params['page'] = page;
    params['size'] = size;
    return dio.get(Api.GET_NEWS, queryParameters: params);

改错:
给HashMap加入类型就能解决问题

    Dio dio = Dio();
    Map params = HashMap<String, dynamic>();
    params['site'] = site;
    params['page'] = page;
    params['size'] = size;
    return dio.get(Api.GET_NEWS, queryParameters: params);

flutter把一个组件放到屏幕的下方

需要把一个组件放到屏幕的下面,直接用Alignment是没有效果的,因为没有充满屏幕的所有空间
解决方案:
Flex/Column+Expand效果就不错
或者用Stack+Position定位

ListView点击跳转下一个界面返回有问题

ListView点击跳转到下一个界面的时候,点击返回键,会向上跳转两个界面
解决方案:
这是原来的代码:

child: ListView.builder(
        itemCount: _chooseNewsList.length,
        itemBuilder: (context, i){
          return InkWell(
            onTap:() {
              Navigator.of(context).push(
              	MaterialPageRoute(builder: (context) => NewsDetail(_chooseNewsList[i])),
              );
            },
            child: NewsItem(_chooseNewsList[i]),
          );
        },
      ),

这是修改过后的代码

child: ListView.builder(
        itemCount: _chooseNewsList.length,
        itemBuilder: (context, i){
          return InkWell(
            onTap:() {
              Navigator.of(this.context).push(
                MaterialPageRoute(builder: (context) => NewsDetail(_chooseNewsList[i])),
              );
            },
            child: NewsItem(_chooseNewsList[i]),
          );
        },
      ),

就是把context改成页面的Context而不是ListView里的context

SizeBox无法约束ListView的子组件宽度

在ListView中如果嵌套一个SizedBox,起不到约束效果
解决办法:
将ListView换成Column,之后约束,把想要滚动的部分用Expanded+ListView/SingleChildScrollView重新装填

找不到Scallfold

详情:The specific widget that could not find a Scaffold ancestor was:…
解决办法:
这是我在调用函数,showSheet()的时候发生的,改成showModelSheet()就好了

String is not type of List

详情:在项目中有一段返回值类似{“data”:[1,2,3]},转换List会报错
解决办法:
用JsonDecode.convert()函数,即可实现转换

Flutter: Unhandled Exception: inheritFromWidgetOfExactType(_LocalizationsScope) or inheritFromEle

详情:在initState()中显示对话框报错,flutter: Unhandled Exception: inheritFromWidgetOfExactType(_LocalizationsScope) or inheritFromElement() was called before Page.initState() completed…
解决办法:利用Future.delay()延迟执行

几个项目中用到的轮子

  • flutter_svg: ^0.17.4 用来加载svg格式的图片
  • flutter_html: ^0.11.1 用来解析html格式的网页
  • flutter_speed_dial: ^1.2.5 自带动画可以展开的浮动标签
  • share: ^0.6.3+6 分享网址
  • pull_to_refresh: ^1.5.8 下拉刷新,上拉加载
  • url_launcher: ^5.4.5 根据Url启动外部app
  • image_gallery_saver: ^1.2.2 保存图片
  • photo_view: ^0.9.2 图片浏览,配套PageView使用

你可能感兴趣的:(笔记)