0

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.

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.