String 如何在Flatter中的同一活动中将字符串值从一个类传递到另一个类?

String 如何在Flatter中的同一活动中将字符串值从一个类传递到另一个类?,string,class,flutter,pass-data,String,Class,Flutter,Pass Data,//我找不到将字符串从一个类传递到另一个类的方法。它们都在同一个屏幕上,我想将索引从类的页面视图传递到另一个页面视图。任何帮助都将不胜感激 //on the first class// onPageChanged: (int index) { _sendDataToAnotherClass(context, index); _currentPageNotifier.value = index; }),

//我找不到将字符串从一个类传递到另一个类的方法。它们都在同一个屏幕上,我想将索引从类的页面视图传递到另一个页面视图。任何帮助都将不胜感激

//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);

如果您的personaname是一个类(仅供参考,如果它确实是一个类,正确的格式是大写每个单词的第一个字母-personaname),并且该类是一个有状态的小部件,那么您可以将数据向下传递给它,并在状态内执行调用,以覆盖方法以设置数据更改状态。这意味着您不需要值通知程序

像这样的东西可能会满足您的需求:

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(() {});
    }
  }
}
class PageViewHolder扩展了无状态小部件{
PersonaName=PersonaName(文本:'text',);
@凌驾
小部件构建(构建上下文){
返回页面视图(
onPageChanged:(p){
var textToSend='do logic to decision name';
name.text=textToSend;
},
);
}
}
类PersonaName扩展了StatefulWidget{
字符串文本;
personName({Key-Key,this.text}):super(Key:Key);
@凌驾
State createState()=>\u personName();
}
类_personame扩展了状态{
@凌驾
小部件构建(构建上下文){
返回文本(widget.Text);
}
@凌驾
void didUpdateWidget(PersonalName oldWidget){
super.didUpdateWidget(oldWidget);
if(widget.text!=oldWidget.text){
setState((){});
}
}
}

一些您尝试过的代码可能会有所帮助。请编辑您的问题并使用代码格式工具。像comment部分那样以单个字符串的形式读取代码有点困难。您说过这些代码在同一屏幕上,但我看到了navigator.push()调用,这意味着它不能在同一屏幕上。它们在同一屏幕上,但在不同的dart文件中。navigator.push()是我找到的唯一解决方案,但它不起作用。太好了,应该可以。唯一的问题是PersonaName类中的字符串文本为null。我只提供了传递数据的最小值。如何构造类取决于您自己。如果这解决了数据传递问题,请将其标记为已解决。我不知道您是如何实施这些建议的,因此我无法告诉您出了什么问题。