flutter - Flutter 状态和流
问题描述
这种代码结构问题。我的应用程序 page1 和 page2 中有两个页面。Page2 y 无关紧要,只是您可以从 page1 导航到 page2 并返回到 page1。
在 page1 我使用这个插件。它显示一个对话框,您可以使用所选语言进行回调。我使用 a 是Stream
因为我必须从异步的共享首选项中加载预定义的语言。我的意图是传递_lang
到第 2 页。我拥有的代码按预期工作。但是,如果您从 page2 导航回 page1,您将获得默认语言,因为我没有调用 setState。如果我setState
在回调中放置一个,则更改不会持续存在,因为每次都会重新构建流。如果我希望在开始时显示默认值,我无法取出流。
StreamBuilder(
stream: langStream.stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
_lenguaje = snapshot.data;
return ListTile(
leading: Icon(Icons.language),
title: Text('${snapshot.data.name}'),
trailing: Text('Your Lang'),
onTap: () {
showLangPicker(
context,
(Language lang) {
_lang = lang;
langStream.update(lang);
},
);
},
);
} else {
return Container();
}
},
),
我处于鸡蛋的状态。谢谢。
解决方案
您需要使用某种状态管理。我会使用提供者。您将如何实现这一点,您将拥有一个扩展ChangeNotifier
名为languageModel
or的应用程序级模型settingsModel
。该模型看起来像这样:
class SettingsModel extends ChangeNotifier {
Language _lang;
Language get lang => _lang;
set lang(Language lang) {
_lang= lang;
notifyListeners();
}
}
然后在第二页中,当您获得您的语言时,只需调用:
Provider.of<SettingsModel>(context, listen: false).lang = yourSelected Language
然后在您的中,ListView
您可以通过以下方式检索语言:调用Provider.of<SettingsModel>(context).lang
或使用Consumer
第一个链接中所示的小部件。
我希望这会有所帮助,并且您可能需要与提供者一起对状态管理进行更多研究以实现此目的,但是使用某种形式的状态管理是解决您的问题的最干净的解决方案,因此您不是围绕框架工作,而是让它有所帮助你。
推荐阅读
- wordpress - 开发一个能够从单个 Wordpress 页面处理多个 CPT 的页面的最佳方法是什么?
- node.js - 如何添加一个简单的中间件来验证 JWT 并确保其被授权?
- javascript - 如何删除对象中的中间字段以访问其中的数组?
- markdown - Markdown:创建带有特定缩进的换行符的嵌套列表
- blockchain - 尝试使用 geth 将 ropsten 测试网同步到本地服务器
- docker - 我的 Jenkins Dockerfile 上的安装问题:找不到存储库
- jquery - Kendo React Gauges 不随容器调整大小而调整大小
- html - 如何在不先写入 .Rmd 的情况下将 R 对象导出到 HTML 文件?
- c# - 将派生类映射到 BaseDto
- azure-powershell - 如何在 Azure PowerShell 中将 API 管理中的订阅从一个用户转移到另一个用户?