【问题标题】:What is the best way to create a single app that hosts multiple user types in flutter?创建一个在颤振中托管多种用户类型的应用程序的最佳方法是什么?
【发布时间】:2020-08-17 19:13:14
【问题描述】:

我正在创建一个应用程序,其中 4 种不同的用户类型将共享大部分相同的代码库。我希望能够根据登录时收到的有关用户的信息导航到应用程序的特定版本。每个应用程序版本都有多个页面、不同的配色方案、不同的权限等,但它们都共享相同的一般流程并具有非常相似的布局。解决此问题的最有效方法是什么?我能想到的唯一解决方案是:

  1. 使用某种类型的逻辑根据用户类型有条件地呈现不同的主屏幕。这是我最有希望的解决方案,但我不太喜欢这个想法,因为我基本上是复制和粘贴每个版本的应用程序的共享代码,并且会留下很多需要跟踪和维护的东西。

  2. 通过构造函数传递用户类型并使用它来更改每个页面... ewww

  3. 某种类型的状态管理系统可能是可能的,但我还没有想通。

我研究了 Flutter 对风味的支持,但它似乎只对能够在运行时拆分应用程序有用。对此有何见解?

【问题讨论】:

  • 您是在谈论 Android 用户配置文件,还是 Firebase auth 之类的东西?
  • Firebase 身份验证 - 但我将根据用户集合中的字段确定登录类型

标签: flutter


【解决方案1】:

状态管理是要走的路。学习使用 provider、flutter_bloc 或任何其他解决方案。恢复其中的用户类型,您将能够在不同的页面中访问它。

您可以创建一个包含所有特定参数(颜色、权限等)的类,并为每个用户类型创建一个对象:

class Params {
  Params(this.color, this.permission);
  Color color;
  int permission;
}

Map<String, Params> params = {
  "admin": Params(Colors.red, 5),
  "guest": Params(Colors.grey, 0)
};

// Somewhere in the widget tree
color: params[userType].color,

不是最干净的解决方案,但它有效。

是的,尝试尽可能少地重复代码。您可以在小部件树中使用条件、for 循环和其他语法糖来使其适应用户状态。

【讨论】:

  • 您知道是否有一种方法可以根据登录用户的类型动态设置主要色板/颜色?我决定走提供者的道路,但似乎无法让它发挥作用
  • 是的。查看提供程序示例选项卡。 Provider 位于树的最顶端,在 runApp() 调用中。这意味着您可以从ThemeData 访问其状态,因此可以根据它设置其primaryColor 参数。这就是实现动态主题(如暗模式)的方式。
猜你喜欢
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2015-02-11
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多