这周一开始尝试使用Flutter写一个demo项目,对dart之前一点都不会。
但是不管三七二十一,先让AI给我生成一个demo项目,然后不懂的地方直问,很快就了解了Flutter的各种基础语法和编译过程。
后续会革开发者自己的命啊。

其中使用到的AI IDE是字节跳动的trae。

是为记。

  1. 事先需要把Flutter的环境搭建好
  2. 给AI说我需要创建一个项目,它会给出具体的命令
flutter create sport_track --platforms=web
  1. 对生成的代码中我不理解的地方,直接选中问AI就可以。
    例如下面图片中的required是什么意思,这个是不是一个构造函数,你都可以问AI,它很快就给出解释
    在这里插入图片描述
avatar 字段没有设置为 required 是因为它是一个可选字段。在用户系统中,头像通常不是必需的信息,用户可以在注册时不上传头像,或者使用系统默认的头像。

这种设计有以下好处:

1. 提高用户注册的便利性,不强制要求用户上传头像
2. 允许用户后续再更新头像
3. 可以为空值时使用默认头像

这个构造函数的特点和作用:

1. 花括号 {} 表示这是一个命名参数构造函数,意味着在创建对象时需要明确指定参数名称
2. required 关键字表示该参数是必须的,不能省略
3. this. 语法是一种简写方式,直接将参数赋值给同名的类成员变量
  1. 例如,我问后端我写好了,前端Flutter怎么调用后端API呢?
    它可以直接告诉我,先在配置文件中加入依赖,新建一个工具类,用来访问后端
    在这里插入图片描述
  2. 再例如,对下面代码的解释
const MyApp({super.key});

这行代码是 Flutter 中构造函数的声明,让我解释一下各个部分:

  1. const :表示这是一个常量构造函数。当构造函数的所有参数都是常量时,可以在编译时创建widget的不可变实例,这样可以提高性能。
  2. MyApp :类的构造函数名称,与类名相同。
  3. {super.key} :
  • 花括号 {} 表示这是一个命名可选参数
  • super.key 是将传入的 key 参数传递给父类(StatelessWidget)的构造函数
  • key 参数用于在 widget 树中唯一标识一个 widget,Flutter 用它来决定是否需要更新或重建 widget
  1. 这种写法是 Flutter 中的标准做法,特别是对于继承自 StatelessWidget 或 StatefulWidget 的类。它允许我们这样创建 widget:
MyApp(key: UniqueKey())  // 带 key 参数
MyApp()                  // 不带 key 参数

总的来说,这行代码使得 MyApp 类可以接收一个可选的 key 参数,并确>保这个 key 被正确地传递给父类 StatelessWidget。

  1. 更智能的是它可以帮助你生成框架代码,你只需要说你希望生成什么功能就可以。但是这里还是需要你懂一些基本的数据流程和debug经验,否则的话还是有一些困难。
    例如,我让它给我把现在生成的页面中中文字段都提取出来,我希望做多语言支持。
    它就会创建一个资源文件,把所有的页面中的文字提前出来,并生成中文和英文的两个数组。
    在这里插入图片描述
  2. 更夸张的时,有时你只需要把程序的错误提示给它,它就会给出解决方案,80%的时候都是对的。我只碰到一两次的时候,它的给方向时错误的。
    例如:
    我直接给出后端报错

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.trae.sporttrack.dto.ApiResponse[“data”]->java.util.HashMap[“memberStats”]->java.util.ArrayList[0]->com.trae.sporttrack.entity.UserHibernateProxyHibernateProxyHibernateProxySAXjuMdJ[0]->com.trae.sporttrack.entity.UserHibernateProxyHibernateProxyHibernateProxySAXjuMdJ[“hibernateLazyInitializer”])

它直接给出解决方案
在这里插入图片描述
在写这篇文章的时候,在网上搜索了一下,发现第一个页面就是stackoverflow网站,它的第二个高赞解答就是这个问题,这也解释了stackoverflow在AI出现之后访问量直线下滑的原因了。
在这里插入图片描述

https://stackoverflow.com/questions/52656517/no-serializer-found-for-class-org-hibernate-proxy-pojo-bytebuddy-bytebuddyinterc

下面时gemini给出的解释
在这里插入图片描述

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