如何在颤动中从另一个屏幕进行更改

Posted

技术标签:

【中文标题】如何在颤动中从另一个屏幕进行更改【英文标题】:how to make changes from another screen in flutter 【发布时间】:2020-09-08 17:51:13 【问题描述】:

我是 Flutter 的新手,我在项目的逻辑部分需要帮助,所以如果这个问题不属于 SOF,请告诉我。

所以我在一个屏幕上有一堆卡片,我想从另一个屏幕控制这些卡片,但我不确定如何实现以及它背后的逻辑,所以有人可以帮助我吗?

所以这个想法是,用户可以在主屏幕中查看成堆的卡片,但他们不能重新排序他们的位置,如果用户想要这样做,那么他必须去重新排序屏幕。

应用程序的基本概念如下所示

    Home Screen
    .......................

    Card 1
    Card 2 
    Card 3

    //All cards are stack together

    Reorder Screen. 
    .........................

    Button 1 (syn to Card 1)
    Button 2 (syn to Card 2)
    Button 3 (syn to Card 3)

    it will appear in this order but the user can move their position 
by drag and drop and this will also change the order of the Cards in Home Screen too,

我知道不看任何代码会很困难,但如果您被要求这样做,请告诉我您将如何实现此功能。

对逻辑部分的任何建议或帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

我认为您想要的是状态管理解决方案。它们有很多,各有优缺点。我(和 Flutter 团队)会建议 Provider

基本上,您的Provider 将保存卡片数据列表和重新排序的功能。

然后,两个屏幕都将依赖于该数据(使用Consumer)。

并且重新排序屏幕会调用类似context.read<YourProvider>().reorder(oldIndex, newIndex) 来重新排序列表。

查看此内容了解更多详情:Simple app state management

如果您想了解其他 SM 解决方案:List of state management approaches

【讨论】:

【参考方案2】:

您正在尝试做的事情称为状态管理。你状态是可以改变的数据。最简单的选择是将变量从卡片屏幕传递到按钮屏幕。然后按钮屏幕将对此状态进行更改,并将其传回。您可以仅使用有状态小部件和setState 来完成此操作。对于更复杂的状态,您将需要使用更高级的系统,例如the bloc pattern 或providers。

对于此示例,您可以将列表从卡片屏幕传递到按钮屏幕。按钮屏幕修改此列表,然后您使用 setState 将更改应用到屏幕。更改列表中项目的顺序时,请注意小部件keys。

【讨论】:

以上是关于如何在颤动中从另一个屏幕进行更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中从tab1(不是重建tab2)更改tab2的状态

如何在颤动中从导航器堆栈中弹出最后三个路由

错误状态:在颤动中从 addStream 添加项目时,您无法关闭主题

如何在 Kivy 中从 python 代码更改屏幕

在颤动中从 FCM 回调导航到特定屏幕

导航抽屉未在颤动中从 APPBar 小部件打开