Как сэкономить щепки в константах? - PullRequest
0 голосов
/ 26 мая 2020

Я новичок ie во Flutter, и после 2 туториалов я пытаюсь создать собственное приложение. Как все хорошие программисты, я не хочу повторять код. Итак, у меня есть часть, которую я повторяю на 5 экранах, и я хочу сохранить где-нибудь в константе. Обычно он работает со многими видами виджетов, но я не добиваюсь того же результата с осколками внутри CustomScrollView. Я заменил фактическое содержимое на этот тестовый пример ленты (список текстов), который вызывает ту же ошибку, поэтому он сохраняет фокус на ошибке, а не на содержимом.

Это файл, который я сохранено, чтобы получить эту константу ленты.

import 'package:flutter/material.dart';

const testSliverList = SliverList(
  delegate: SliverChildListDelegate([
    ListTile(
      title: Text("test3"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
  ]),
);

Вот ошибка:

Compiler message:
lib/shared/app_bar.dart:4:13: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
  delegate: SliverChildListDelegate([
            ^^^^^^^^^^^^^^^^^^^^^^^

ps: эта ошибка просто возникает, когда она находится в отдельном файле.

Заранее спасибо.

1 Ответ

2 голосов
/ 26 мая 2020

Используйте SliverChildListDelegate.fixed вместо SliverChildListDelegate. SliverChildListDelegate не является конструктором const и поэтому не может быть помещен в const.

См. this для получения дополнительной информации.

Пример в ваш код:

const testSliverList = SliverList(
  delegate: SliverChildListDelegate.fixed([
    ListTile(
      title: Text("test3"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
    ListTile(
      title: Text("test4"),
    ),
  ]),
);
...