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

问题描述 投票:0回答:1

又是我。希望您能帮忙。我正在从事高级 UI 编程,因此我将此视图分为两部分:

CodeView

第一个名为 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 中,我在调试控制台上收到此错误消息

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):

ErrorImageView

这个问题帮我做方法:

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

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

flutter methods widget
1个回答
0
投票

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

小部件文本字段

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

© www.soinside.com 2019 - 2024. All rights reserved.