Почему список ведет себя по-разному при добавлении в него новых элементов?

#flutter #dart #flutter-layout

#flutter #dart #flutter-layout

Вопрос:

Когда я добавляю новый элемент в существующий список и после отображения списка на экране, иногда новый элемент отображается в верхней части списка, а иногда и в последней. Почему список ведет себя подобным образом? в приведенном ниже коде я хочу показать, что недавно добавленный элемент находится в верхней части моего списка, Есть ли способ это сделать?

 class _TransactionListState extends State<TransactionList> {

// Existing List with two transactions

  final List<Transaction> transactions = [
    Transaction(
      title: 'New Books',
      id: 't1',
      amount: 44.55,
      date: DateTime.now(),
    ),
    Transaction(
      title: 'Weekly Items',
      id: 't2',
      amount: 22.44,
      date: DateTime.now(),
    ),
  ];

  final titleController = TextEditingController();
  final amountController = TextEditingController();

  void addTransactions() {
// Add new transaction
    Transaction tx = Transaction(
        title: titleController.text,
        amount: double.parse(amountController.text),
        date: DateTime.now(),
        id: DateTime.now().toString());

    setState(() {
// Add new transaction to existing List. I want this new element on top of screen
      transactions.add(tx);
    });
  }


  

Ответ №1:

Используйте метод insert () списка, чтобы добавить элемент, здесь индекс будет равен 0, чтобы добавить его в начале. Пример:

 List<String> transactions = ["Items1", "Items2", "Items3"];


transactions.insert(0, "New Value");
  

Ответ №2:

Вы можете передать reverse: true в ListView конструктор или вставить новый элемент с 0-м индексом, используя list.insert(index, item) метод как:

setState(() { transactions.insert(0, tx); });

Ответ №3:

Если вы хотите использовать стеки, вы могли бы использовать: https://pub.dev/packages/stack