又是我。希望您能帮忙。我正在从事高级 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 中,我在调试控制台上收到此错误消息
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
有没有办法通过这种方法正确传递数据???感谢您的帮助!
我还没有浏览完你的所有代码,但看到错误和最后一段代码,我可以猜测你的回调正在返回一个字符串,并且你正在尝试将其分配给
小部件文本字段
这是一个Widget,您可以做的是创建一个新的 TextFormField 小部件,为其分配结果值,然后将其分配给您的 widgetTextField,我不建议您这样做,而是您应该在代码中进行一些更改以更新字符串变量,可以在您的 TextFormField 中反映它。