4

所以我正在制作一个带有颤振的应用程序。所以在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 Widget


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中的小部件中

有什么办法可以做到这一点?

4

3 回答 3

6

平铺日期

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")],
        )
      ],
    );
  }
}

这样你可以重用

于 2020-01-12T08:09:29.980 回答
3

创建一个属性并将其用作可重用小部件的构造函数中的参数。

final List<Widget> children;

TileData({this.children});

然后,在您的构建方法中,将属性传递给列。

Column(
  children: widget.children
)
于 2020-01-12T08:06:54.963 回答
0

您可以使用ListView.builder()

TileData在您的小部件中添加构造函数

就像是

ListView.builder(
itemCount:data.length,
itemBuilder: (context,index){
return TileData(data:"Element $index");
}

)
于 2020-01-12T15:38:51.490 回答