Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >删除元素时总是删除最后一个元素。

删除元素时总是删除最后一个元素。
EN

Stack Overflow用户
提问于 2022-05-01 22:14:08
回答 2查看 371关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List storedWishes = [
      {
        'title': 'Phone',
        'description': 'a phone would be nice',
        'price': 200.00,
        'icon': Icon(Icons.phone)
      },
      {
        'title': 'monitor',
        'description': 'need it for a 2 screen setup',
        'price': 350.00,
        'icon': Icon(Icons.tv)
      },
      {
        'title': 'headphones',
        'description': 'need some high quality sound',
        'price': 100.00,
        'icon': Icon(Icons.headset)
      },
    ];
    final wishes = useState(storedWishes);

    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: const Text('iWant'),
            ),
            body: Column(
              //map the wishes to a list of wish widgets
              children: wishes.value
                  .map((wish) => Wish(
                        title: wish['title'] as String,
                        description: wish['description'] as String,
                        price: wish['price'] as double,
                        icon: wish['icon'],
                        onDelete: () {
                          wishes.value.remove(wish)
                          wishes.notifyListeners();
                        },
                      ))
                  .toList(),
            )));

wish.dart代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

class Wish extends HookWidget {
  const Wish(
      {Key? key,
      this.title = 'default title',
      this.description = 'default description',
      this.price = 0.00,
      this.icon = const Icon(Icons.star),
      this.onDelete})
      : super(key: key);
  final String title;
  final String description;
  final double price;
  final dynamic icon;
  final VoidCallback? onDelete;
  @override
  Widget build(BuildContext context) {
    var wishes = useState({
      'title': title,
      'description': description,
      'price': price,
      'image': icon
    });
    return Card(
        child: Row(children: [
      wishes.value['image'] as Icon,
      Expanded(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(wishes.value['title'] as String),
            Text(wishes.value['description'] as String),
          ],
        ),
      ),
      Text((wishes.value['price'].toString()) + '\$'),
      Column(
        children: [
          Icon(Icons.edit),
          IconButton(
            onPressed: () {
              onDelete!();
            },
            icon: Icon(Icons.delete),
          )
        ],
      ),
    ]));
  }
}
    //   child: Card(
    //       child: Row(children: [
    //     ,
    //     Column(
    //       crossAxisAlignment: CrossAxisAlignment.start,
    //       children: [
    //         Text('Product name'),
    //         Text('Product description'),
    //       ],
    //     ),
    //     Column(
    //       crossAxisAlignment: CrossAxisAlignment.end,
    //       children: [
    //         Text('Price:'),
    //         Text('21\$'),
    //       ],
    //     ),
    //   ])),
    // );

单击delete按钮总是在单击任何其他元素的delete时删除最后一个元素。

edit1:单击delete图标后,我已经删除了数组,数组被正确编辑,但是错误的小部件从屏幕上删除

这是一段视频:https://drive.google.com/file/d/1bEjHh4utynZk3QzSWw5gWv__YcpqKkb2/view?usp=sharing

edit2:我已经将钩子从愿望小部件中移除了,现在似乎正常工作了吗?无论如何,谢谢你的帮助:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-01 23:19:12

我不知道为什么不适合你,但对我来说很好。因为我不知道你的愿望是什么,所以我做的是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
    
void main() {
  runApp(MyApp());
}

class MyApp extends HookWidget {
  @override
  Widget build(BuildContext context) {


List storedWishes = [
      {
        'title': 'Phone',
        'description': 'a phone would be nice',
        'price': 200.00,
        'icon': Icon(Icons.phone)
      },
      {
        'title': 'monitor',
        'description': 'need it for a 2 screen setup',
        'price': 350.00,
        'icon': Icon(Icons.tv)
      },
      {
        'title': 'headphones',
        'description': 'need some high quality sound',
        'price': 100.00,
        'icon': Icon(Icons.headset)
      },
    ];
    final wishes = useState(storedWishes);

    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: const Text('iWant'),
            ),
            body: Column(
              //map the wishes to a list of wish widgets
              children: wishes.value
                  .map((wish) => TextButton(
                        child: Text(wish['title'] as String),
                        onPressed: () {
                          wishes.value.remove(wish);
                          wishes.notifyListeners();
                        },
                      ))
                  .toList(),
            )));
  }
}

它像这样正确地工作着。

