Как превратить этот жестко запрограммированный виджет в модульный виджет многократного использования с правильным параметром функции?
Я сильно не понимаю, как это сделать, даже не думаю, что у меня правильная терминология. Я лишен этих базовых знаний о 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
где вы хотите.