Flutter学习笔记(四)项目实践

424 阅读2分钟

鸣谢:

首先谢谢大佬们的开源,学习中参考过的项目及文档:
FlutterUnitflutter_shuqiFlutter中文网Flutter 老孟

项目简介:

该项目主要是练手所用,把学到的东西整理一下,做个小项目,算是对学习的一种总结吧。要学的还有很多,加油吧,打工人。
嘿嘿,不多说,先上图:

主要涵盖内容:仿豆瓣电影列表、仿微博主页置顶、动画启动页、轮播图、复杂列表处理、下拉刷新、Loading图、侧滑Cell等。

主要涵盖内容:登录、二维码展示、加载网页、主题色切换、搜索、静态存储、国际化等。

通过该项目的练手,自己学会了很多,也了解了更多关于Flutter的知识,这周公司也开始了纯Flutter新项目,加油吧,嘿嘿。

项目问题:

当然也遇到了很多问题,学习的过程,就是遇到问题,解决问题的过程。

  1. 很多按钮点击默认有水波纹效果,如何全局去除 splashColor
MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        // 去除全局水波纹效果
        splashColor: Colors.transparent,
        highlightColor: Colors.transparent,
      ),
      home: MainScreenPage(),
    );
  1. 切换tab后保留tab的状态,避免 initState 方法重复调用 AutomaticKeepAliveClientMixin

添加AutomaticKeepAliveClientMixin,并实现对应的方法

bool get wantKeepAlive => true;

同时build方法实现父方法 super.build(context);

  1. setState() called after diapose() 网络请求成功前退出了页面,State 被从对象树销毁
if (mounted) {
  setState(() {
    this._books = dataModel.books;
  });
}
  1. 滑动Sliver列表时,修改状态栏颜色无效 AnnotatedRegion

使用AnnotatedRegion修改状态栏字体颜色,没有作用,要在下面的 SliverAppBar 中设置

SliverAppBar(
            brightness:
                navAlpha > 0.5 ? Brightness.light : Brightness.dark, //修改状态栏颜色
     
          ),
  1. TextField 弹出键盘时,出错 SingleChildScrollView

可以使用 SingleChildScrollView 包裹内容处理

  1. initState 中请求数据,展示Loading报错处理 Future.delayed
 void initState() {
    super.initState();
    Future.delayed(Duration.zero, () {
      _loadData();
    });
  }
  1. 对于接口返回的字符串数据,不可以直接使用isEmpty判空,因为返回null时,会报错
if (str != null && str != "") {
     print("success");
   }

感谢第三方库的贡献:

cupertino_icons、 dio、 qr_flutter、 fluttertoast、 shared_preferences、 cached_network_image、 provider、 webview_flutter、 carousel_slider、 flutter_easyrefresh、 flutter_spinkit、 flutter_slidable

I’m not perfect. But I keep trying.

奉上项目地址:flutter_demo