在颤振中制作可重复使用的小部件时需要帮助

Posted

技术标签:

【中文标题】在颤振中制作可重复使用的小部件时需要帮助【英文标题】:Need help in making a reusable widget in flutter 【发布时间】:2020-04-29 07:07:57 【问题描述】:

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

中最后包装在小部件中的列的子级

有什么方法可以实现吗?

【问题讨论】:

【参考方案1】:

您可以使用ListView.builder()

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

类似

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


)

【讨论】:

【参考方案2】:

平铺日期

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

这样你可以重复使用

【讨论】:

【参考方案3】:

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

final List<Widget> children;

TileData(this.children);

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

Column(
  children: widget.children
)

【讨论】:

以上是关于在颤振中制作可重复使用的小部件时需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

如何创建自定义颤振 sdk 小部件,重建颤振和使用新的小部件

颤振剪辑,剪辑的小部件周围没有空间

颤振有状态的小部件在热重载和 pushNamed 之后丢失数据

颤振回调到后退按钮上的原始小部件

我调用的小部件未显示在颤振列中

如何暗示颤振小部件是可滚动的?