我试图用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');
}
}),
);
}
我看不到没有任何理由不能工作,但是在屏幕上什么也没显示,我很困惑。
答案 0 :(得分:0)
您忘记了回报keyword
,就像这样:
case 0: // Descricao
return showDescription();