当Flutter上的函数获取Widget时,无法在ListView.Builder上显示Widget

时间:2019-02-25 18:46:26

标签: listview dart flutter widget

我试图用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');
            }
          }),
    );
  }

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

1 个答案:

答案 0 :(得分:0)

您忘记了回报keyword,就像这样:

            case 0: // Descricao
               return showDescription();