将小部件封装在flutter中自己的类中?

时间:2018-05-27 16:51:26

标签: dart flutter

我正在尝试为tile创建listview。当tile放在listview文件中时,tile正在工作,我想知道如何将tile窗口小部件封装到自己的类文件中。

具体来说,如果tile对象没有参数,我可以简单地扩展一个无状态小部件并调用build方法返回一个新的tile对象。 但是如果要使用参数(即自定义文本)创建tile对象,我该如何传递此信息?或者将小部件保留在listview类本身中会更好吗?

示例:

class Tile extends StatelessWidget {

  @override
  Widget build(BuildContext context){
    return _tile(); //Error, How do i pass the arguments?
  }
  Widget _tile(String text, String time) {
    return new Align(
      child: new Container(
        // padding: EdgeInsets.all(5.0),
        ...

2 个答案:

答案 0 :(得分:4)

我认为你可以简单地创建一个构造函数并使用它

import 'package:flutter/material.dart';

class Tile extends StatelessWidget {
  String text;
  String time;

  /// Here is your constructor
  Tile(this.text, this.time);

  @override
  Widget build(BuildContext context) {
    return _tile(this.text, this.time); //Error, How do i pass the arguments?
  }

  Widget _tile(String text, String time) {
    return new Align(
        child: new Container(
          // padding: EdgeInsets.all(5.0),
        ));
  }
}

答案 1 :(得分:0)

通常,在创建窗口小部件构造函数时,您还会添加一个Key并调用super。由于小部件是不可变的,因此变量也应标记为final。

class Tile extends StatelessWidget {

  // make these final
  final String text;
  final String time;

  // constructor
  const Tile({Key key, this.text, this.time}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ListTile(
      // ...
    );
  }
}

并这样称呼它:

Tile(text: 'hello', time: '5:30');

创建自定义构造函数非常普遍,以至于Android Studio中甚至还有一个快捷方式。

  1. 写出最终变量的名称。
  2. 将光标放在它们上,然后按Option + Retern(或Alt + Enter)。

enter image description here

图片来源here