FutureBuilder:即使在推导航器之后也调用将来的函数

时间:2018-11-22 15:44:56

标签: flutter

我有一个列表视图,该列表视图从本地数据库(sqflite)返回订单列表,并且运行良好。

点击列表的磁贴后,我将导航推到另一页,加载第二页时,我注意到再次调用了future函数,第二页加载并正常工作,但对我来说,似乎不需要调用将来的功能。

我可以控制这种行为吗?

这是我第一页的代码:

import 'package:flutter/material.dart';
import '../model/coleta.dart';
import 'coletarPedido.dart';

void selectedOrderTile(PedidoColeta pedidoColeta, BuildContext context) {
  Navigator.push(context, new MaterialPageRoute(builder: (context) => new ColetaPage(pedidoColeta: pedidoColeta)));
}

Future<List<PedidoColeta>> listaPedidosAguardandoColeta() async {
  return await PedidoColeta.retornaListaPedidosColeta(1);
}

Widget pedidosAguardandoColeta(context) {
  return new FutureBuilder<List<PedidoColeta>> (
    future: listaPedidosAguardandoColeta(),
    builder: (BuildContext context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        if (snapshot.data == null || snapshot.data.length == 0) {
          return new Text("Nenhum pedido por aqui!");
        } else {
          return new ListView.separated(
            padding: const EdgeInsets.all(8.0),
              itemCount: snapshot.data.length,
              itemBuilder: (context, i) {
                return tilePedido(snapshot.data[i], context);
              },
              separatorBuilder: (context, i) {
                return Divider();
              },
          );
        }
      }
      return new Container(
        alignment: AlignmentDirectional.center,
        child: new CircularProgressIndicator()
      );
    },
  );
}

Widget tilePedido(PedidoColeta pedidoColeta, context) {
  return ListTile(
    leading: new Container(
      width: 50.0,
      height: 50.0,
      decoration: new BoxDecoration(
        shape: BoxShape.circle,
        color: Colors.grey[300],
        image: new DecorationImage(
          fit: BoxFit.fill,
          image: AssetImage(pedidoColeta.logoCliente)
        )
      )
    ),
    title: Text('Pedido: ' + pedidoColeta.idPedido.toString() + ' Ocam: ' + pedidoColeta.idOcam.toString(), style: Theme.of(context).textTheme.button),
    subtitle: Text('Total de Itens: ' + pedidoColeta.qtdItem.toString() + '\nData de Saída: ' + pedidoColeta.dataSaida.toString()),
    dense: true,
    onTap: () => selectedOrderTile(pedidoColeta, context),
  );
}

0 个答案:

没有答案