首页 > 解决方案 > Flutter上的函数获取Widget时无法在ListView.Builder上显示Widget

问题描述

我正在尝试填充 a ListView,所以我想为每个所需的小部件使用一个函数,避免在选项switch上编写大量代码。case:我的问题是,当我使用函数返回小部件时,屏幕上没有显示任何内容,但是如果我在case选项上编写小部件的所有代码,则会显示屏幕的内容。为了显示我的问题,我只使用第一个选项。

代码(什么都不显示):

  Widget getBody(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(16.0),
      child: new ListView.builder(
          itemCount: 9,
          itemBuilder: (BuildContext context, int index) {
            switch (index) {
              case 0: // Descricao
                showDescription();
                break;
              case 1: // Produto
                _showProduto();
                break;
              case 2: // Preco Unitario
                _showPrecoUnitario();
                break;
              case 3: // Quantidade
                _showQtd();
                break;
              case 4: // Total
                _showTotal();
                break;
              case 5: // Pago por
                _showPagoPor();
                break;
              case 6: // Conta de referencia
                _showContaDeReferencia();
                break;
              case 7: // Data
                _showData();
                break;
              case 8: // Notas
                _showNotas();
                break;
              default:
                print('DEFAUL ITEM BUILDER');
            }
          }),
    );
  }

 Widget showDescription() {
    return new TextField(
        cursorColor: Color(0xFF801E48),
        controller: _txtDescricao,
        decoration: InputDecoration(
            fillColor: Color(0xFF801E48),
            labelStyle: TextStyle(fontSize: 16.0, color: Color(0xFF801E48)),
            hintText: 'Ex.: Almoço com cliente',
            focusedBorder: UnderlineInputBorder(
                borderSide: BorderSide(
              color: Color(0xFF801E48),
            )),
            labelText: 'Descrição'));
  }

代码工作:

  Widget getBody(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(16.0),
      child: new ListView.builder(
          itemCount: 9,
          itemBuilder: (BuildContext context, int index) {
            switch (index) {
              case 0: // Descricao
                return new TextField(
                    cursorColor: Color(0xFF801E48),
                    controller: _txtDescricao,
                    decoration: InputDecoration(
                        fillColor: Color(0xFF801E48),
                        labelStyle:
                            TextStyle(fontSize: 16.0, color: Color(0xFF801E48)),
                        hintText: 'Ex.: Almoço com cliente',
                        focusedBorder: UnderlineInputBorder(
                            borderSide: BorderSide(
                          color: Color(0xFF801E48),
                        )),
                        labelText: 'Descrição'));
                break;
              case 1: // Produto
                _showProduto();
                break;
              case 2: // Preco Unitario
                _showPrecoUnitario();
                break;
              case 3: // Quantidade
                _showQtd();
                break;
              case 4: // Total
                _showTotal();
                break;
              case 5: // Pago por
                _showPagoPor();
                break;
              case 6: // Conta de referencia
                _showContaDeReferencia();
                break;
              case 7: // Data
                _showData();
                break;
              case 8: // Notas
                _showNotas();
                break;
              default:
                print('DEFAUL ITEM BUILDER');
            }
          }),
    );
  }

我看不出没有任何理由不工作,但屏幕上什么也没有显示,我很困惑。

标签: listviewdartflutterwidget

解决方案


你忘记了回报keyword,像这样:

            case 0: // Descricao
               return showDescription();

推荐阅读