首页 > 解决方案 > 取消动态列表中的某些内容

问题描述

下面的代码很好,我对返回 Dismissible(key: Key( list ) 有一个问题。

Key(list) 表示“参数类型列表......不能分配给参数类型。”

我的意思是该列表没有定义,因为它的动态并从用户那里获取信息。

有人有解决方案吗?

  TextEditingController tc;
  List<String> list = [];

  @override
  void initState() {
    super.initState();
    tc = TextEditingController();
  }

  @override
  Widget build(BuildContext context) {
      body:ListView.builder(
        itemCount:list.length,
      itemBuilder:(context,index){
       return Dismissible(key: Key(list),
        onDismissed: (direction) {
          setState(()
          {
            list.removeAt(index);
          }); Scaffold.of(context).showSnackBar(SnackBar(content: Text('$list dismissed')));
          Container(color: Colors.red);

        },

       child: ListTile(
        title:Text(list[index],
                  style: TextStyle(color:Colors.black)),


                  ));
  }));}

  void showPopup() {
    tc.text = '';
    showDialog(
        context: context,
        builder: (con) => AlertDialog(
                title: Text('Add new Asset'),
                content: TextField(
                    controller: tc,
                    decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      labelText: 'Asset',
                    )),
                actions: [
                 MaterialButton(
            child: Text('ADD'),
            onPressed: () {
                        if (tc.text.trim().isNotEmpty) addToList();
                        Navigator.of(con).pop();
                      })
                ]));
  }

  void addToList() {
    setState(() {
      list.add(tc.text.trim());
    });
  }
}

谢谢

标签: listflutter

解决方案


KeyString作为参数,而不是List。实现此目的的一个好方法是使用UniqueKey

例如

class Home extends StatelessWidget {

  var myList = List.generate(100, (index) => index);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: ListView.builder(
          itemCount: myList.length,
          itemBuilder: (context, index){
            return Dismissible(
              key: UniqueKey(),
              child: ListTile(
                title: Text("Hey $index"),
              ),
              onDismissed: (direction){
                myList.removeAt(index);
              },
            );
          },
        ),
      ),
    );
  }
}

您也可以通过使用索引作为键来实现这一点 像这样

import 'package:flutter/material.dart';

class Home extends StatelessWidget {

  var myList = List.generate(100, (index) => index);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: ListView.builder(
          itemCount: myList.length,
          itemBuilder: (context, index){
            return Dismissible(
              key: Key("$index"),
              child: ListTile(
                title: Text("Hey $index"),
              ),
              onDismissed: (direction){
                myList.removeAt(index);
              },
            );
          },
        ),
      ),
    );
  }
}

我希望这可以帮助你。


推荐阅读