Как передать строковое значение из класса в другой в той же деятельности во Flutter? - PullRequest
0 голосов
/ 03 июня 2019

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

//on the first class//


            onPageChanged: (int index) {
            _sendDataToAnotherClass(context, index);
            _currentPageNotifier.value = index;
          }),
      ),
    );
}


  void _sendDataToAnotherClass(BuildContext context, int index) {
    final String texttosend = index.toString();
    Navigator.of(context).push(
        MaterialPageRoute(
            builder: (context) {
              return new personaname(text: texttosend);
            }

        ));
  }


//on the second class//

 final String text ;
 personaname({Key key, @required this.text}) : super(key: key);

1 Ответ

0 голосов
/ 03 июня 2019

если ваше personaname является классом (просто fyi, если это действительно класс, то правильный формат должен состоять из прописных букв каждого слова - PersonaName), и этот класс является виджетом с отслеживанием состояния, в который вы можете передать данные ивыполнить вызов в этом состоянии, чтобы переопределить метод didUpdateWidget для setState при изменении данных.Это будет означать, что вам не нужен уведомитель значения.

Что-то подобное может сделать то, что вы ищете:

class PageViewHolder extends StatelessWidget{

  PersonaName name = PersonaName(text: 'text',);

  @override
  Widget build(BuildContext context) {

    return PageView(
      onPageChanged: (p){
        var textToSend = 'do logic to decide name';
        name.text = textToSend;
      },
    );
  }

}


class PersonaName extends StatefulWidget{
  String text;

  PersonaName({Key key, this.text}) : super(key: key);

  @override
  State<StatefulWidget> createState() =>_PersonaName();
}

class _PersonaName extends State<PersonaName>{



  @override
  Widget build(BuildContext context) {
    return Text(widget.text);
  }

  @override
  void didUpdateWidget(PersonaName oldWidget) {
    super.didUpdateWidget(oldWidget);
    if(widget.text != oldWidget.text){
      setState(() {});
    }
  }
}
...