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

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

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

      /// WHAT I CURRENTLY HAVE

class PageOne extends StatelessWidget {
  final int indexCount;
  Widget sliverItem({required Widget child, required int index}) {
    return child;
  }
  const PageOne({Key? key, required indexCount}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Row(
        children: [
          const SizedBox(width: 40.0),
          Consumer(builder: (context, ref, child) {
            return Expanded(
              child: EasyRefresh.custom(
                onRefresh: // TODO
                onLoad: // TODO
                slivers: [
                  SliverList(
                    delegate: SliverChildBuilderDelegate(
                      (BuildContext context, int index) {
                        return Card(
                          margin: const EdgeInsets.all(15),
                          child: Container(
                            color: Colors.blue[100 * (index % 9 + 1)],
                            height: 80,
                            alignment: Alignment.center,
                            child: const Text(
                              'item $index',
                              style: TextStyle(fontSize: 30),
                            ),
                          ),
                        );
                      },
                      childCount: indexCount,
                    ),
                  ),
                ],
              ),
            );
          }),
        ],
      ),
    );
  }
}

/// WHAT I THINK I NEED

class PageOne extends StatelessWidget {
final int indexCount;
  Widget sliverItem({required Widget child, required int index}) {
    return child;
  }
  const PageOne({Key? key, required indexCount}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Row(
        children: [
          const SizedBox(width: 40.0),
          Consumer(builder: (context, ref, child) {
            return Expanded(
              child: EasyRefresh.custom(
                onRefresh: // TODO
                onLoad: // TODO
                slivers: [
                  SliverList(
                    delegate: SliverChildBuilderDelegate(
                      (BuildContext context, int index) {
                        return sliverItem(index) // returns custom widget with index until indexCount
                      },
                      childCount: indexCount,
                    ),
                  ),
                ],
              ),
            );
          }),
        ],
      ),
    );
  }
}

1 ответ

Так же, как вы объявили final int indexCount;, вы можете объявить функцию как final Function() myFunction;и позвоните myFunctionгде вы хотите.

Другие вопросы по тегам