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);