编辑:我可以用你的愿望代码复制你的问题。实际上,我对HookWidget并不熟悉,但是将代码更改为这一点似乎可以解决这个问题。我不知道useState到底是用来做什么的,但是不使用它就可以修复它。你甚至可以让愿望只扩展StatelessWidget而不是HookWidget

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Wish extends StatelessWidget {
  const Wish(
      {Key? key,
      this.title = 'default title',
      this.description = 'default description',
      this.price = 0.00,
      this.icon = const Icon(Icons.star),
      this.onDelete})
      : super(key: key);
  final String title;
  final String description;
  final double price;
  final dynamic icon;
  final VoidCallback? onDelete;
  @override
  Widget build(BuildContext context) {
    return Card(
        child: Row(children: [
      icon,
      Expanded(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(title),
            Text(description),
          ],
        ),
      ),
      Text((price.toString()) + '\$'),
      Column(
        children: [
          Icon(Icons.edit),
          IconButton(
            onPressed: onDelete,
            icon: Icon(Icons.delete),
          )
        ],
      ),
    ]));
  }
}
票数 0
EN

Stack Overflow用户

发布于 2022-05-01 22:30:15

这是因为它实际上没有根据其内容来识别元素。当您调用列表上的remove函数时,它会看到元素是一个Map对象,您的输入也是一个Map对象。因此,它只需删除最后一个元素。

您要做的是为每个愿望指定一个唯一的标识符。差不多是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      {
        'id': '0'
        'title': 'headphones',
        'description': 'need some high quality sound',
        'price': 100.00,
        'icon': Icon(Icons.headset)
      },

或者,如果每个项目的title都是唯一的,那么您也可以引用它。

然后简单地通过编辑删除函数来进行深入的比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    onDelete: () {
      wishes.value.removeWhere((e) => e["id"] == wish["id"]);
      //OR
      //wishes.value.removeWhere((e) => e["title"] == wish["title"]);
      wishes.notifyListeners();
    },
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72082936

复制
相关文章
Apache、tomcat、Jboss、weblogic、WebSphere区别和容器的作用
总结:Apache/Tomcat/JBOSS/Nginx区别 . 1、Apache是Web服务器,Tomcat是应用(Java)服务器。Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用。Apache支持静态页,Tomcat支持动态的。 2、Jetty:Tomcat内核作为其Servlet容器引擎,并加以审核和调优.大中型系统可以应用。能够提供数据库连接池服务,还支持其他 Web 技术的集成,譬如PHP、.NET 两大阵营. 3、JBoss是一个管理EJB的容器和服务器,但JBoss核心
小小科
2018/05/02
3.7K0
Exploiting Jolokia Agent with Java EE Servers
0x00 - About Jolokia Jolokia 是一个通过 HTTP 的 JMX 连接器,提供了类 RESTful 的操作方式,可以通过 POST JSON 的方式访问和修改 JMX 属性、执行 JMX 操作、搜索 MBean、列出 MBean 的 Meta-data 等。 Jolokia 支持提供了多种 Agents,包括 WAR Agent、OSGi Agent、JVM Agent 或者 Mule Agent。其中 WAR Agent 支持了多种 Web Server: JBoss 4.
云鼎实验室
2018/04/02
1.7K0
Exploiting Jolokia Agent with Java EE Servers
flowable camunda activiti 功能对比
flowable camunda activiti 三个框架都是从jbpm框架诞生出来的,先是有jbpm4,然后出来了一个activiti5,activiti5发展一段时间,又出来了一个Camunda。activiti5发展了4年,紧接着出来了一个flowable。本文重点对flowable camunda两个框架的功能对比。对比的camunda版本是7.10.0,flowable框架的版本是6.4.1.
全栈程序员站长
2022/08/31
8.3K1
flowable camunda activiti 功能对比
Migrating to WebSphere 9
Migrating to WebSphere 9 Make a migration plan Requirements Migrate WebSphere profiles into the new WebSphere Keep profiles' locations as the original path Prepare Install the new WebSphere Setup variables At first, we need to record variables related to
绿巨人
2018/05/16
9480
在eclipse中使用Tomcat8.5时,出现了如下错误:
在建立Tomcat服务时,eclipse会自动生成一个Servers的项目. 在这个项目中,找到你部署项目的服务文件夹. 在这个文件夹下有一个"server.xml"文件,打开这个文件,删除里面对应项目的Context节点即可。
兮动人
2021/06/11
3.7K0
在eclipse中使用Tomcat8.5时,出现了如下错误:
Tomcat原理剖析-tomcat介绍和源码idea构建
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
程序猿川子
2022/08/10
7880
8.5 DebuggerPresent
CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用。函数接收两个参数进程句柄和一个指向布尔值的指针。如果指定的进程正在被调试,则函数会把指向布尔值的指针设为 TRUE,否则设为FALSE。
微软技术分享
2023/09/27
1610
8.5 DebuggerPresent
【JAVA调错】----JBoss发布多个项目时抛出webAppRootKey错误
进行如上配置后,修改log4j.xml后,在刷新间隔时间后,配置的监听器Log4jConfigListener会重新加载log4j相关配置。
令仔很忙
2018/09/14
1.1K0
迁移Hexo到halo
此前,我使用hexo,犹豫hexo是静态的,有所不便。无意之中发现这款博客框架。此博客使用java所以,内存需求比较高。优点是美观,支持批量导入md。
Innei
2021/12/28
1.2K0
8.5 DebuggerPresent
CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用。函数接收两个参数进程句柄和一个指向布尔值的指针。如果指定的进程正在被调试,则函数会把指向布尔值的指针设为 TRUE,否则设为FALSE。
微软技术分享
2023/10/11
1290
迁移 VPS 到 Vultr
趁着中秋节之前总算是把我的 VPS 迁移到了 Vultr,域名也换了一个 .me 结尾的,更有个人网站的感觉,但是一年下来也得多花不少钱,疼死我了。
kifuan
2022/10/24
18.7K0
迁移 VPS 到 Vultr
迁移 Nginx 到 Envoy
大部分的应用可能还是使用的比较传统的 Nginx 来做服务代理,本文我们将介绍如何将 Nginx 的配置迁移到 Envoy 上来。我们将学到:
我是阳明
2020/06/15
1.3K0
迁移 Nginx 到 Envoy
Linux下Jboss安装使用+Jboss部署脚本「建议收藏」
Jboss是Java EE应用服务器(就像Apache是web服务器一样),专门用来运行Java EE程序的。
全栈程序员站长
2022/09/27
4.9K0
Linux下Jboss安装使用+Jboss部署脚本「建议收藏」
Jboss安装
 1、下载http://pan.baidu.com/s/1bnmYN7p,解压jboss-as-7.1.1.Final.zip即完成安装
