Flutter 实战项目:一言 - 总结

·

1 min read

因为刚开始接触 Flutter,这个小册是我最近买来想说学习一下 Flutter,我看小册介绍是适合入门的,结果一看课程一整个大傻眼。重点内容不细讲,内容缺斤少两,质量堪忧。但是还是顺着思路自己做了下来。


小册链接:https://s.juejin.cn/ds/iLosUrkS/

网络图片 CircleAvatar 组件

CircleAvatar 组件可以插入图片,如果 foregroundImage 加载失败,则会加载 backgroundImage,如果再失败就使用 backgroundColor

其中有两个失败的回调函数可以传参 onForegroundImageErroronBackgroundImageError

要对其插入网络图片,则上面的参数可以使用 NetworkImage 获取图片资源。

网络请求

项目中网络请求使用的是 http 包。

Flutter 中的包可以从 pub.dev 中搜索选择。

然后在项目中的 pubspec.yaml 文件中添加在 dependenciesdev_dependencies,具体添加在两者哪一个中,需要根据项目情况。

项目大致用法是写一个异步函数,通过异步函数调用 http.post 方法来获取一言接口返回的数据,将数据 setState 到文字状态变量。这个函数需要在生命周期 initState 中调用。

动画特效

不同于 Flutter 入门小册猜数字项目的是,这里直接用了 AnimatedOpacity 来进行动画过渡,而不是通过 with SingleTickerProviderStateMixin 并使用 AnimationController 来进行动画过渡。这样就少了对 AnimationController 的注册和卸载。

资源管理:字体

在 Flutter 中,只需要把字体文件放到开发目录的任一位置,并在 pubspec.yamlflutter->font 中添加即可。

小册中把资源文件都放在 assets 文件中,并做了分类。

每次修改 pubspec.yaml 后都需要执行一次 dart pub get 命令对资源进行更新。

pub get 命令确定当前应用所依赖的包,并将它们保存到中央系统缓存(central system cache)中。如果当前应用依赖了一个公开包,Pub 会从 Pub 站点 该包。对于一个 Git 依赖,Pub 会 Clone 该 Git 仓库。

同样包括包的相关依赖也会被下载。例如,如果 js 包依赖 test 包, Pub 会同时获取 js 包和 test 包。

日夜模式切换

实现日夜模式切换,需要在 MaterialApp 中设置 themedarkTheme

因为项目中添加了按钮来控制日夜模式,所以需要使用 WidgetsBindingObserver 来监听系统自带的日夜模式切换。用法跟 AnimationController 大致相同,同样是使用 withmixins

做法如下:

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

通过 didChangePlatformBrightness 来监听切换。在做这一步的时候,由于小册年份已久,window 字段已经不能使用,需要使用 platformDispatcher 来获取 platformBrightness

  @override
  void didChangePlatformBrightness() {
    Brightness brightness = WidgetsBinding.instance.platformDispatcher.platformBrightness;
    if (!customTheme) {
      setState(() {
        if (brightness.name == "light") {
          darken = false;
        } else {
          darken = true;
        }
      });
    }
  }