Flutter 如何创建StreamBuilder的实例<;用户模型>;

Flutter 如何创建StreamBuilder的实例<;用户模型>;,flutter,dart,stream-builder,Flutter,Dart,Stream Builder,我想在整个项目中重复代码中的这一部分,我希望能够在其他地方调用此函数,但问题是您需要将snapshot.data传递到树下的widget,有什么办法吗 Widget UserStreamBuilderShortcut(BuildContext context, Widget widget){ final _user = Provider.of<UserModel>(context); return StreamBuilder<UserModel>(

我想在整个项目中重复代码中的这一部分,我希望能够在其他地方调用此函数,但问题是您需要将
snapshot.data
传递到树下的
widget
,有什么办法吗

Widget UserStreamBuilderShortcut(BuildContext context, Widget widget){

  final _user = Provider.of<UserModel>(context);

  return

    StreamBuilder<UserModel>(
      stream: UserProvider(userID: _user.userID).userData,
      builder: (context, snapshot){
        if(snapshot.hasData == false){
          return LoadingFullScreenLayer();
        } else {
          UserModel userModel = snapshot.data; // cant pass this to instances of UserStreamBuilderShortcut Widget
          return
            widget; // in instances of this UserStreamBuilderShortcut we need to be able to pass snapshot.data here
        }
      },
    );

}
Widget-UserStreamBuilderShortcut(BuildContext上下文,Widget-Widget){
最终用户=Provider.of(上下文);
返回
StreamBuilder(
流:UserProvider(userID:_user.userID).userData,
生成器:(上下文,快照){
如果(snapshot.hasData==false){
返回LoadingFullScreenLayer();
}否则{
UserModel UserModel=snapshot.data;//无法将其传递给UserStreamBuilderShortcut小部件的实例
返回
widget;//在此UserStreamBuilderShortcut实例中,我们需要能够在此处传递snapshot.data
}
},
);
}

您可以为此指定生成器参数

// define a Function type that takes a BuildContext and UserModel
// and returns a Widget
typedef UserModelWidgetBuilder = Widget Function(
  BuildContext context,
  UserModel userModel,
);

// pass it as a parameter in the shortcut function
Widget UserStreamBuilderShortcut({
  BuildContext context,
  UserModelWidgetBuilder builder,
}) {
  final _user = Provider.of<UserModel>(context);

  return StreamBuilder<UserModel>(
    stream: UserProvider(userID: _user.userID).userData,
    builder: (context, snapshot) {
      if (snapshot.hasData == false) {
        return LoadingFullScreenLayer();
      } else {
        UserModel userModel = snapshot.data;
        return builder(context, userModel);
      }
    },
  );
}

如果使用提供者包,则可以从其子窗口小部件调用其流参数

父窗口小部件:

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return StreamProvider<BrewList>.value(
      value: Database().brewList,
      child: MaterialApp(
        home: BrewListTile(),
      ),
    );
  }
}
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回StreamProvider.value(
值:Database().brewList,
孩子:MaterialApp(
主页:BREWLISTILE(),
),
);
}
}
可以访问流的子窗口小部件

class _BrewListState extends State<BrewList> {
  @override
  Widget build(BuildContext context) {
    final brews = Provider.of<List<Brew>>(context) ?? [];
    return Text(brews[0].text);
class\u BrewListState扩展状态{
@凌驾
小部件构建(构建上下文){
最终酿造=提供(上下文)??[];
返回文本(brews[0].Text);

Perfect Professional super Aweasome solution感谢您的编码大师,我想为您命名为代码大师、代码片段之王和颤振之王widgets@RagehElAzzazy哈哈哈,很高兴我能帮上忙:)
class _BrewListState extends State<BrewList> {
  @override
  Widget build(BuildContext context) {
    final brews = Provider.of<List<Brew>>(context) ?? [];
    return Text(brews[0].text);