Tôi nghĩ rằng bạn sử dụng _buildBody trong thuộc tính con của một số widget, vì vậy trẻ em mong đợi một List Widget (mảng Widget) và _buildBody trả về một 'Danh sách động' .
Theo một cách rất đơn giản, bạn có thể sử dụng một biến để trả về nó:
List<Widget> widgets = [
Text('Line 1'),
Text('Line 2'),
Text('Line 3'),
];
Column(
children: widgets
)
Ví dụ ( flaming tạo test1 ; cd test1 ; chỉnh sửa lib / main.dart ; chạy rung ):
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
)
)
);
}
}
Một ví dụ khác sử dụng một Widget (oneWidget) trong Danh sách các Widget (arrayOfWidgets). Tôi chỉ ra cách mở rộng một tiện ích (MyButton) để cá nhân hóa một tiện ích và giảm kích thước mã:
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'.");},
);
}
}
Tôi đã làm một ví dụ hoàn chỉnh rằng tôi sử dụng các widget động để hiển thị và ẩn các widget trên màn hình, bạn cũng có thể thấy nó chạy trực tuyến trên dart fiddle .
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());
}
}
Có thể nó sẽ giúp ai đó. Nếu nó hữu ích cho bạn, vui lòng cho tôi biết bằng cách nhấp vào mũi tên lên. Cảm ơn.
https://dartpad.dev/b37b08cc25e0ccdba680090e9ef4b3c1