Flutter Provider Error : Unhandled Exception: NoSuchMethodError: The getter 'owner' was called on null

Issue

I’am building an application with Flutter. Post user register data into database and post login is going well. But on the dashboard I can’t post data at all.

My Emulator

My Page Form:

final GlobalKey<FormState> _formKey = GlobalKey<FormState>();


class MainScreen4 extends StatelessWidget {
  final BuildContext menuScreenContext;
  final Function onScreenHideButtonPressed;
  final bool hideStatus;

  String message;

  BuildContext context;

  Future<void> send() async {
    _formKey.currentState.save();
    print("field: $message");
    Provider.of<SavingProvider>(context, listen: false)
        .storeMessage(message)
        .then((res) {
      if (res != null) {
        print('Success');
      } else {
        print('Failed');
      }
    });
  }

  MainScreen4(
      {Key key,
      this.menuScreenContext,
      this.onScreenHideButtonPressed,
      this.hideStatus = false})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey.shade300,
      appBar: AppBar(
        centerTitle: true,
        title: const Text('Pesan'),
      ),
      body: Stack(
        children: <Widget>[
          Container(
            padding: EdgeInsets.only(bottom: 50),
            margin: EdgeInsets.all(10),
            child: FutureBuilder(
              future: Provider.of<SavingProvider>(context, listen: false)
                  .customerMessage(),
              builder: (context, snapshot) {
                return Consumer<SavingProvider>(
                  builder: (context, data, _) {
                    return ListView.builder(
                      itemCount: data.dataMessage.length,
                      shrinkWrap: true,
                      padding: EdgeInsets.only(top: 10, bottom: 10),
                      //physics: NeverScrollableScrollPhysics(),
                      itemBuilder: (context, m) {
                        return Container(
                          padding: EdgeInsets.only(
                              left: 14, right: 14, top: 10, bottom: 10),
                          child: Align(
                            alignment: (data.dataMessage[m].sender == "bank"
                                ? Alignment.topLeft
                                : Alignment.topRight),
                            child: Container(
                              decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(20),
                                color: (data.dataMessage[m].sender == "bank"
                                    ? Colors.grey.shade200
                                    : Colors.blue[200]),
                              ),
                              padding: EdgeInsets.all(16),
                              child: ListTile(
                                title: Text('${data.dataMessage[m].message}',
                                    style: TextStyle(
                                        fontSize: 14, color: Colors.black),
                                    textAlign: TextAlign.left),
                                subtitle: Text(
                                    '${data.dataMessage[m].createdAt}',
                                    style: TextStyle(color: Colors.grey[700]),
                                    textAlign: TextAlign.left),
                              ),
                            ),
                          ),
                        );
                      },
                    );
                  },
                );
              },
            ),
          ),
          Align(
            alignment: Alignment.bottomLeft,
            child: Container(
              padding: EdgeInsets.only(left: 10, bottom: 10, top: 10),
              height: 60,
              width: double.infinity,
              color: Colors.white,
              child: Form(
                key: _formKey,
                child: Row(
                  children: <Widget>[
                    Expanded(
                      child: TextFormField(
                        onSaved: (value) => message = value,
                        decoration: InputDecoration(
                            hintText: "Write something...",
                            hintStyle: TextStyle(color: Colors.black54),
                            border: InputBorder.none),
                        validator: (value) =>
                            value.isEmpty ? "Required" : null,
                      ),
                    ),
                    SizedBox(
                      width: 15,
                    ),
                    FloatingActionButton(
                      onPressed: () {
                        send();
                      },
                      child: Icon(
                        Icons.send,
                        color: Colors.white,
                        size: 18,
                      ),
                      backgroundColor: Colors.blue,
                      elevation: 0,
                    ),
                  ],
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

My Provider:

// Store Message
  Future<Map<String, dynamic>> storeMessage(String message) async {
    String myId = await getId();
    final url = ApiUrl.customerMessageStore;
    print(url);
    print(message);
    final response = await http
        .post(Uri.parse(url), body: {'customer_id': myId, 'message': message});
    print('Response code: ${response.statusCode}');
    final result = json.decode(response.body);
    var dataResponse;
    if (response.statusCode == 201) {
      notifyListeners();
      dataResponse = {
        'type': 'success',
        'title': 'Sent',
        'message': result['message']
      };
      return dataResponse;
    }
    dataResponse = {
      'type': 'error',
      'title': 'Failed',
      'message': 'Server Error di Provider'
    };
    return dataResponse;
  }

Command Promt console:

E/flutter ( 4700): Tried calling: owner
E/flutter ( 4700): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
E/flutter ( 4700): #1      Provider.of (package:provider/src/provider.dart:265:15)
E/flutter ( 4700): #2      MainScreen4.send (package:trashbank/pages/screens.dart:401:14)
E/flutter ( 4700): #3      MainScreen4.build.<anonymous closure> (package:trashbank/pages/screens.dart:507:25)
E/flutter ( 4700): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:994:20)
E/flutter ( 4700): #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 4700): #6      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:607:11)
E/flutter ( 4700): #7      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
E/flutter ( 4700): #8      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
E/flutter ( 4700): #9      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
E/flutter ( 4700): #10     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:93:12)
E/flutter ( 4700): #11     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:138:9)
E/flutter ( 4700): #12     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8)
E/flutter ( 4700): #13     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:136:18)
E/flutter ( 4700): #14     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:122:7)
E/flutter ( 4700): #15     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:439:19)
E/flutter ( 4700): #16     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:419:22)
E/flutter ( 4700): #17     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:288:11)
E/flutter ( 4700): #18     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7)
E/flutter ( 4700): #19     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5)
E/flutter ( 4700): #20     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:296:7)
E/flutter ( 4700): #21     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:279:7)
E/flutter ( 4700): #22     _rootRunUnary (dart:async/zone.dart:1370:13)
E/flutter ( 4700): #23     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 4700): #24     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter ( 4700): #25     _invoke1 (dart:ui/hooks.dart:186:10)
E/flutter ( 4700): #26     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:282:7)
E/flutter ( 4700): #27     _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)

I don’t understand what ‘owner’ means. Please help so that it can run well. Thank you.

Solution

You have this code:

BuildContext context;

Future<void> send() async {
  _formKey.currentState.save();
  print("field: $message");
  Provider.of<SavingProvider>(context, listen: false)
      .storeMessage(message)
      .then((res) {

But your variable context is not initialised. You could move the send() function inside the build method, or initialise your variable context inside the build method, e.g.

Widget build(BuildContext ctx) {
  context = ctx;

or you could pass the context as a parameter to the send method – this is my preferred approach:

Future<void> send(BuildContext context) async {

The error message:

E/flutter ( 4700): Tried calling: owner
E/flutter ( 4700): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
E/flutter ( 4700): #1      Provider.of (package:provider/src/provider.dart:265:15)

Is telling you that at line 265 of the file provider.dart, the method Provider.of invoked a method owner which was not found. Looking at the source code you will see it refers to context.owner. The issue is that context is null.

Answered By – Patrick O'Hara

Answer Checked By – Dawn Plyler (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *