QuizApp

  • 一个有不错的题目极简的UI和一点有趣的随机性的测验应用程序;D

前言

  • 这是我的第一个Flutter项目,是我为CS50x期末项目做的。只花了大约12小时,就能做出一个能在AndroidIOS上运行的功能齐全的应用程序,这种可能性至今仍令我惊叹,这都要归功于Flutter巨大潜力,它赋能了我做到这一点!

  • 这款应用本身相当简单,但它具有一定的随机性,能够吸引用户,让他们总有新鲜感值得期待;D

我选择Flutter的原因

说实话,因为它让编码应用程序变得如此简单

  • 我们不需要知道Objective C/Swift来开发IOS,或Java来开发Android
  • 只需要一个应用程序,就能在两个平台运行!
  • 它由Google管理,所以无需担心
  • 因为我希望通过开发一款应用数字化父亲的生意,因此我踏上了App开发者的旅程!?

什么激发了我制作QuizApp

  • 我正在跟随Udemy的课程,由Maximilian Schwarzmüller学习DartFlutter
  • 强烈推荐这门课程给任何想轻松制作高效应用程序的人!?
  • 课程链接

我的经验

  • 顺利地跟随了课程教程的一部分,以增加我对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小部件,一个无状态的;意味着它在实例化后不会随着屏幕更新,而是静态的。
  • 它接受两个命名参数
    1. data,包含questionText答案列表;以及。
    2. 回调函数
  • 它使用我制作的另外两个小部件——QuestionAnswer,然后渲染特定的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小部件,其中包含ElevatedButtonText小部件,显示结果分数
  • 还返回一个具有随机颜色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!

GitHub

查看 Github