Flutter 将 Json 数据传输到另一个页面

Flutter transferring Json data to another page

嘿,我有一个问题,我想从被按下的 ListTile 传输数据。所以我可以从另一页的 Json 文件中读取数据。

我已经在代码中写了我想从哪里得到东西。我希望你知道我的意思,如果不只是在这里问的话。我总是查看并回答。我浏览过各种网站,但其中 none 对我有帮助。所以现在在这里。你是我最后的希望

这是我的代码

class PokemonDB extends StatefulWidget {
  _PokemonDB createState() => _PokemonDB();
}

class _PokemonDB extends State<PokemonDB> {

  List pokemon = const [];

  Future loadPokemon() async {
    var content = await rootBundle.loadString("json/pokemon.json");
    var collection = json.decode(content);

    setState(() {
      pokemon = collection;
    });
  }


  void initState() {
    loadPokemon();
    super.initState();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        toolbarHeight: 0,
        backgroundColor: Colors.black,
      ),
      body: ListView.separated(
        separatorBuilder: (BuildContext context, int index) => Divider(),
        itemCount: pokemon.length,
        itemBuilder: (BuildContext context, int index) {
          var pokemonn = pokemon[index];
          return Container(
            child: ListTile(
              onTap: () async{
                      Map name = await Navigator.push(
                        context,
                        MaterialPageRoute<Map>(builder: (BuildContext context) {
                         return ShinyHuntCounter();   <-- from here I want the data on which click was
                        },
                        ),);
                    },
              isThreeLine: false,
              title: Text(
                pokemonn['name'],
                style: TextStyle(
                    fontFamily: 'pokemon',
                    fontSize: 30,
                    color: Colors.black
                ),
              ),
              leading: Image(image: AssetImage(pokemonn['image'])),
            ),
            decoration:
            BoxDecoration(
              borderRadius: BorderRadius.all(Radius.circular(50)),
              color: Color.fromRGBO(234, 180, 59, 1),
            ),
          );
        },
      ),
    );
  }
}

我想这样会很简单,

在你的ShinyHuntCounterclass,

class ShinyHuntCounter extends StatefulWidget {
  final String pokemonn;
  const ShinyHuntCounter(this.pokemonn);

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

class ShinyHuntCounterState extends State<ShinyHuntCounter> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.pokemonn); // Here you direct access using widget
  }
}

为了传递数据,做这样的事情,

MaterialPageRoute<Map>(builder: (BuildContext context) {
                         return ShinyHuntCounter(pokemonn['name']); }, )

希望适合你的情况。