android - 将值从有状态类的状态传递到不同的小部件?
问题描述
我有一个功能:
class LoginPage extends StatefulWidget {
static const routeName = '/auth';
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
在类 _LoginPageState 扩展状态中,我有一个布尔变量“已注册”,当用户第一次注册时,该变量在 setState 内更改为 true。每当它发生变化时,如何将这个值传递给我的主函数?此外,这个变量也需要从不同的地方更改为 true。基于它,我想向我的用户显示不同的屏幕 - 如下所示:
home: Scaffold(
resizeToAvoidBottomInset: false,
body: Container(
child: registered ? OnboardingPage() : HomePage(),
),
),
你能给我看一些代码或指导我吗?谢谢你的帮助!
解决方案
You can use a combination of StreamBuilder
and Provider
to first get the data asynchronously, and then send that data to different places in your widget tree. Something like:
final StreamController _controller = StreamController();
// Provide this _controller in your top level widget tree
return Provider<StreamController>(
create: (context) => _controller,
child: MaterialApp(...),
);
In your _LoginPageState
, whenever you get a new registered
value:
// ... other lines
var registered = async getUserRegisterStatus() // sample method
// Add the new value to Stream
Provider.of<StreamController>.add(registered);
You can then use this controller to notify any below widget of the change of value:
// Sample place that needs the value
home: Scaffold(
resizeToAvoidBottomInset: false,
body: StreamBuilder<bool>(
initialValue: false
stream: Provider.of<StreamController>.stream,
builder: (context, snapshot) {
if (!snapshot.hasData) return Container(child: CircularProgressIndicator());
var registered = snapshot.data;
return Container(
child: registered ? OnboardingPage() : HomePage(),
);
}
),
),
推荐阅读
- python - 在 Python/Selenium 中创建登录和注销循环
- python - 在 HERE 的公共交通 API 中将交通模式限制为步行时遇到错误 GW100
- c# - 无法在嵌套的异步等待中命中断点
- typescript - React Native -> React Native Web 与 webpack 和 JSX
- django - 如何更新现有项目的 Cookiecutter Django 配置?
- c++ - 声明中的异常规范与先前的声明不匹配
- node.js - Lambda - Nodejs SDK s3.upload() 没有被触发
- javascript - 交易状态——数据类型——从字符串到数字的转换——使用javascript
- visual-studio-code - VSCode 中多行数组和长行的更漂亮格式
- python - Pandas 中的 apply() 方法