回到上一个屏幕时如何捕捉价值?

问题描述 投票:0回答:2

这是我的第二堂课

class SecondClass extends StatefulWidget {
   _SecondClassState createState() => _SecondClassState();
}

class _SecondClassState extends State<SecondClass> {
  @override
  Widget build(BuildContext context) {
    Return Container(
      RaisedButton(
       onPressed: Navigator.of(context).pop('lorem ipsum),
       child: Text('Back and get data')
      )
    );
  }
}

这是我的第一堂课

class FirstClass extends StatefulWidget {
  _FirstClassState createState() => _FirstClassState();
}

class _FirstClassState extends State<FirstClass> {
   @override
   Widget build(BuildContext context) {
     Return Container(
       // show data here
     );
  }
}

如何获取lorem ipsum字符串并在头等中显示它,我应该把代码放到那个字符串?

dart flutter
2个回答
1
投票

enter image description here

您可以在屏幕截图中看到,无论在第二个屏幕中点击了什么项目,它都会被发送回第1页,而按钮会显示相同的项目。


以下是基本实现的完整代码。

void main() {
  runApp(MaterialApp(home: Page1()));
}

class Page1 extends StatefulWidget {
  @override
  _Page1State createState() => _Page1State();
}

class _Page1State extends State<Page1> {
  String _response = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Page 1")),
      body: Center(
        child: RaisedButton(
          child: Text("Go to Page 2"),
          onPressed: () {
            Navigator.push(context, MaterialPageRoute(builder: (context) => Page2())).then((value) {
              setState(() {
                _response = value; // you receive here
              });
            });
          },
        ),
      ),
    );
  }
}

class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Page 2")),
      body: ListView.builder(
        itemCount: 20,
        itemBuilder: (c, i) {
          return ListTile(
            title: Text("Item ${i}"),
            onTap: () {
              Navigator.pop(context, "Item ${i}"); // what you pass here
            },
          );
        },
      ),
    );
  }
}

0
投票
Navigator.of(context).push(MaterialPageRoute(builder: (context) => SecondClass())).then((value) {
  // value is lorem ipsum
});

当你导航到FirstClass时,你应该在你的SecondClass中使用它。


完整解决方案

class _FirstClassState extends State<FirstClass> {
  String _string = "";

  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      child: Text("Go"),
      onPressed: () {
        Navigator.of(context).push(MaterialPageRoute(builder: (context) => SecondClass())).then(
          (value) {
            setState(() {
              _string = value; // lorem ipsum
            });
          },
        );
      },
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.