[英]I Want to Add Widgets Dynamically with Provider
我正在使用 Provider package,我想动态添加要显示的小部件。 我编写了如下代码,但小部件没有显示任何内容。 没有发生错误。
// Contains widget and related data
class WidgetData {
Widget? child; // want to show this
String data1;
int data2;
}
class Model exteds ChangeNotifier {
List<WidgetData> widget; // I want to show all of this widget.child
void addWidget(Widget child) {
print("Called1") // "Called1"
var w = widgets.toList();
w.add(child);
widgetData = w;
notifyListeners();
}
}
class Example extends StatelessWidget {
@override
build (BuildContext context) {
return Scaffold(
body: Column(children: [
for(var i in context.watch<Model>().widget) i.child!;
]);
}
}
当按下按钮时, context.read<Model>().addWidget(Text("test"))
将被调用。 但仍然不显示小部件。
// inside of build(BuildContext context)
FloatingActionButton(
onPressed: () => context.read<Model>().addWidget(Text("test")),
child: Icon(Icons.abc)
);
当然,我在main
中构建了提供者树。
void main() {
runApp(MultiProvider(
ChangeNotifierProvider<Model>(
create: (_) => Model()),
));
child:
....
}
不鼓励在 Flutter 中的构建 function 之外创建和存储小部件。 您的提供者不应该提供小部件,而是提供构建小部件所需的数据,然后您在build
方法中构建小部件。
例如,如果你有一个字符串列表而不是小部件列表,那么在build
方法中,你可以轻松地将该字符串列表转换为Text
小部件,如下所示: Column(children: stringlist.map((e) => Text(e)).toList())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.