我完全是个初学者。
我想要做的是(通过TextController)将数据从StatefulWidget传递给另一个。
这是我的代码(被动小部件)
import 'package:flutter/material.dart';
class VocabularyText extends StatefulWidget {
final String text;
// ignore: sort_constructors_first
const VocabularyText ({ Key key, this.text }): super(key: key);
@override
_VocabularyTextState createState() => _VocabularyTextState();
}
class _VocabularyTextState extends State<VocabularyText> {
Offset offset = Offset.zero;
@override
Widget build(BuildContext context) {
return Container(
child: Positioned(
left: offset.dx,
top: offset.dy,
child: GestureDetector(
onPanUpdate: (details) {
setState(() {
offset = Offset(
offset.dx + details.delta.dx, offset.dy + details.delta.dy);
});
},
child: const SizedBox(
width: 300,
height: 300,
child: Padding(
padding: EdgeInsets.all(8),
child: Center(
child: Text(
'a',
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 28,
color: Colors.red
)
),
),
),
)),
),
);
}
}
事情在这里
child: Text(
//
widget.text,
//
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 28,
color: Colors.red
)
),
根据我的研究,这应该有效,但事实并非如此。我为什么会犯错误?
这是参考文献
谢谢。
答案 0 :(得分:0)
我在看到图像不存在之前回答了 看完图片后 造成问题的原因是什么
widget.text
在“文本”小部件中使用它的正确方法如下:
Text('${widget.text}'),
我建议您执行以下操作
要首先将数据发送到Statefull小部件,您可以使用Navigator或任何其他方法像这样向用户打开此小部件
return GestureDetector(
onTap: () => {
Navigator.push(
context,
MaterialPageRoute(builder: (context) =>
//note here between the () you pass the variable
Categories(companies[index].id, companies[index].name)),
)},
然后要接收它们,就我而言,它就是类别类
class Categories extends StatefulWidget {
//getting company id from home page
final int companyId;
final companyName;
Categories(this.companyId , this.companyName);
@override
_CategoriesState createState() => _CategoriesState();
}
class _CategoriesState extends State<Categories> {
@override
Widget build(BuildContext context) {
...... rest of the code
现在,要使用数据,您可以像这样
widget.companyId
这是我代码中的一个示例,现在让我们跳转到您的代码
要从文本编辑控制器接收文本
class TextReceiver extends StatefulWidget {
//getting company id from home page
final String userInput;
TextReceiver(this.userInput);
@override
TextReceiver createState() => _TextReceiver();
}
//to use it
widget.userInput
现在要发送它,您可以通过Material Navigator发送它
onTap: () => {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TextReceiver(TextEditingController.text)),
)},
请注意,您应该将其作为TextEditingController.text传递,因为如果您传递了TextEditingController,则TextReceiver中的构造函数会将类型指定为String,那么该类型将不是String,而是TextEditingController类型
例如,所有这些代码都不会像您的代码,但可以为您提供想法
请参阅官方文档https://flutter.dev/docs/cookbook/navigation/passing-data
编辑:从此行中删除const
child: const SizedBox(
rest of the code
)
to this
child: SizedBox(
rest of the code
)