Поэтому я хочу иметь возможность сохранить текст из текстового контроллера, который пользователь ввел в общие настройки. Однако я хочу одновременно перейти и на следующую страницу.

Так:

  1. Сохранить текст в общих настройках
  2. Перейти на следующую страницу

    final _text = TextEditingController();
    
    _nameSaver() async {
        SharedPreferences prefs = await SharedPreferences.getInstance();
        prefs.setString('my_string_key', _text.text);
      }
    
    FooterRaisedButton(
                      "Next",
                      () => (_text.text.isEmpty)
                          ? null
                          : Navigator.pushNamed(context, '/onboardMarket'),
                      "#0087a8")
    

Я не знаю, как вызвать функцию, которая сохраняет имя в то же время, когда нажатая кнопка перейдет на следующую страницу

2
irongirl 30 Май 2019 в 09:08

2 ответа

Лучший ответ

Удалите жирную стрелку (=>) и примените ее следующим образом:

FooterRaisedButton(
  "Next",
   () async {
    if (_text.text.isEmpty)
      return; // return if it is empty
    await nameSaver(); // else save it here
    Navigator.pushNamed(context, '/onboardMarket'); // once done, navigate
  }
);

Просто чтобы дать вам основную идею,

// only one statement can be executed using fat notation
RaisedButton(onPressed: () => _calculate(1));

// here you can perform as many as you need.
RaisedButton(onPressed: () {
  _calculate(1);
  _printScreen();
});
4
CopsOnRoad 30 Май 2019 в 06:23

Попробуйте этот код, он должен работать:

Код:

final _text = TextEditingController();

  _nameSaver() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('my_string_key', _text.text);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: RaisedButton(
        child: Text("Next"),
        onPressed: (){
          if(_text.text.isEmpty){
            print("Cannot use empty text");
          }
          else {
            _nameSaver();
            Navigator.pushNamed(context, '/onboardMarket');
          }

        },
      ),
    );
  }
0
Yash Jain 30 Май 2019 в 06:21