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。我只提供了传递数据的最小值。如何构造类取决于您自己。如果这解决了数据传递问题,请将其标记为已解决。我不知道您是如何实施这些建议的,因此我无法告诉您出了什么问题。