Google如何确定何时启用/禁用夜间模式?

时间:2018-05-06 01:10:37

标签: google-maps flutter

我正在尝试做什么

我目前正在使用创建应用程序,而我正处于十字路口。我在iPhone上使用谷歌地图应用程序,并在晚上的某个时间自动切换到夜间模式。问题是我不知道用哪种方法来确定时间。

我如何考虑这样做

我想到了一些选项来确定何时激活夜间模式,但它们看起来都不准确或部分存在缺陷:

  • 使用地理定位的日落时间然后触发夜间模式。请参阅下面关于黄昏时间的编辑。
    • 虽然我认为这提供了很高的准确性,但我注意到时间略有偏差:请参阅数据编辑进行时间比较。
  • 在设备上使用内置传感器/摄像头。
    • 虽然可能工作,但由于照明因用户环境而异,因此本质上存在缺陷。不断改变房间之间的主题肯定会惹恼用户。
    • 我也不确定每种设备内置了哪种传感器。我知道iPhone有一个环境光传感器,但我不确定其他设备有哪些传感器(特别是Androids)。

截至目前,我最好的方法是结合使用两者:基于日落,设计一种采用日落时间的算法和一个使用内置的时间缓冲区传感器/摄像头,用于确定环境光线何时下降超过特定限制。如果设备没有光传感器,那么我只会回退到用户地理位置的日落时间。

问题

所以我的问题仍然是我的问题标题: Google地图如何决定何时主题应更改为设备上的夜间模式

另外(但不是必需的):是否采用任何方法来帮助开发人员轻松完成此任务?

P.S。我不确定哪个标签适用于夜间模式/黑暗主题(或其他任何人称之为),所以如果您有任何建议请告诉我(我认为没有必要创建新标签)。

编辑

黄昏时间

正如Herb Wolfe在我的问题下面的评论中所建议的,也许谷歌正在使用黄昏时间来切换主题。我绝对可以将其添加到我现有的逻辑中,以使其更加准确。有关详细信息,请参阅下面的数据编辑。

数据

我很难收集到这些数据,所以当我有机会时,我会慢慢将它发布在这里。通过Google检索以下日落和黄昏时间(请参阅下面的来源)。平均值是当天日落和黄昏时间之间的平均值。主题时间由我手动收集。

Date              Sunset     Dusk       Average    Theme
May 5th, 2018     8:25PM     8:57PM     8:41PM     8:40PM
May 29th, 2018    8:50PM     9:25PM     9:07:30PM  9:06PM

来源

3 个答案:

答案 0 :(得分:0)

就像您猜到的那样,Google Maps可能会结合使用来自环境光传感器的数据和时间来确定是否切换到暗模式。 据我所知,Google Maps代码是专有的,因此我们只能推测他们是如何实现的。

不过,让我们展望一下未来。 Android和iOS最近都在其应用程序中引入了暗模式支持,您可以为darkTheme提供MaterialApp属性,使其自动适应用户的偏好。 迟早,Google Maps可能还会使用此OS API,因此,模仿Google Maps行为的最佳方法就是使用darkTheme

(从技术上讲,您还可以查看Google Maps小部件的位图数据,然后根据像素的平均亮度或调色板确定它是使用暗还是亮模式,但这似乎是一个非常解决方法-y的方法。)

答案 1 :(得分:0)

  

另外(但不是必需):Flutter是否采用任何方法来帮助开发人员轻松完成此任务?

从Flutter 1.9开始-在运行时,您可以在任何Widget的MediaQuery.of(context).platformBrightness方法中检查build。这将返回Brightness.lightBrightness.dark,从本质上告诉您设备的黑暗主题状态是什么(分别未设置)。

答案 2 :(得分:0)

仅举一个例子,说明马塞尔在回答中已经说过的话。如果您分别在MaterialApp小部件中设置主题和darkTheme及其亮度值,则您的应用将根据设备的需要在亮和暗模式之间切换。

Here是主题模式下的浮动文档,它确定要使用的主题(默认为ThemeMode.system)。

return MaterialApp(
  theme: ThemeData(
    brightness: Brightness.light,
    primarySwatch: Colors.lightBlue,
  ),
  darkTheme:
      ThemeData(
        brightness: Brightness.dark, 
        primarySwatch: Colors.orange)