FutureBuilder: будущий вызов функции даже после push-навигатора - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть просмотр списка, который возвращает список заказов из моей локальной базы данных (sqflite), и он работает очень хорошо.

После нажатия на плитку списка я перемещаю навигацию на другую страницу, когда мойВторая страница загружена. Я заметил, что будущая функция вызывается снова, моя вторая страница загружается и работает нормально, но мне кажется, нет необходимости снова вызывать будущую функцию.

Могу ли я контролировать это поведение?

Вот мой код для первой страницы:

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),
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...