问题标签 [inherited-widget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
140 浏览

flutter - 如何撤消在 Flutter 中使用 Provider 删除 ListView 中的 Dismissable 项目

我的应用程序的某个部分需要在购物车中显示产品。

CartScreen 有一个 ListView 加载 CartItem 是 Dismissible 并且用户可以滑动以删除该项目,在该项目上它显示一个带有 UNDO 按钮的 Snackbar,该按钮只是将项目添加回列表。正如您在下面看到的,我使用提供程序将项目添加到 ListView:

购物车屏幕:

购物车项目:

上面我在 onDismissed() 内的 Snackbar 的 UNDO 操作中再次将产品添加到购物车,我收到此错误:

处理手势时引发了以下断言:查找已停用小部件的祖先是不安全的。

此时小部件的元素树的状态不再稳定。

要在其 dispose() 方法中安全地引用小部件的祖先,请通过在小部件的 didChangeDependencies() 方法中调用dependOnInheritedWidgetOfExactType() 来保存对祖先的引用。

抛出异常时,这是堆栈:#0 Element._debugCheckStateIsActiveForAncestorLookup。(package:flutter/src/widgets/framework.dart:3864:9) #1 Element._debugCheckStateIsActiveForAncestorLookup (package:flutter/src/widgets/framework.dart:3878:6) #2 Element.getElementForInheritedWidgetOfExactType (package:flutter/src /widgets/framework.dart:3905:12) #3 Provider._inheritedElementOf (package:provider/src/provider.dart:327:34) #4 Provider.of (package:provider/src/provider.dart:284:30 ) ... 处理程序:“onTap”识别器:TapGestureRecognizer#6111b debugOwner:GestureDetector 状态:准备好赢得竞技场 finalPosition:偏移(386.7,861.6) finalLocalPosition:偏移(66.2,25.5)
按钮:1 发送点击向下

我认为这是因为我在显示快餐栏并且用户单击按钮后,小部件已经被关闭但 idk。我仍然可以在 UNDO 按钮中运行其他代码,但不能在 Provider.of 方法中运行。我试图打印上下文并且上下文仍然存在。所以我不知道发生了什么。

有什么办法可以实现这个功能吗?谢谢。

0 投票
1 回答
57 浏览

flutter - 将数据从一个小部件传递到同一树中的另一个小部件

在我的颤振应用程序中,我需要将数据从一个小部件传递到另一个小部件。两者都封装在一个 Column 小部件中,下图最好地描述了它

在此处输入图像描述

我试过使用继承的小部件,但这似乎没有帮助,这是我创建的继承小部件的代码:

updateMonth() 是一个有状态的小部件,它应该接收和更新month的值,然后将其传递给继承的小部件 monthFromCal()。当我运行它时,我得到“用于空值的空检查运算符”错误。对于您的参考,这里有两个小部件:

我该如何解决这个问题?还有其他传递价值的方法吗?提前致谢

0 投票
0 回答
29 浏览

flutter - 从 Scaffold 子项添加 AppBar 操作,例如 Android 中的 Fragment.onCreateOptionsMenu(使用 InheritedWidget)

在 Android 中,每个 Fragment 都可以使用回调参与填充活动的选项菜单(也称为“appBar 操作”,用颤振的术语来说)Fragment.onCreateOptionsMenu。我希望在颤振中也有类似的机制,即一些小部件能够向 AppBar 添加按钮(“动作”)。

已经打开了有关此主题的线程,但没有一个报告功能完整的示例并包含针对我遇到的确切技术问题的解决方案。

为此,我曾想过使用以下“典型”结构:

  • 一个 StatefulWidget - 我给它起名ScaffoldHandler( ScaffoldHandlerWidget/ScaffoldHandlerState) - 它包装了整个 Scaffold,并使用InheritedWidget以便小部件树更下方的小部件可以以最佳方式获得对它的引用(使用of()执行的经典方法dependOnInheritedWidgetOfExactType())。ScaffoldHandlerState 将各个子项设置的操作保存在一个字段中,并将它们提供给应用栏。

  • 创建 AppBar 的小部件。在该build()方法中,它获取要显示的操作调用ScaffoldHandlerState.of()

  • mixin ScaffoldChild on State,应用于小部件使其能够向ScaffoldHandlerState. 在内部,ScaffoldChild 执行ScaffoldHandlerState.of()in didChangeDependencies()(添加动作)和 in deactivate()(删除动作)。

    我最初使用initState()dispose()但这并没有处理 ScaffoldChild 更改位置但没有从小部件树中永久删除的情况。

我遇到的问题ScaffoldAppBar.build是之前执行ScaffoldChild.didChangeDependencies的,所以当app-bar创建的时候,ScaffoldChild还是要把它的动作放到ScaffoldHandlerState中。奇怪的是,这个问题是由于在页面中插入 ScaffoldAppBar 和 ScaffoldChild 的简单线性顺序:如果我想创建一个底部应用程序栏而不是顶部应用程序栏,则问题不存在,因为会跑前。ScaffoldChild.didChangeDependenciesScaffoldAppBar.build

作为解决该问题的解决方法,我插入了对schedule byScaffoldChild.didChangeDependencies的调用:因此,在 ScaffoldHandler 中插入操作后,应用程序栏将使用新操作进行更新。但是,这个解决方案对我来说似乎是一个 hack。在 stackoverflow 中,我看到很多问题都用 . 我有兴趣了解是否有更好的解决方案,因为我的目的和实际目的是更好地了解小部件的生命周期。 scaffoldHandler.setStateWidgetsBinding.instance.addPostFrameCallback()addPostFrameCallback + setState

有更好的解决方案吗?

这是我的代码

DartPadGist

(我尽量缩短它,但如果它不是很短很抱歉)

0 投票
0 回答
19 浏览

flutter - 如何使用流类使用 rxdart 和验证器类并重建 usign 提供程序颤振实际上我使用了带有 InheritedWidget 的单例

我只想更改我的实际类扩展 InheritedWidget 更改与提供程序 ChangeNotifier

我希望能够在 textController 中进行更改时执行验证并绘制屏幕 我只使用 InheritedWidget 我想要 ChangeNotfier 而不是我想在更多控制器中执行它们,因为我有很多表单并且我想以与流相同的方式验证它们,或者如果有更好的选项来验证 texfields 而无需操作任何按钮,但是在编写内容时会显示错误

0 投票
1 回答
100 浏览

flutter - 尝试通过 Flutter 中的 VxMutation 和 VxState 进行 http 调用

我正在尝试使用 HTTP.get 从 JSON 中获取横幅数据。我确实成功地获取了数据,但是有一些错误导致了这个错误:

在此处输入图像描述

它显示以下错误 2 秒,然后加载图像。它没有显示我放置的加载小部件。我相信 Build 方法是在获取 HTTP 数据之前构建小部件。是这种情况,那么为什么它没有显示 CircularProgressIndicator?

在此处输入图像描述

2-3秒后:

在此处输入图像描述


我在这里使用了VelocityX包。和 VxState 用于状态管理,作为 VelocityX 的一部分。

0 投票
0 回答
33 浏览

flutter - 无法在继承的小部件颤动的后代小部件中将列表滚动到底部

我正在为购物车视图使用继承的小部件。在父小部件中,我将项目添加到列表中并调用 setState 来更新继承的小部件。在子小部件(购物车视图)中,我阅读了更新后的继承小部件项目列表。每次在购物车中创建新条目时,我都想滚动到列表视图的底部。但我无法这样做。

这是我的购物车视图代码。还有另一个小部件,我在其中将项目添加到列表并更新继承的小部件。添加到购物车效果很好,只想使用控制器添加自动滚动。

有人帮我吗?

谢谢

0 投票
0 回答
124 浏览

flutter - 颤振dependOnInheritedWidgetOfExactType()返回null

我正在尝试使用 InheritedWidget 方法在 Widget 树下共享状态。为此,我正在制作一个简单的计数器应用程序。您可以随意加、减、乘或除计数器。

这是一个小型演示,因此未遵循最佳实践。代码行context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>()似乎是null出于某种原因。查看示例和文档时,它应该在小部件树中找到 MyInheritedWidget 并将其返回。但是,我收到来自颤振工具的投诉,称它为空。而且,实际上它也是null如此。

这里返回失败的原因是什么?而且,我需要怎么做才能收到实例?

文件:main.dart

更新:我似乎已将错误的上下文传递给该dependOnInheritedWidgetOfExactType()方法。从更改contextinnerContext解决问题。