У меня есть пользовательский интерфейс, который показывает пользователю доставленные Предметы и отмененные товары в продуктовом приложении.
'Доставлено' -> нажатие этой кнопки показывает виджеты доставленных карточек предметов.
и на той же странице
'Отменено' -> при нажатии этой кнопки отображаются виджеты карты отмененных элементов.
Я использую SliverChildBuilderDelegate для создания карты виджеты на основе текущего ввода пользователя. (Первоначально, когда страница загружена, я показываю все доставленные элементы.)
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => MyOrdersCard(
orderNumber: orderList[index][0],
trackingNumber: orderList[index][1],
quantity: orderList[index][2],
totalAmount: orderList[index][3],
status: orderList[index][4],
date: orderList[index][5],
statusColor: orderList[index][6],
),
childCount: orderList.length,
),
),
Я заполняю список ('orderList') в приведенном ниже коде с помощью переменная состояния, имеющая статус заказа.
var orderList = [];
handleClick(status) {
setState(() {
orderList = [];
var color;
switch (status) {
case 'Processing':
color = Colors.yellow;
activeBtn = 2;
break;
case 'Cancelled':
color = Colors.red;
activeBtn = 3;
break;
case 'Delivered':
color = Colors.green;
activeBtn = 1;
break;
}
for (int i = 0; i < 10; i++) {
orderList.add([
'123457' + '$i',
'17abc999',
3,
500,
status,
'0$i-12-2019',
color
]);
}
});
При нажатии кнопки вызывается вышеуказанная функция со статусом в качестве аргумента.
RaisedButton(
child: Text('Delivered'),
onPressed: () {
handleClick('Delivered');
},
),
RaisedButton(
child: Text('Processing'),
onPressed: () {
handleClick('Processing');
},
),
Теперь пользовательский интерфейс правильно отображает все доставленные элементы карты, но если пользователь нажимает кнопку «Отменено», то вызывается функция «handleClick» и список, если он заполнен всеми новыми заказами и статусом cancelld, имеет статус также заполнено как отменено. Но sliverChildBuilder не обновляется. Пользовательский интерфейс остается прежним. Если я прокручиваю ниже, то я могу видеть отмененные заказы, потому что они создаются заново, когда происходит прокрутка вниз. Теперь, если я прокручиваю вверх снова, я вижу все отмененные заказы, потому что старые построенные карты были уничтожены, а sliverChildBuilder создал карты как прокрутка произошла на лету. Я не хочу этого Я хочу, чтобы sliverChildBuilder уничтожил все старые дочерние элементы, созданные для «доставленных» элементов при нажатии кнопки «отменено», и отобразил все новые отмененные заказы из нового списка («список-заказов»). Есть ли способ, которым я мог бы сделать это? Надеюсь, моя проблема ясна!