Это мой второй класс

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 и отобразить ее в первом классе, где я должен поместить код, чтобы получить эту строку?

0
Ashtav 12 Апр 2019 в 10:58

2 ответа

Лучший ответ

enter image description here

Вы можете видеть на скриншоте, какой бы элемент не был нажат на 2-м экране, он возвращается на страницу 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
            },
          );
        },
      ),
    );
  }
}
1
CopsOnRoad 12 Апр 2019 в 15:29
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
            });
          },
        );
      },
    );
  }
}
0
CopsOnRoad 12 Апр 2019 в 08:00