week
2018/08/27
1.3K0
8.5 存储紧缩
1、在整个动态存储管理过程中,不管哪个时刻,可利用空间都是一个地址连续的存储区,在编译程序中称之为“堆”,每次分配都是从这个可利用空间中划出一块。
小林C语言
2020/12/12
3980
8.5 存储紧缩
IBM WebSphere MQ 系列(三)配置和使用WebSphere MQ
配置和使用WebSphere MQ A.设置环境变量   在shell中执行MQ的控制命令:     ctrmqm     strmqm   若识别这些命令,则说明PATH环境变量已配置好了;   若提示找不到命令,则说明需配置Linux环境变量,指定MQ的bin路径到PATH:      可选择修改系统的环境变量(/etc/profile文件,对全部用户可见),      或只修改用户mqadmin的环境变量(/var/mqm/.bash_profile,只对当前用户可见。     下面列出前者的修改方式
Java学习123
2018/05/16
6.4K0
JBoss 主要模块
本文介绍了JBoss的主要模块,包括JBoss EJB容器、JBossNS、JBossTX、部署服务、JBossMQ、JBossSX和JBossCX。JBoss EJB容器是JBoss服务器的核心实现,支持热部署。JBossNS提供命名服务,用于定位对象和资源。JBossTX支持JTA/JTS和交易管理。部署服务支持EJB、Web应用和企业级应用的部署。JBossMQ是Java消息服务规范实现。JBossSX支持安全实现,包括基于JAAS的或不支持JAAS机制的安全。JBossCX实现了部分JCA功能。Web服务器支持Web容器和Servlet引擎。
YGingko
2017/12/28
1.5K0
eclipse + JBoss 5 +
有时客户端程序(如JSP、Servlet)会和EJB组件运行在同一个JVM上,如在同一个J2EE服务器(JBoss、Weblogic等)中运行。这时就没必要 再通过远程(remote)接口访问Session Bean了,因为客户端和session bean都在同一个jvm上,只需要通过本地接口(local)访问即可。就象直接访问本地类一样(当然,不能直接访问EJB类,需要使用jndi和local接口来获得本地接口对象。当然,也可以通过remote接口来访问ejb,不过这样会有一些性能损失。就象在同一台机器上还通过socket进行访问一样,很多性能都损耗在网络上了。下面我们来举个简单的例子来看一下如何使用本地接口来访问session bean。     先建立一个session bean本地接口,代码如下:
py3study
2020/01/14
6700
jboss下载和安装[通俗易懂]
1. 下载 http://www.jboss.org/jbossas/downloads/ 选择Certified Java EE 6 Full Profile版本,我下载的是 jboss-as-7.1.1.Final.zip。 2. 解压 jboss-as-7.1.1.Final.zip 注意整个路径必须没有空格才行。 3. 配置环境变量 JRE 环境变量 JAVA_HOME JRE的路径 CLASSPATH %JAVA_HOME%\lib PATH %JAVA_HOME%\bin
全栈程序员站长
2022/09/28
2.5K0
jboss下载和安装[通俗易懂]
点击加载更多

相似问题

Websphere到Jboss的迁移

12

WebLogic8.1到Websphere 8.5迁移

14

IBM websphere到JBOSS的迁移

24

WebSphere8.5应用程序到IBM迁移上的Websphere自由

10

从Tomcat6.0迁移到WebSphere 8.5

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文