在高级页面之间传递数据 (Flutter)

Pass data between advanced pages (Flutter)

提问人:Kevin Mendoza 提问时间:11/9/2023 更新时间:11/9/2023 访问量:30

问:

又是我。希望你能帮上忙。我正在进行高级UI编程,所以我将这个视图分为两部分:

代码视图

第一个名为create_order_page.dart,在CreateCQpart1的这个文件中,我在TextFormField上有如下内容:

widgetTextField: TextFormField(
                  enabled: enable,
                  keyboardType: TextInputType.number,
                  textCapitalization: TextCapitalization.characters,
                  controller: controllerNumClient,
                  decoration: InputDecoration(border: OutlineInputBorder()),
                  onFieldSubmitted: (valor) {
                    _findClient();
                  },
                ),

第二个文件是名为 part1_create_cq.dart 的视图的第一部分,使用如下构造函数,其中 widgetTextField 是标识符:

class CreateCQpart1 extends StatefulWidget {
  final TextEditingController dateFO;
  final VoidCallback methodFO;
  final TextEditingController dateFS;
  final VoidCallback methodFS;
  final Widget widgetDropdownCFDI;
  final TextEditingController widgetControllerMXN;
  final bool enable;
  final TextEditingController widgetControllerRefClientOC;
  final Widget widgetCheckBox;
  final TextEditingController widgetControllerMumClient;
  final VoidCallback methodFindClient;
  Widget widgetTextField;
  final VoidCallback showInfo;
  final VoidCallback methodCreateClient;
  final VoidCallback methodEditClient;
  final String nClient;
  final String client;
  final String rfc;
  final String person;
  CreateCQpart1({
    Key key,
    this.nClient,
    this.client,
    this.rfc,
    this.person,
    this.showInfo,
    this.dateFO,
    this.dateFS,
    this.widgetControllerMXN,
    this.widgetControllerRefClientOC,
    this.widgetCheckBox,
    this.methodFO,
    this.methodFS,
    this.widgetDropdownCFDI,
    this.widgetControllerMumClient,
    this.methodFindClient,
    this.enable,
    this.methodCreateClient,
    this.methodEditClient,
    this.widgetTextField,
  }) : super(key: key);
  @override
  State<CreateCQpart1> createState() => _CreateCQpart1State();
}

我把小部件放在这样:

Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              SizedBox(
                  width: 80,
                  child: Text(
                    'Number de client*:',
                    style: TextStyle(fontWeight: FontWeight.bold),
                  )),
              Container(
                  height: 36, width: 120, child: this.widget.widgetTextField),
              SizedBox(
                width: 37,
                height: 37,

同样,我有一个按钮,我有这个方法从另一个名为 content_filter_client.dart 的文件返回数据,我在其中搜索数据以供使用并放入文件 part1_create_cq.dart 上的 widgetTextField,这是 content_filter_client.dart 上的方法:

 onPressed: () {
      setState(() {
         numberClient =
            '${results[index].noClient}';
               });

      _sendBack(context);
            }),

void _sendBack(BuildContext context) {
    var infoSendBack = numberClient;

    Navigator.pop(context, infoSendBack);
  }

part1_create_cq.dart 上的方法是:

void _navigateToSearchScreen(BuildContext context) async {
    // ignore: unused_local_variable
    final result = await Navigator.push(
        context, MaterialPageRoute(builder: (context) => FilterClient()));

    //after
    setState(() {
      widget.widgetTextField = result;
    });
  }

所有这些带来的错误是它没有将数据放在 TextFormField 中,我在 debbugconsole 上收到了此错误消息

E/flutter ( 6324): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: type 'String' is not a subtype of type 'Widget' in type cast
E/flutter ( 6324): #0      _CreateCQpart1State._navigateToSearchScreen.<anonymous closure>
part1_create_cq.dart:486
E/flutter ( 6324): #1      State.setState
framework.dart:1088
E/flutter ( 6324): #2      _CreateCQpart1State._navigateToSearchScreen
part1_create_cq.dart:485
E/flutter ( 6324): <asynchronous suspension>
E/flutter ( 6324):

错误图像视图

这个问题帮助我做方法:

https://stackoverflow.com/a/53861303/20532198

有没有办法通过这种方法正确传递数据???感谢您的帮助!

Flutter 方法 小部件

评论


答:

0赞 Haider Saleem 11/9/2023 #1

我还没有浏览您的所有代码,但是看到错误和最后一段代码,我可以猜到您的回调正在返回一个字符串,并且您正在尝试将其分配给

widgetTextField(小部件文本字段)

这是一个 Widget,您可以做的是创建一个新的 TextFormField 小部件,为其分配结果值,然后将其分配给您的 widgetTextField,我不建议您在代码中进行一些更改以更新字符串变量,该变量可以反映在您的 TextFormField 中。

评论

0赞 Kevin Mendoza 11/9/2023
感谢您的评论,您认为如果我在 vars 上操作数据然后将其放在主视图的小部件元素上,它可以工作吗?作为紧急替代方案?
0赞 Haider Saleem 11/9/2023
如果您需要紧急替代方案,那么只需传递更新的文本小部件,否则您将不得不更改大量代码。