问题标签 [scoped-model]
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.
dart - 当键盘显示然后消失时,Flutter 会重新启动 TextField 的状态
所以我正在研究一个带有 scoped_model 的 TextField。我将控制器移至模型类,并尝试使用用户在所述 TextField 上输入的文本来更改 Text 的状态。但是当我关闭键盘时,状态发生了变化,TextField 现在是空的,所以在 Text 小部件上也看不到任何东西。这是我的代码:
这是我模型上的相关代码
我在颤振的 github上发现有人有同样的问题,但他们把他送到了 SO,我没有成功找到同一个人的问题。有谁知道如何解决这个问题?谢谢。
dart - Flutter / Dart 使用具有后代和 Navigator 的 Scoped Model
从昨天开始我一直在努力解决这个问题 - 我在选项卡控制器(ScreenTabs)中创建新的 ScopedModel obj,然后通过将每个选项卡包装为 ScopedModelDescendant 将其传递给 BottomNavigationBar 中的多个选项卡(第一级后代,例如:ScreenBook) . 到目前为止一切顺利 - 一切都按预期工作。
问题出现了,当在我的一个选项卡中时,我想导航到它的子级(第二级后代,例如:ScreenBookDetails)并在那里使用 ScopedModel。我已经尝试过使用 ScopedModelDescendant 和 ScopedModel.of(context) 没有运气 - 得到错误:每次都找不到正确的 ScopedModel。
我的代码(为简洁起见跳过了一些):
选项卡控制器
ScreenBook(第一个 ddescendant - ScpodedModel 按预期工作)
ScreenBookDetails(第一个后代 - 错误)
有人可以指出我解决这个问题的正确方法吗?我是 Dart 和 Flutter 的新手,所以在 ScreenSplashScreen 中创建 ScopedModel obj 然后导航到 ScreenLogIn 并尝试在那里使用它时,我可能会遇到类似的问题。
谢谢!:)
dart - 如何追踪为什么 mixin 的一个成员在作用域模型中覆盖另一个成员
我正在编写我的第一个 Flutter 应用程序,并使用作用域模型来管理全局状态。我有一个问题,当我更新一个类的一个对象时,它也会更新另一个包含相同类型对象的类列表。我怀疑这是我的误解,但我陷入了思考和旋转。
这是代码
currentActivity.duration 也会更新 _events[date][0].duration
我在调试器中看到了这种情况。
flutter - 颤振范围模型不更新所有后代“
我的应用旨在使用 Flutter scoped_model 使用来自 API 的实时传感器数据。数据是一个 JSON 数组,如下所示:
那些是设备。我的设备模型如下(json注释):
我的设备范围模型类如下:
我的 UI 旨在成为显示实时数据的设备列表(随着传感器数据的变化重建 ui)和每个设备的详细信息页面,也显示实时数据。为此,我正在使用计时器。列出设备的页面按预期工作,并且每 30 秒“刷新”一次:
问题发生在详细信息页面 UI 上,该 UI 也应该显示实时数据,但它的行为类似于无状态小部件,并且在模型更新后不会自行重建:
我错过了什么?提前谢谢了
flutter - Flutter - 应用范围的通知
是否有正确的方法可以从 Flutter 应用程序中的“根”页面或位置收听流/范围模型,并在收到一些数据后在任何当前打开的页面(可能不是主页)上显示适当的通知(例如 Snackbar) )?
我希望能够在整个应用程序中显示某些通知,而不仅仅是逐页显示。
在这里,我有一个主页,它是我的应用程序初始页面,它开始监听从上下文中检索到的 scoped_model 的流,并且无论用户正在访问哪个页面,只要接收到数据都会显示一个对话框。
这种工作,但真的感觉不正确 - 有没有人这样做过谁可以提供更好的解决方案?
我可以为每个页面添加一个类似的侦听器,但这似乎真的没必要
flutter - 如何路由到页面,而无需在颤动中删除 BottomNavigationBar?
我正在用颤振创建我的第一个应用程序,但我遇到了状态管理问题。我有一个 MainPage.dart 和BottomNavigationBar和 body: 和tabPages[MainTab, ...]。在 MainTab 我有一个 ListView,当我单击 ListView 项目时,它应该打开详细信息,但是不应删除 BottomNavigationBar。下面我有一个设计。(我正在使用Scoped Model)。
我尝试了这些解决方案 https://gist.github.com/HansMuller/0e76c54b1f2d4423efbdc2c185e761ef和How to route to page, without remove BottomNavigationBar in flutter?
但在这些情况下,我无法在没有底部导航的情况下路由到页面。当我单击 FLoatingActionButton: 它应该打开没有底部导航的新页面(BottomNavigationBar 始终保持在底部,即使我不想要它)
flutter - 制作一个应用程序范围的进度条(跨整个应用程序的页面)并使用提供程序在 Flutter 中根据需要管理其状态
我正在尝试制作一个自定义进度指示器小部件,我可以在任何页面中显示或隐藏它(应用程序中的任何位置)。我的方法是为进度小部件绑定提供者值并根据需要切换该值。但我只是不知道应该将 Progress/loader 小部件放在哪里以使其在整个应用程序中工作。
或者我应该在每个所需页面中使用进度小部件并切换它?
我来自 web 开发背景,所以是否有一个相当于 rootPage/ rootscreen 的地方,我们可以在其中放置应用程序范围的组件(如在 React、Ionic 中)。
flutter - 在小部件构建之前在 initstate 中完成作用域模型异步调用
我有一个要求,即在打开页面时进行 API 调用,并使用 API 调用的结果来填充小部件。我必须满足以下情况,例如在进行调用时,显示加载器,如果发生错误,显示一个小部件,如果调用成功,则允许用户重新加载页面,该页面再次调用该方法,使用结果填充小部件。这看起来是 FutureBuilder 的完美用例,但是,如果调用失败,将无法重新加载,因为 FutureBuilder 只执行一次。另一种方法是使用 StreamBuilder,我只需将错误或响应添加到流中,这允许我在调用失败时重新加载页面。streambuidler 方法工作正常。
最初,我尝试通过在 initstate 方法中进行异步 API 调用来使用 ScopedModel 方法,但是,正如预期的那样,api 调用需要一些时间,并且会调用小部件 Build 方法,因此在 api 调用完成之前构建页面并且完成后,即使我调用 notifylisteners() ,小部件树也不会使用 API 调用中的数据重建。有没有办法使用 ScopedModel 方法来完成这项工作?
更新
我以错误的方式接近这个。我最终不需要一个有状态的小部件,而是一个无状态的小部件,在返回一个小部件之前,我在 build 方法中调用了我的 Future。
flutter - 在 Flutter 中使用 ScopedModel 时如何保留数据?
我正在使用ScopedModel从 Firebase 数据库中获取一些数据。
我正在获取事件列表。
- 我从模型内部的端点获取事件;
- 我将事件存储到
List<Event>
模型内部; - 我使用该列表来构建我的
ListView
.
所以,当EventsPage
我打开的第一件事就是在initState()
.
获取网络数据后,我List
的应用程序内部有网络数据,因此我可以使用它来构建我的ListView
.
事件页面.dart
我的问题是,如果我导航到另一个页面然后返回EventsPage
,initState()
将再次调用,所以fetchEvents
. 使应用程序重新加载所有事件列表。
我想在我的应用程序还活着的时候保留下载的数据,所以如果用户去回来,EventsPage
数据不会丢失。
我习惯在 Android 中使用ViewModel
,如何在 Flutter 中做到这一点?
我想继续ScopedModel
在 Flutter 中进行状态管理。
可能的解决方案
我认为一个解决方案是List<Event>
像我一样将事件存储在 a 中。然后,在调用时fetchEvents()
我可以先检查 my List<Event>
is not null 如果是,我不需要再次调用它,因为数据已经加载。
这对我来说似乎是一个糟糕的解决方案,尤其是当我有多个页面获取数据时。假设我加载了第一个,当我转到第二个时,它会假设数据已经加载,因为List<Event>
它是非 null 并且不会再次加载。
flutter - 如何一次构建 sliverlist 的所有元素?
我正在制作一个带有评论部分的屏幕,其中包含评论及其子评论。
我使用 ScopedModel 来管理屏幕的状态。
评论的数据在 List<-model-> 中,子评论的数据在 model->List<-model-> 中。此数据在 ScopedModel 中。
我使用 SliverChildBuilderDelegate 构建了一个 sliverList,因此它只构建屏幕上的小部件。
每个评论 (current_comment) 都有一个回复按钮,在输入后,在 (current_comment)model-> List<-model-> 的末尾添加一个评论模型,并在 ScopedModel 上调用 notifyListener()
现在新添加的子评论有一个标签,将其标识为新评论。
我想要的是:
我希望屏幕滚动到新添加的子评论。
我尝试了什么:
由于新添加的子评论可以由标签标识,因此我在构建该评论小部件时为其添加了一个 GlobalKey。然后在构建完成后,我使用从添加到它的 GlobalKey 获得的偏移量滚动到该位置。
我的问题 :
由于 SliverList 构建的元素仅对屏幕可见,因此新添加的评论远低于父评论(因为回复评论按钮仅在父评论上)并且尚未构建。因此构建器尚未将 GlobalKey 附加到它。
现在,我如何自动滚动到它?
由于密钥尚未附加到它,我如何定位它的位置并滚动到它?
建议我一种方法来一次构建 Sliverlist 的所有元素,以便可以将键附加到元素或其他策略,以便自动滚动到新添加的评论。