你如何在 Flutter 中创建服务/提供者?

Posted

技术标签:

【中文标题】你如何在 Flutter 中创建服务/提供者?【英文标题】:How do you create Services/Providers in Flutter? 【发布时间】:2018-09-15 23:48:42 【问题描述】:

假设我需要一个包含所有用户变量和函数的用户服务,以及另一个包含所有项目变量和函数等的项目服务。我希望所有这些数据和函数在整个项目中都可用,将用户数据传递到例如,它是必需的。

我怀疑它与继承的小部件有关,但它是如何工作的?就像,我看到了如何在根级别使用一个继承的小部件,但是我应该在根级别为每个服务构建一堆继承的小部件吗?或者只是将所有数据放在一个***继承的小部件中?看起来那样可能会变得混乱。我还没有看到这样的例子。

...或者我应该只使用带有静态变量的类并在需要的地方调用它?

【问题讨论】:

medium.com/@mehmetf_71205/inheriting-widgets-b7ac56dbbeb1 【参考方案1】:

请参阅上面 Günter 提供的链接。如果您有 30 分钟观看 Brian Egan 的 DartConf 18 演示文稿:Keep it Simple, State。另请参阅 Brian 的示例代码 here。他展示了使用带有 Controller 和 Flutter Redux 的 InheritedWidget 编写的同一个应用程序。

这是我的一个简单应用程序中单个 InheritedWidget 的示例...

class StateContainer extends InheritedWidget 
  final List<Membership> memberships;

  final IntFunction getNextIndex;
  final VoidMembershipFunction updateMembership;
  final VoidIntFunction deleteMembership;

  const StateContainer(
    this.memberships,
    this.getNextIndex,
    this.updateMembership,
    this.deleteMembership,
    Widget child,
  )
      : super(child: child);

  static StateContainer of(BuildContext context) 
    return context.inheritFromWidgetOfExactType(StateContainer);
  

  @override
  bool updateShouldNotify(StateContainer oldWidget) 
    return true;
  

我将 MaterialApp 作为孩子传入。然后,树的很大一部分变成无状态的,因为它可以访问 StateContainer 中的数据和方法。您可以将这些视为您的模型和控制器合二为一。树中的构建方法通常以...开头。

  @override
  Widget build(BuildContext context) 
    final StateContainer container = StateContainer.of(context);

访问它们。

你说得对,单个 InheritedWidget 很快就会变得笨拙——这是你可能投资探索 Redux 的地方——请参阅演讲的最后 10 分钟。以我的经验,当最终比较所有成员变量时,最混乱的区域是 updateShouldNotify 方法。 (在这个简单的例子中,只有一个成员变量,并且 setState 只在它发生变化时被调用,所以它总是为真。)

【讨论】:

以上是关于你如何在 Flutter 中创建服务/提供者?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Flutter / Dart中创建异步回调?

如何在 Flutter 中创建带有圆角的模态底页?

如何在flutter android开发中创建这种布局?

如何在 Flutter 中创建带有底部彩色边框的 AppBar?

在 Flutter 中创建双向 PageView 滚动?

如何在 Flutter 中创建服务以使应用始终在后台运行?