当前位置:网站首页>第一百期:封装简答的flutter组件
第一百期:封装简答的flutter组件
2022-07-15 11:46:00 【terrence386】
今天继续学习flutter相关的一些知识点,主要包括以下几点内容。
- 简单组件封装
- 常见错误处理
- 个人一些粗浅的理解
简单组件封装
flutter和react类似,分为状态组件StatefulWidget和无状态组件StatelessWidget。
借助它们,我们可以封装我们自己想要的组件。比如想封装一个类似web端的多选标签:
我们可以用FilterChip组件进行封装:
class ChipDemo extends StatefulWidget {
const ChipDemo({Key? key}) : super(key: key);
@override
_ChipDemoState createState() => _ChipDemoState();
}
class _ChipDemoState extends State<ChipDemo> {
List<String> _tags = [
'小猫',
'小狗',
'小鸡',
'小鸭',
];
@override
Widget build(BuildContext context) {
return Container(
child:Wrap(
spacing: 8.0,
children: _tags.map((tag) {
return FilterChip(
label: Text(tag),
selected: _selected.contains(tag),
onSelected: (v) {
setState(() {
if (_selected.contains(tag)) {
_selected.remove(tag);
} else {
_selected.add(tag);
}
});
},
);
}).toList(),
),
);
}
}
我们先声明一个类继承StatefulWidget,然后重写createState方法,_ChipDemoState又继承了State类,他的返回值是一个ChipDemo类,最终返回一个Widget类。
错误信息
在开发阶段以及发布阶段,我们通常会遇到各种各样的报错。这里列举几个我遇到的报错。
Error: Cannot run with sound null
safety, because the following
dependencies
don't support null safety:
在开始针对 null safety 的详细设计之前,Dart 团队定义了以下三个核心原则:
- 默认情况下不可为空,除非开发者明确告知 Dart 变量可以为 null,否则它将认为该变量不可为空。选择这个作为默认选项,因为我们发现 non-nullable 是迄今为止 API 中最常见的选择。
- 逐步采用,因为还有有很多 Dart 代码需要修改,必须把它们逐步迁移到 null safety。在同一项目中应该可以包含 null safety 代码和 non-null-safe 代码,另外我们还将提供工具来帮助开发者进行迁移。
- 完全可靠,如上所述 Dart 的 null safety是可靠的,将整个项目和依赖项迁移到null 安全之后,将获得稳健性带来的全部好处
flutter run --no-sound-null-safety
直接执行上面的命令即可。
The argument type 'Iterable<Widget>' can't be assigned to the parameter type
这个问题和数据类型相关,需要我们对数据类型做一些简单的转换。
Scheme not starting
with alphabetic character
没有以字母字符开头。这里是因为我在定义字符串变量的时候多了一个引号。
Exception in thread "main" java.util.zip.ZipException: zip END header not found
这个是执行build命令时出现的错误。出错原因是因为对应的gradle没有找到。需要我们去更新一下gradle。
但是有时候我们手动去修改不一定能起作用。
我处理的方法是直接用android stidio打开flutter项目中的android文件夹,android stidio会提示我们gradle不可用,然后按照提示信息删除原有的,进行更新即可。
打包android之前似乎需要确保电脑上有java sdk的环境。
粗浅的理解
flutter上手的速度相对来说还是比较快的。因为他其实也是个ui框架,只是它可以跨平台。他的ui有两套风格material和cupertino。除了这两套ui之外,还有很多基础的小组件,前端的组件概念在flutter中被称为部件儿,其实是一样的概念。
flutter也有自己的包管理。我们也可以通过pub来发布自己开发的包。通过https://pub.dev/来搜索我们需要的包,安装到项目里进行使用。
和package.json类似,flutter中的包管理通过pubspec.yaml进行管理。yaml是一种可读性比较高的数据序列化格式。
示例配置:
name: terrence_flutter
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.17.1 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
# 日期时间选择
intl: ^0.17.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
uses-material-design: true
assets:
- images/a_dot_burr.jpeg
- images/a_dot_ham.jpeg
fonts:
- family: Schyler
fonts:
- asset: fonts/Schyler-Regular.ttf
- asset: fonts/Schyler-Italic.ttf
style: italic
- family: Trajan Pro
fonts:
- asset: fonts/TrajanPro.ttf
- asset: fonts/TrajanPro_Bold.ttf
weight: 700
和web端开发一样,flutter的开发同样需要我们去考虑适配问题。我们可以通过一下现成的包去做适配,比如借助screenutil。
总之,flutter的上手难度并不难,但是作为新手,需要花一些时间去熟悉各种小部件的常用属性,以及去思考一些常见的布局的实现方式。甚至一些常用的API,系统交互的API等,真正想要能够独立开发,需要不断的去探索,去思考其中的一些问题。
边栏推荐
- 箭头函数与箭头函数的区别
- Google 推荐在 MVVM 架构中使用 Kotlin Flow
- Binary search (bottom)
- pygame游戏——飞机大战(待完善)
- 2022-04-21 unity entry 8 - sound system
- Take you into the world of swagger in 10 minutes. Take a look
- [design topics] project summary of graduation project based on STM32 - 350 cases
- Difference between idea smart checkout and force checkout
- Interface development does not need to write controller, service, Dao, mapper, XML, VO, which is automatically generated!
- XPath actual combat: climbing the learning ape land (Part 1)
猜你喜欢

【毕设选题】基于STM32的毕业设计题目项目汇总 - 350例

PyGame - airplane battle (to be improved)

any类型转换之谜

Safety index of CCF 202012-1 period end forecast

Figure 1: four directions and three strategies for digital transformation of state-owned enterprises

【毕设选题】基于C51单片机的毕业设计题目项目汇总 - 500例

2022-04-21 unity foundation 1 - 3D mathematics

Shanghai port shipping AI container AI Unicorn gathers flying pupils, and the market share of port and shipping AI products is leading, driving the development of the whole industrial chain of port an

2022-04-18 Unity入门1——窗口布局
![[design topics] project summary of graduation project based on STM32 - 350 cases](/img/be/86532861c1485243825ca3182b39a7.png)
[design topics] project summary of graduation project based on STM32 - 350 cases
随机推荐
Xu Shiwei: the road of go+ evolution
2022-04-18 C# 第4篇——进阶
2022-04-21 unity entry 8 - sound system
可落地的DDD(7)-战术设计上的一些误区
Yunna computer room dynamic environment monitoring expansion scheme
Fragment (III) using fragment in viewpager
Meta announced the launch of make-a-scene: AI image generation can be controlled based on text and sketches
Aike AI frontier promotion (7.15)
2022-04-20 unity entry 6 - light source components
2022-04-18 unity getting started 3 - script Basics
在 PostgreSQL 15 上使用 postgres_fdw 进行事务的并行提交
Wechat applet uni app can submit forms or log in. You need to check the consent agreement before you can proceed to the next step
Meta宣布推出Make-A-Scene:可基于文字和草图控制AI图像生成
To realize the remote direct electromagnetic communication of consciousness, the Dongda team, together with the National University of Singapore and others, is expected to build an electromagnetic bra
2022-04-21 Unity基础2——MonoBehaviour的重要内容
Xpath实战之爬取学习猿地的猿著(下)
Google proposes the reliability machine learning model plex: let the large model put forward appropriate prediction results for out of distribution data
谷歌提出可靠性机器学习模型Plex:让大模型对分布外数据提出合适的预测结果
2022-04-18 C Part 4 - Advanced
Alibaba cloud Internet of things platform construction