即使在Flutter中导入文件后,我也无法从其他文件访问`Set`列表

时间:2019-12-17 04:18:21

标签: flutter dart

我有一个空列表,其中在选择项目时会在其中添加项目。但是我无法访问类型为Set的其他文件中的列表,以避免重复。此外,列表具有两种类型的项目:图像和文本(在children的{​​{1}}内部)。该列表位于另一个文件中,除此列表外,所有内容都可以访问。我不知道为什么会这样,有人可以帮忙吗?

我的代码:

Row

我要访问它的部分:

final Set saved = Set(); //This thing is not getting accessed

class FavoriteList extends StatefulWidget {
@override
_FavoriteListState createState() => _FavoriteListState();
}

class _FavoriteListState extends State<FavoriteList> {
@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
      title: Text('Add to Favorites!'),
      centerTitle: true,
      backgroundColor: Colors.red),
  // backgroundColor: Colors.indigo,
  body: SafeArea(
    child: ListView.builder(
      itemCount: 53,
      itemBuilder: (context, index) {
        return CheckboxListTile(
          activeColor: Colors.red,
          checkColor: Colors.white,
          // value: _saved.contains(context), // changed
          value: saved.contains(index),
          onChanged: (val) {
            setState(() {
              // isChecked = val;           // changed
              // if(val == true){           // changed
              //   _saved.add(context);     // changed
              // } else{                    // changed
              //   _saved.remove(context);  // changed
              // }                          // changed
              if (val == true) {
                saved.add(index);
              } else {
                saved.remove(index);
              }
            });
          },
          title: Row(
            children: <Widget>[
              Image.asset('lib/images/${images[index]}'),
              SizedBox(
                width: 10,
              ),
              Text(nameOfSite[index]),
            ],
          ),
        );
      },
    ),
  ),
  floatingActionButton: FloatingActionButton(
    foregroundColor: Colors.red,
    child: Icon(Icons.check),
    onPressed: () {
      Navigator.pop<Set>(context, saved);
    },
  ),
);
  }
  }

1 个答案:

答案 0 :(得分:0)

我认为从Set小部件访问FavoriteList并不是问题。

您已经创建了一种从下面的saved获取FavoriteList集的最新值的方法:

floatingActionButton: FloatingActionButton(
foregroundColor: Colors.red,
child: Icon(Icons.check),
  onPressed: () {
    Navigator.pop<Set>(context, saved);
  },
)

因此,通过这种方式,您将在saved小部件时获得FavoriteList的最新值 弹出。

您可以使用以下方法捕获新值,在SecondPage的代码中进行更改, 来自:

FloatingActionButton(
      onPressed: () {
       Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) {
              return FavoriteList();
            },
          ),
        );
      },
      child: Icon(Icons.add),
      foregroundColor: Colors.blue,
    ),

收件人:

 FloatingActionButton(
  onPressed: () async {
    Set newSet = await Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) {
          return FavoriteList();
        },
      ),
    );

    print('newSet: $newSet');
  },
  child: Icon(Icons.add),
  foregroundColor: Colors.blue,
),

newSet值是FavoriteList小部件的最新值。 可以用来更新SecondPage中的UI。只需在SecondPage State列表收藏夹= List();`中创建一个列表即可。使用此列表可以随意填充用户界面。

现在,当您抓到saved中的FloatingActionButton时,请执行以下操作:

setState((){
  favoriteList = newSet.toList();
});

注意: 但是,我建议您,如果要提供对多个小部件中某些内容的访问,请确保将所有小部件顶部的小部件中的访问值保持在所有小部件之上。

如果您需要更多帮助,请在评论中告诉我。