Validation 无法验证颤振/省道中的强制输入字段小部件
我试图验证我的用户输入,其中包含两个输入字段“标题”和“描述”后,点击浮动操作按钮,但我得到了一个错误,当我这样做 notes\u detail\u widget.dartValidation 无法验证颤振/省道中的强制输入字段小部件,validation,dart,flutter,Validation,Dart,Flutter,我试图验证我的用户输入,其中包含两个输入字段“标题”和“描述”后,点击浮动操作按钮,但我得到了一个错误,当我这样做 notes\u detail\u widget.dart class NoteDetailsWidgetState extends State<NoteDetailsWidget> { final _formKey = new GlobalKey<FormState>(); String _title; String _description;
class NoteDetailsWidgetState extends State<NoteDetailsWidget> {
final _formKey = new GlobalKey<FormState>();
String _title;
String _description;
_submit() {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
}
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Edit note data"),
),
body: new Form(
child: new Container(
margin: new EdgeInsets.all(16.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Container(
child: new TextFormField(
decoration: new InputDecoration(
labelText: "Title",
border: InputBorder.none,
),
validator: (val) =>
val.isNotEmpty ? null : "Title must not be empty",
onSaved: (val) => _title = val),
),
new Container(
child: new Divider(
color: Colors.black,
)),
new TextFormField(
decoration: new InputDecoration(
labelText: "Description",
border: InputBorder.none,
),
keyboardType: TextInputType.multiline,
maxLines: 3,
validator: (val) =>
val.isNotEmpty ? null : "Description must not be empty",
onSaved: (val) => _description = val,
)
])),
),
floatingActionButton: new FloatingActionButton(
onPressed: () => _submit(), child: new Icon(Icons.check)),
);
}
}
class NoteDetailsWidgetState扩展状态{
final _formKey=新的GlobalKey();
字符串标题;
字符串描述;
_提交(){
if(_formKey.currentState.validate()){
_formKey.currentState.save();
}
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“编辑注释数据”),
),
正文:新表格(
子容器:新容器(
边距:所有新边集(16.0),
子:新列(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
新容器(
子项:新建TextFormField(
装饰:新的输入装饰(
标签文字:“标题”,
边框:InputBorder.none,
),
验证器:(val)=>
val.isNotEmpty?null:“标题不能为空”,
保存:(val)=>_title=val),
),
新容器(
孩子:新的分隔器(
颜色:颜色,黑色,
)),
新TextFormField(
装饰:新的输入装饰(
标签文字:“描述”,
边框:InputBorder.none,
),
键盘类型:TextInputType.multiline,
maxLines:3,
验证器:(val)=>
val.isNotEmpty?null:“说明不能为空”,
保存:(val)=>_description=val,
)
])),
),
floatingActionButton:新的floatingActionButton(
按下时:()=>\u submit(),子项:新图标(Icons.check)),
);
}
}
错误日志:
I/flutter ( 8055): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter ( 8055): The following NoSuchMethodError was thrown while handling a gesture:
I/flutter ( 8055): The method 'validate' was called on null.
I/flutter ( 8055): Receiver: null
I/flutter ( 8055): Tried calling: validate()
I/flutter ( 8055):
I/flutter ( 8055): When the exception was thrown, this was the stack:
I/flutter ( 8055): #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
I/flutter ( 8055): #1 NoteDetailsWidgetState._submit (package:notes_crud_app/note_details_widget.dart:16:31)
I/flutter ( 8055): #2 NoteDetailsWidgetState.build.<anonymous closure> (package:notes_crud_app/note_details_widget.dart:61:28)
I/flutter ( 8055): #3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
I/flutter ( 8055): #4 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
I/flutter ( 8055): #5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
I/flutter ( 8055): #6 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
I/flutter ( 8055): #7 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
I/flutter ( 8055): #8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
I/flutter ( 8055): #9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
I/flutter ( 8055): #10 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
I/flutter ( 8055): #11 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)
I/flutter ( 8055): #12 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
I/flutter ( 8055): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
I/flutter ( 8055): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
I/flutter ( 8055): #15 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
I/flutter ( 8055): #16 _invoke1 (dart:ui/hooks.dart:168:13)
I/flutter ( 8055): #17 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)
I/颤振(8055):══╡ 用手势捕捉异常╞═══════════════════════════════════════════════════════════════════
I/flatter(8055):处理手势时抛出以下NoSuchMethodError:
I/flatter(8055):对null调用了“validate”方法。
I/颤振(8055):接收器:空
I/flatter(8055):尝试调用:validate()
I/颤振(8055):
I/flatter(8055):当抛出异常时,这是堆栈:
I/flatter(8055):#0 Object.noSuchMethod(dart:core/runtime/libobject_patch.dart:50:5)
I/flatter(8055):#1 NoteDetailsWidgetState._提交(包:notes_crud_应用程序/note_details_小部件。dart:16:31)
I/颤振(8055):#2注意细节swidgetstate.build。(软件包:notes\u crud\u app/note\u details\u widget.dart:61:28)
I/颤振(8055):#3(InkResponseEstate.)(handleTap)(包装:颤振/src/材料/墨水(well.省道:507:14)
I/flatter(8055):#4#InkResponseState.build。(包装:颤振/src/材料/墨水井。省道:562:30)
I/flatter(8055):#5手势识别器.invokeCallback(包:flatter/src/signatures/recognizer.dart:102:24)
I/flatter(8055):#6 TapGestureRecognitor._检查(包:flatter/src/signatures/tap.dart:242:9)
I/flatter(8055):#7 TapGestureRecognitor.handlePrimaryPointer(包:flatter/src/signatures/tap.dart:175:7)
I/flatter(8055):#8 PrimaryPointerGestureRecognizer.handleEvent(包:flatter/src/signatures/recognizer.dart:315:9)
I/flatter(8055):#9点外部程序。#调度(包:flatter/src/signatures/pointer_router。dart:73:12)
I/flatter(8055):#10 PointerRouter.route(包:flatter/src/signatures/pointer_router.dart:101:11)
I/flatter(8055):#11#WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent(包:flatter/src/signatures/binding.dart:180:19)
I/flatter(8055):#12_WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent(包:flatter/src/signatures/binding.dart:158:22)
I/flatter(8055):#13#WidgetsFlutterBinding&BindingBase&GestureBinding.#handlePointerEvent(包:flatter/src/signatures/binding.dart:138:7)
I/flatter(8055):#14#WidgetsFlutterBinding&BindingBase&GestureBinding.#flushPointerEventQueue(包:flatter/src/signatures/binding.dart:101:7)
I/flatter(8055):#15#WidgetsFlutterBinding&BindingBase&GestureBinding.#handlePointerDataPacket(packet:flatter/src/signatures/binding.dart:85:7)
I/flatter(8055):#16 invoke1(省道:ui/hooks.dart:168:13)
I/flatter(8055):#17_dispatchPointerDataPacket(dart:ui/hooks.dart:122:5)
我对
Dart
和flatter
都是新手。请指导。您没有在表单中添加表单密钥
body:new Form(
key: _formKey,
child: new Column(
//rest of the code
)
),
您没有在表单中添加表单键
body:new Form(
key: _formKey,
child: new Column(
//rest of the code
)
),