【问题标题】:Flutter Duplicate items and does not remove颤振重复项目并且不删除
【发布时间】:2021-08-07 12:49:54
【问题描述】:

每当我按下圆形RoundIcnBt 时我想在列表中添加元素并在再次按下时删除但它会添加重复的项目并且在再次按下按钮时不删除是否有任何其他方法可以做到这一点请建议我想要的是当用户按下按钮时,数据应该被存储到列表中,当用户再次按下相同的按钮项目时应该被删除:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mdi/mdi.dart';

class MyListEX extends StatefulWidget {
  const MyListEX({Key key}) : super(key: key);

  @override
  _MyListEXState createState() => _MyListEXState();
}

class _MyListEXState extends State<MyListEX> {
  List l = [];
  var distl = [];
  final List<int> rollNo = [
    2016239001,
    2016239002,
    2016239003,
    2016239004,
  ];

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: 4,
      itemBuilder: (context, index) {
        return Column(
          children: <Widget>[
            SizedBox(
              height: 10,
            ),
            Container(
              padding: EdgeInsets.all(10),
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.centerLeft,
                  end: Alignment.centerRight,
                  colors: [Colors.red, Colors.blue],
                ),
                borderRadius: BorderRadius.circular(20),
                boxShadow: [
                  BoxShadow(
                    color: Colors.black,
                    offset: const Offset(3.0, 3.0),
                    blurRadius: 10,
                    spreadRadius: 2.0,
                  ),
                  BoxShadow(
                    color: Colors.white,
                    offset: const Offset(0.0, 0.0),
                    blurRadius: 0.0,
                    spreadRadius: 0.0,
                  ),
                ],
              ),
              child: SizedBox(
                height: 60,
                child: ListTile(
                  trailing: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      RoundIcnBt(
                        icon: Mdi.alphaPCircle,
                        onPressed: () {
                          setState(() {
                            l.add([
                              {
                                {rollNo[index]},
                                true
                              }
                            ]);
                            print(distl = l.toSet().toList(growable: true));
                          });
                        },
                      ),
                    ],
                  ),
                  leading: Icon(Icons.account_circle_outlined),
                  title: Text('${rollNo[index]}'),
                ),
              ),
            ),
          ],
        );
      },
    );
  }
}

【问题讨论】:

  • 我添加了一个使用默认IconButton的答案,请查看。

标签: flutter dart


【解决方案1】:

您可以使用Set 类型变量来添加和删除元素。

所以,请将您的 List l = []; 更改为 Set l = {};

现在,在你的setState 按钮里面,你可以做到这一点,

setState(() {
  if (l.contains(rollNo[index])) {
    // l already contains this roll number, so you can remove it
    l.remove(rollNo[index]);
  } else {
    // l doesn't contains this roll number, so you can add it
    l.add(rollNo[index]);
  }
});

现在,l 将随时维护您选择的卷号。

这是工作代码。我还在Text 旁边添加了一个绿色小勾号图标,以显示是否添加了卷号。

将 bin 链接粘贴到完整的工作代码 - Code

【讨论】:

  • 非常感谢它解决了我的问题,也感谢您提供额外的绿色勾号
【解决方案2】:

使列表滚动不是最终的,因此您可以从列表中添加和删除...

【讨论】:

  • 但我在另一个名为 l 的列表中添加元素
猜你喜欢
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2021-08-14
  • 2020-07-13
  • 2020-10-19
  • 2020-12-14
  • 2020-07-11
  • 2020-02-01
相关资源
最近更新 更多