Как вернуть часть списка виджетов во флаттер - PullRequest
0 голосов
/ 27 ноября 2018

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

ListView(
  children: <Widget>[
    Text('Section 1 Header'),
    Text('Section 1 List Item 1'),
    Text('Section 1 List Item 2'),
    Text('Section 2 Header'),
    ...
  ]
)

С точки зрения вспомогательных функций, которые создают это чисто, было бы неплохо что-то вроде следующего:

ListView(
  children: <Widget>[
    Text('Section 1 Header'),
    _buildSection1ListItems(),
    Text('Section 2 Header'),
  ]
)

Где _buildSection1ListItems() выглядит какследующее:

List<Widget> _buildSection1ListItems() {
  return [
    Text('Section 1 List Item 1'),
    Text('Section 1 List Item 2'),
  ];
}

И НЕ как:бизнес-логика, рефакторинг тонкостей, а не фактическое, идеальное дерево виджетов для отображения контента.

Есть ли шаблон для этого во Flutter?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Да, есть шаблон, вы можете построить класс модели.

создать новый файл post_model.dart

import 'package:flutter/material.dart';

class PostModel {
Widget sectionHeader;
List<Widget> widgetList;

PostModel(Widget this.sectionHeader, List<Widget> this.widgetList);
}

Из них вы собираетесь отобразить список PostModelsиспользуя ListView.builder.

body: new ListView.builder
  (
    itemCount: postModelList.length,
    itemBuilder: (BuildContext ctxt, int index) {
     return ....
    }
  )

Подробнее об использовании listView.Builder здесь .

PS Умный способ - закодировать ваши сообщения в формате JSON, а затем использовать json.decode, здесь пример использования json.decode в проекте.

0 голосов
/ 03 июля 2019

В Dart 2.2.2 или более поздней версии вы можете использовать оператор распространения:

ListView(
  children: <Widget>[
    Text('Section 1 Header'),
    ..._buildSection1ListItems(),
    Text('Section 2 Header'),
  ]
)
0 голосов
/ 27 ноября 2018

Вы можете вернуть массивы из функций вашего раздела, а затем сгладить весь список. Как сгладить массив?

...