TextEditingController

Виджет ListView

Последнее обновление: 19.02.2021

Виджет ListView представляет прокручиваемый список элементов.

Класс ListView имеет несколько конструкторов с большим количеством параметров, поэтому отметим только некоторые параметры:

  • children: объект List<Widget>, который представляет список виджетов, добавляемых в ListView

  • scrollDirection: устанавливает направление элементов. Представляет перечисление Axis, которое определяет две константы:

    • Axis.horizontal: устанавливает горизонтальный список - элементы располагаются слева направо (или справо налево)

    • Axis.vertical: устанавливает вертикальный список - элементы располагаются сверху вниз

    Значение по умолчанию - Axis.vertical.

  • padding: устанавливает отступы элементов от границ ListView, представляет объект EdgeInsetsGeometry

  • reverse: если равен true, располагает элементы в обратном порядке

  • physics: задает параметры скроллинга с помощью объекта ScrollPhysics

Определим простейший список:

import 'package:flutter/material.dart';

const double textSize = 22;
void main() {
  runApp(MaterialApp(
      home:  Scaffold(
        body: ListView(
          padding: const EdgeInsets.all(8),
          children:[
            Text("Tom", style: TextStyle(fontSize: textSize)),
            Text("Alice", style: TextStyle(fontSize: textSize)),
            Text("Bob", style: TextStyle(fontSize: textSize)),
            Text("Sam", style: TextStyle(fontSize: textSize)),
            Text("Kate", style: TextStyle(fontSize: textSize)),
          ],
        ),
        appBar: AppBar(title: Text("METANIT.COM")),)
  ));
}

В данном случае все элементы ListView представлены виджетом Text:

ListView in Flutter и Dart

В реальности это не самый оптимальный способ построения списка, учитывая, что в данном случае меняется только надпись в виджете Text. Но далее мы посмотрим, как можем эту структуру упростить.

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

\
import 'package:flutter/material.dart';

const double textSize = 22;

void main() {
  runApp(MaterialApp(
      home:  Scaffold(
        body: ListView(
          padding: const EdgeInsets.all(8),
          scrollDirection: Axis.horizontal,
          children:[
            Text("Tom", style: TextStyle(fontSize: textSize)),
            Text("Alice", style: TextStyle(fontSize: textSize)),
            Text("Bob", style: TextStyle(fontSize: textSize)),
            Text("Sam", style: TextStyle(fontSize: textSize)),
            Text("Kate", style: TextStyle(fontSize: textSize)),
          ],
        ),
        ),
        appBar: AppBar(title: Text("METANIT.COM")),)
  ));
}

Для создания горизонтального списка параметру scrollDirection передается значение Axis.horizontal. Однако если мы посмотрим на результат, то мы увидим, что элементы стоят вплотную друг к другу без каких-нибудь отступов.

Горизонтальный список horizontal ListView in Flutter и Dart

В этом случае мы можем обернуть виджет Text в какой-то другой виджет, который поддерживает применение отступов:

import 'package:flutter/material.dart';

const double textSize = 22;
const double space = 15;
void main() {
  runApp(MaterialApp(
      home:  Scaffold(
        body: ListView(
          padding: const EdgeInsets.all(8),
          scrollDirection: Axis.horizontal,
          children:[
            Padding(
                child: Text("Tom", style: TextStyle(fontSize: textSize)),
                padding: EdgeInsets.symmetric(horizontal: space),
            ),
            Padding(
              child: Text("Alice", style: TextStyle(fontSize: textSize)),
              padding: EdgeInsets.symmetric(horizontal: space),
            ),
            Padding(
              child: Text("Bob", style: TextStyle(fontSize: textSize)),
              padding: EdgeInsets.symmetric(horizontal: space),
            ),
            Padding(
              child: Text("Sam", style: TextStyle(fontSize: textSize)),
              padding: EdgeInsets.symmetric(horizontal: space),
            ),
            Padding(
              child: Text("Kate", style: TextStyle(fontSize: textSize)),
              padding: EdgeInsets.symmetric(horizontal: space),
            ),
          ],
        ),
        appBar: AppBar(title: Text("METANIT.COM")),)
  ));
}

В данном случае для создания отступов виджет Text обертывается в Padding, который устанавливает равные отступы справа и слева:

Горизонтальный список ListView в Flutter и Dart
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850