因此,我正在制作一个带有抖动的应用程序。因此,在 main.dart 文件中,我正在制作一个组件,该组件基本上是一堆封装在一起的小部件。我必须多次使用此组件,因此我考虑将这些可重用的组件制作到另一个dart文件中,然后将其导入 main.dart 。
这是我的 reusable.dart
代码import 'package:flutter/material.dart';
double mainTab = 150;
class TileData extends StatefulWidget {
@override
_TileDataState createState() => _TileDataState();
}
class _TileDataState extends State<TileData> {
@override
Widget build(BuildContext context) {
return Container(
height: 200 - 15.0,
width: mainTab - 10.0,
child: Padding(
padding: const EdgeInsets.fromLTRB(10, 15, 0, 0),
child: Column(
),
),
);
}
}
我计划以这种方式在我的 main.dart 中使用此TileData窗口小部件
ListView(
children: children: <Widget>[
TileData(
children: <Widget>[
Text('Element 1'),
]),
TileData(
children: <Widget>[
Text('Element 2'),
]),
TileData(
children: <Widget>[
Text('Element 3'),
],
)
],
),
因此TileData()小部件的子级实际上是最后包装在 reusable.dart
中的小部件中的列的子级。有什么办法可以做到这一点?
答案 0 :(得分:3)
创建一个属性并将其用作可重用窗口小部件的构造函数中的参数。
final List<Widget> children;
TileData({this.children});
然后,在您的build方法中,将该属性传递给该列。
Column(
children: widget.children
)
答案 1 :(得分:3)
TileDate
import 'package:flutter/material.dart';
double mainTab = 150;
class TileData extends StatefulWidget {
List<Widget> widgetsList;
TileData({this.widgetsList});
@override
_TileDataState createState() => _TileDataState();
}
class _TileDataState extends State<TileData> {
@override
Widget build(BuildContext context) {
return Container(
height: 200 - 15.0,
width: mainTab - 10.0,
child: Padding(
padding: const EdgeInsets.fromLTRB(10, 15, 0, 0),
child: Column(
children: widget.widgetsList,
),
),
);
}
}
主要
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:test/widgets/TileData.dart';
void main() => runApp(MaterialApp(
home: Scaffold(backgroundColor: Color(0xFF2d3447), body: MyApp()),
));
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView(
children: [
TileData(
widgetsList: [Text("Element 1")],
),
TileData(
widgetsList: [Text("Element 2")],
),
TileData(
widgetsList: [Text("Element 3")],
)
],
);
}
}
通过这种方式,您可以重复使用
答案 2 :(得分:0)
您可以使用ListView.builder()
在TileData
小部件中添加构造函数
类似
ListView.builder(
itemCount:data.length,
itemBuilder: (context,index){
return TileData(data:"Element $index");
}
)