Validation 无法验证颤振/省道中的强制输入字段小部件

Validation 无法验证颤振/省道中的强制输入字段小部件,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;

我试图验证我的用户输入,其中包含两个输入字段“标题”和“描述”后,点击浮动操作按钮,但我得到了一个错误,当我这样做

notes\u detail\u widget.dart

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