首页 > 解决方案 > StreamProvider.value 多次返回相同的值:Flutter

问题描述

StreamProvider.value 使用相同的值多次构建小部件。

StreamProvider<FirebaseUser>.value(
      value: FirebaseAuth.instance.onAuthStateChanged, child:MyWidget);

class MyWidget extends StatelessWidget{
@override
Widget build(BuildContext context){
return Consumer<FirebaseUser>(
      builder: (context, _user, _) {
if(_user!=null){
 print(_user.uid); 
return Container(Text(_user.uid));
 } 
else return Container();

 }
}

输出:

颤振:RlKE7123WKSLKP9AgLCFgY40Wx1

颤振:RlKE7123WKSLKP9AgLCFgY40Wx1

尝试使用选择器而不是消费者,但最终结果相同,但不确定我是否正确使用它。你能帮我解决这个问题吗?

标签: flutter

解决方案


为什么不使用StreamBuilder

StreamBuilder<FirebaseUser>(
  stream: FirebaseAuth.instance.onAuthStateChanged,
  builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) {
    if (snapshot.hasError) {
      return Text("Error!");
    } if (snapshot.hasData) {
      return Text(snapshot.data.uid);
    } else {
      return Text("waiting for data ...");
    }
  },
);

推荐阅读