QuizApp
- 一个有不错的题目,极简的UI和一点有趣的随机性的测验应用程序;D
前言
-
这是我的第一个Flutter项目,是我为CS50x期末项目做的。只花了大约12小时,就能做出一个能在Android和IOS上运行的功能齐全的应用程序,这种可能性至今仍令我惊叹,这都要归功于Flutter的巨大潜力,它赋能了我做到这一点!
-
这款应用本身相当简单,但它具有一定的随机性,能够吸引用户,让他们总有新鲜感,值得期待;D
我选择Flutter的原因
说实话,因为它让编码应用程序变得如此简单!
- 我们不需要知道Objective C/Swift来开发IOS,或Java来开发Android!
- 只需要一个应用程序,就能在两个平台运行!
- 它由Google管理,所以无需担心!
- 因为我希望通过开发一款应用来数字化我父亲的生意,因此我踏上了App开发者的旅程!?
什么激发了我制作QuizApp
- 我正在跟随Udemy的课程,由Maximilian Schwarzmüller学习Dart和Flutter。
- 我强烈推荐这门课程给任何想轻松地制作高效应用程序的人!?
- 课程链接
我的经验
- 我顺利地跟随了课程教程的一部分,以增加我对Flutter的了解,但是像底部FloatingActionButton这样的部分是我不得不自己去查找的;p
- 尽管实现这些功能花费了时间和精力,但正是它们让我们的QuizApp脱颖而出,并为我们的用户提供独特的东西!
- 现在,尽管Flutter文档非常美观,但当我寻找UI的基础时,要理解多子布局小部件还是相当困难的?
- 哎呀,我还是设法用一个Stack小部件解决了问题,就像‘在理发店待得够久就能理好发’一样;p
关于App
- quiz_app/lib中的主要文件如下:
main.dart
- 包含主QuizApp类、一个有状态小部件的主可执行文件,负责渲染应用程序的主UI。
- 我使用了Flutter提供的MaterialApp库作为基础结构,并加入了我的独特之处!?
- 它有一个_questions列表,其中包含所有问题及其答案(另一个列表;p),这些是单独的映射条目。
- 它还包含_changeQuestion()和_reset()函数,顾名思义;p
- 也负责右下角的FloatingActionButton?
拥有更多的小部件总是比少的好,因为它们使管理和查看代码更加容易!
quiz.dart
- 包含Quiz小部件,一个无状态的;意味着它在实例化后不会随着屏幕更新,而是静态的。
- 它接受两个命名参数
- data,包含questionText和答案列表;以及。
- 回调函数
- 它使用我制作的另外两个小部件——Question和Answer,然后渲染特定的Trivia!?
question.dart
- 包含无状态小部件Question。
- 它接受questionText,即问题。
- 这只会输出一个Container小部件,其中包含一个Text小部件,显示questionText和一些Trivial Styling;p
answer.dart
- 包含无状态小部件Answer。
- 它接受answerText和回调函数handleAnswer。
- 生成并返回一个自定义样式的ElevatedButton小部件作为答案选择!?
result.dart
- 包含Result小部件(无状态),在Quiz完成后由main.dart渲染。
- 接受score参数和回调函数reset。
- 负责Play Again小部件(ElevatedButton)并将其链接到reset。
- 返回一个Container小部件,其中包含ElevatedButton和Text小部件,显示结果和分数。
- 还返回一个具有随机颜色的FloatingActionButton小部件,以奖励玩家的完成?
测试状态
- 该应用程序仅在android上进行了测试,因为我不幸没有Mac!?
- 目前它只支持纵向方向,但我计划通过将基础小部件更改为ListView来使其响应式!?
- 它已在Android版本8+上进行了测试,在早期版本上应该也能顺利运行,除非存在内存上的显著削减。
如何尝试
Android
- 在quiz_app/build/app/outputs/apk/debug/app-debug.apk中安装并运行app-debug.apk。
iOS
怀揣勇气,心怀雄心,我们无所不能!
- 将项目导入X-code。
- 如果您愿意,可以在VM上运行应用程序,或者连接您的IOS设备并在其上运行!?
可用于改进的想法
- 集成用户输入,并在结果中显示用户的姓名等。
- 使用在线源获取新题目;增加题目数量和拓宽题目种类。
- 利用存储来保存喜欢的颜色代码、最高分数等。
- 允许用户通过原生分享选项分享他们的分数或颜色。
我很乐意与愿意提高App开发技能的开发者合作,共同学习! <3 ;D
结束语
- 非常感谢CS50给我这个机会,向世界一流的师资学习实践计算机科学! <3 ?
- 正如David J Malan所说,这就是CS50!