如何将数据从StatefulWidget传递到StatefulWidget,(错误)

时间:2020-07-16 22:29:52

标签: flutter dart

我完全是个初学者。

我想要做的是(通过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
                      )
                  ),

根据我的研究,这应该有效,但事实并非如此。我为什么会犯错误?

这是参考文献

谢谢。

编辑

a

b

1 个答案:

答案 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
 )