【问题标题】:Flutter – question about architecture, providers and fetching data from serverFlutter——关于架构、提供者和从服务器获取数据的问题
【发布时间】:2021-02-07 06:25:47
【问题描述】:

我是一个相当新的 Flutter 程序员,所以请原谅以下问题中的任何缺陷......

我正在为结构/架构的困境而苦苦挣扎。这是背景: 应用理由:

  • 我的应用允许其用户检查他们所在地区的少量工作,以及他们是否有时间并在适当的位置执行工作以获得报酬,
  • 该应用使用标准 REST API(不是 Firebase),因此不能依赖服务器发送状态更改通知来触发重新获取数据,
  • 关键要素是 (1) 给定地址的最新工作列表 - 其他用户可能已经在某个地址中完成了工作(定时刷新列表,例如每 5 分钟一次),以及 (2)应用需要跟踪用户的位置,如果用户在刷新时间内移动超过 2 公里,则相应地向服务器请求作业,

挑战:

  • 我猜在基本级别上,应用程序应该有以下提供程序:(1) auth - 提供 authToken,(2) geolocation - 定期检查用户的位置,(3) jobList - 用于特定位置(获取高级作业描述和地址(,(4)jobDetails - 获取执行特定作业的确切指令,
  • 如您所见:(2) 地理位置和 (3) jobList – 需要以编程方式刷新(间隔或在某些地理位置更改时),而 (1) auth, (4) jobDetails 由用户触发。

最大的问题 ;) 是……对于上述类型的应用程序的正确架构是什么?更具体地说:

  • 我是否应该使用服务来连接服务器 API,而这些服务又会被提供者使用?
  • 如何确保在计时器和地理位置重定位事件上以编程方式重新获取作业列表?
  • 如何持续侦听位置变化以检测重定位,但又不会让应用程序不堪重负?
  • 我应该将(快速过时的)jobLIst 数据存储在其对象类中,还是应该使用设置提供程序或本地数据库,或者可能有一种简单的方法来存储最新的 JSON 响应,而不必构建设置提供程序或数据库映射?
  • 在我对 Auth api 的所有调用中,我需要提供 deviceId - 如何使其在整个应用程序中可用 - 这是相当静态的,但在身份验证中需要,所以检查它是否应该成为身份验证提供程序的一部分?

如果您能对上述内容发表评论或提出相关示例的来源,我将不胜感激。

感谢和欢呼!

【问题讨论】:

    标签: flutter rest flutter-change-notifier


    【解决方案1】:

    以下是我的想法:

    • 如何持续侦听位置变化以检测重定位,但又不会让应用程序不堪重负?

    您可以依靠第三方为您执行此操作。如:geolocator。有了这个,您可以指定在包裹通知您用户位置更改之前用户必须移动的距离。

    • 我应该将(很快过时的)jobLIst 数据存储在其对象类中还是...

    由于职位列表应用程序很可能会在各个地方经常使用这些数据,因此我更喜欢使用 db.如果您打算在移动端进行某种分析或收集任何见解,从长远来看,这也会有所帮助。

    • 在我对 Auth api 的所有调用中,我需要提供 deviceId - 如何使其在整个应用程序中可用...

    当您的应用程序初始化时,您可以获取设备ID 并将其存储在shared_preferences 中。然后在 auth api 中,您可以在调用 API 之前检索它。

    • 我是否应该使用服务来连接服务器 API,而这些服务又会被提供者使用?

    至于地理位置,geolocator 可以向您更新位置的变化,您可以基于此进行 API 调用。

    但是,如果您打算使用基于计时器的方法来刷新您的职位列表,那么您必须意识到您的用户可能会面临由您的数据不一致引起的问题。如果您有解决它的计划,那么这个implementation here 可能会有所帮助。但我强烈认为支持推送通知的服务器或 Web 套接字方法在这里会是理想的选择。

    【讨论】:

    • 嗨 - 感谢您的想法!我需要先消化它们才能做出反应;)干杯!
    猜你喜欢
    • 2021-04-21
    • 2020-02-08
    • 1970-01-01
    • 2016-11-08
    • 2020-05-06
    • 2020-09-22
    • 2018-04-19
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多