Ich denke , dass Sie _buildBody in den verwenden Kinder Eigenschaften einiger widget, so Kinder eine erwarten Liste Widget (array of Widget) und _buildBody eine zurückgibt ‚Liste dynamisch‘ .
Auf sehr einfache Weise können Sie eine Variable verwenden, um sie zurückzugeben:
List<Widget> widgets = [
Text('Line 1'),
Text('Line 2'),
Text('Line 3'),
];
Column(
children: widgets
)
Beispiel ( flatter create test1 ; cd test1 ; edit lib / main.dart ; flatter run ):
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<Widget> widgets = [
Text('Line 1'),
Text('Line 2'),
Text('Line 3'),
];
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("List of Widgets Example")),
body: Column(
children: widgets
)
)
);
}
}
Ein weiteres Beispiel unter Verwendung eines Widget (oneWidget) innerhalb einer Liste der Widgets (arrayOfWidgets). Ich zeige, wie weit ein Widget (MyButton) reicht, um ein Widget zu personalisieren und die Größe des Codes zu reduzieren:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<Widget> arrayOfWidgets = [
Text('My Buttons'),
MyButton('Button 1'),
MyButton('Button 2'),
MyButton('Button 3'),
];
Widget oneWidget(List<Widget> _lw) { return Column(children: _lw); }
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Widget with a List of Widget's Example")),
body: oneWidget(arrayOfWidgets)
)
);
}
}
class MyButton extends StatelessWidget {
final String text;
MyButton(this.text);
@override
Widget build(BuildContext context) {
return FlatButton(
color: Colors.red,
child: Text(text),
onPressed: (){print("Pressed button '$text'.");},
);
}
}
Ich habe ein vollständiges Beispiel erstellt , in dem ich dynamische Widgets verwende , um Widgets auf dem Bildschirm anzuzeigen und auszublenden. Sie können sehen, dass sie auch online auf Dart Fiddle ausgeführt werden.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List item = [
{"title": "Button One", "color": 50},
{"title": "Button Two", "color": 100},
{"title": "Button Three", "color": 200},
{"title": "No show", "color": 0, "hide": '1'},
];
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Dynamic Widget - List<Widget>"),backgroundColor: Colors.blue),
body: Column(
children: <Widget>[
Center(child: buttonBar()),
Text('Click the buttons to hide it'),
]
)
)
);
}
Widget buttonBar() {
return Column(
children: item.where((e) => e['hide'] != '1').map<Widget>((document) {
return new FlatButton(
child: new Text(document['title']),
color: Color.fromARGB(document['color'], 0, 100, 0),
onPressed: () {
setState(() {
print("click on ${document['title']} lets hide it");
final tile = item.firstWhere((e) => e['title'] == document['title']);
tile['hide'] = '1';
});
},
);
}
).toList());
}
}
Vielleicht hilft es jemandem. Wenn es für Sie nützlich war, lassen Sie mich bitte wissen, indem Sie auf den Aufwärtspfeil klicken. Vielen Dank.
https://dartpad.dev/b37b08cc25e0ccdba680090e9ef4b3c1