代码之家  ›  专栏  ›  技术社区  ›  Nital

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

  •  0
  • Nital  · 技术社区  · 6 年前

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

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

    错误日志:

    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)
    

    我对这两个都很陌生 Dart Flutter . 请导游。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Sami Kanafani    6 年前

    您没有在表单中添加表单键

    body:new Form(
       key: _formKey,
       child: new Column(
         //rest of the code
       )
    ),