Znalazłem wiele rozwiązań przechodzących dane między bezpaństwowców i według stanu , ale nie między Dwa stanowe widżety

edytuj: Edytowałem kod, aby wyświetlić więcej szczegółów

Strona główna

class MainPage extends StatefulWidget {
  final String name;
  MainPage({Key key, this.name}) : super(key: key);

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

class _MainPageState extends State<MainPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(      
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text("Text from 2nd page -> "), //should return "Text from 2nd page -> BATMAN"
            FloatingActionButton(
              child: Icon(Icons.android),
              onPressed: (){
                Navigator.push(context, MaterialPageRoute(
                    builder: (context) => SecondPage()
                ));
              },
            ),
            
          ],
        ),
      ),
    );
  }
}

MainPage screenshot

SecondPage:

class SecondPage extends StatefulWidget {
  SecondPage({Key key}) : super(key: key);

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

class _SecondPageState extends State<SecondPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      ...
      
      Text("I choose ${_selectedMethod.name}"), // this returned "I choose BATMAN"
      
    ...
  }

SecondPage screenshot

Zasadniczo chcę przejść ${_selectedMethod.name} z drugiej strony na stronę główną. przepraszam, że tak źle wyjaśniam :(

0
Domi 11 marzec 2020, 23:13

2 odpowiedzi

Najlepsza odpowiedź

Możesz przekazać zmienne z powrotem do poprzedniej strony w stosie Nawigatora, wysyłając go przez metodę .pop() i oczekiwanie ich na poprzedniej stronie metody {X1}}:

class MainPage60643815 extends StatefulWidget {
  @override
  _MainPage60643815State createState() => _MainPage60643815State();
}

class _MainPage60643815State extends State<MainPage60643815> {
  String displayTextFromSecondPage = '';

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Test from second page: '),
              Text(displayTextFromSecondPage),
            ],
          ),
          RaisedButton(
            onPressed: goToSecondPage,
            child: Text('Go to 2nd Page'),
          ),
        ],
      ),
    );
  }

  void goToSecondPage(){
    Navigator.of(context).push(MaterialPageRoute(
      builder: (context) {
        return SecondPage60643815(text: displayTextFromSecondPage);
      }
    )).then((valueFromSecondPage){
      setState(() {
        displayTextFromSecondPage = valueFromSecondPage;
      });
    });
  }
}

class SecondPage60643815 extends StatefulWidget {
  final String text;

  SecondPage60643815({this.text});

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

class _SecondPage60643815State extends State<SecondPage60643815> {
  TextEditingController _textEditingController;

  @override
  void initState() {
    _textEditingController = TextEditingController(
      text: widget.text,
    );
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          icon: Icon(Icons.arrow_back),
          onPressed: goToFirstPage,
        ),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              TextFormField(
                controller: _textEditingController,
                autofocus: true,
              ),
            ],
          ),
        ),
      ),
    );
  }

  void goToFirstPage(){
    Navigator.of(context).pop(_textEditingController.text);
  }
}
1
João Soares 12 marzec 2020, 15:42

Zakładam, że masz sekcję -dpage -widget. Więc możesz zrobić coś w rodzaju:

class _MainPageState extends State<MainPage> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: SecondPage('BATMAN'),
    );
  }
}

Może to wydrukować żądany tekst "batmat".

EDYTUJ

Może to być widget - widget:

class SecondPage extends StatefulWidget {
  final String selection;

  SecondPage(this.selection);

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

class _SecondPageState extends State<SecondPage> {
  @override
  Widget build(BuildContext context) {
    return Container(
       child: Text(widget.selection),
    );
  }
}
0
brunsi 13 marzec 2020, 13:48