Dialogflow Flutter Chatbot - NoSuchMethodError: The method '[]' was called on null

513

I got the same problem previously, and then I try to create a new credential with this role:

Dialogflow -> Dialogflow API Admin.

This will work for sure.

Share:
513
Admin
Author by

Admin

Updated on December 17, 2022

Comments

  • Admin
    Admin over 1 year

    I have the following problem: NoSuchMethodError: The method '[]' was called on null When I send a message on the chatbot.

    I was trying to learn how to create a chatbot from medium: https://medium.com/flutter-community/build-a-chatbot-in-20-minutes-using-flutter-and-dialogflow-8e9af1014463

    The code, which runs otherwise fine is below:

    import 'package:flutter/material.dart';
    import 'package:flutter_dialogflow/dialogflow_v2.dart';
    
    class HomePageDialogflow extends StatefulWidget {
      HomePageDialogflow({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _HomePageDialogflow createState() => new _HomePageDialogflow();
    }
    
    class _HomePageDialogflow extends State<HomePageDialogflow> {
      final List<ChatMessage> _messages = <ChatMessage>[];
      final TextEditingController _textController = new TextEditingController();
    
      Widget _buildTextComposer() {
        return new IconTheme(
          data: new IconThemeData(color: Theme.of(context).accentColor),
          child: new Container(
            margin: const EdgeInsets.symmetric(horizontal: 8.0),
            child: new Row(
              children: <Widget>[
                new Flexible(
                  child: new TextField(
                    controller: _textController,
                    onSubmitted: _handleSubmitted,
                    decoration:
                        new InputDecoration.collapsed(hintText: "Send a message"),
                  ),
                ),
                new Container(
                  margin: new EdgeInsets.symmetric(horizontal: 4.0),
                  child: new IconButton(
                      icon: new Icon(Icons.send),
                      onPressed: () => _handleSubmitted(_textController.text)),
                ),
              ],
            ),
          ),
        );
      }
    
      void Response(query) async {
        _textController.clear();
        AuthGoogle authGoogle =
            await AuthGoogle(fileJson: "assets/comply-267617-22528f20809f.json")
                .build();
        Dialogflow dialogflow =
            Dialogflow(authGoogle: authGoogle, language: Language.english);
        AIResponse response = await dialogflow.detectIntent(query);
        ChatMessage message = new ChatMessage(
          text: response.getMessage() ??
              new CardDialogflow(response.getListMessage()[0]).title,
          name: "Bot",
          type: false,
        );
        setState(() {
          _messages.insert(0, message);
        });
      }
    
      void _handleSubmitted(String text) {
        _textController.clear();
        ChatMessage message = new ChatMessage(
          text: text,
          name: "Promise",
          type: true,
        );
        setState(() {
          _messages.insert(0, message);
        });
        Response(text);
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            leading: new IconButton(
              icon: new Icon(Icons.arrow_back), 
              onPressed: (){Navigator.pop(context);}),
            centerTitle: true,
            title: new Text("COMPLYNION"),
          ),
          body: new Column(children: <Widget>[
            new Flexible(
                child: new ListView.builder(
              padding: new EdgeInsets.all(8.0),
              reverse: true,
              itemBuilder: (_, int index) => _messages[index],
              itemCount: _messages.length,
            )),
            new Divider(height: 1.0),
            new Container(
              decoration: new BoxDecoration(color: Theme.of(context).cardColor),
              child: _buildTextComposer(),
            ),
          ]),
        );
      }
    }
    
    class ChatMessage extends StatelessWidget {
      ChatMessage({this.text, this.name, this.type});
    
      final String text;
      final String name;
      final bool type;
    
      List<Widget> otherMessage(context) {
        return <Widget>[
          new Container(
            margin: const EdgeInsets.only(right: 16.0),
            child: new CircleAvatar(child: new Text('B')),
          ),
          new Expanded(
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                new Text(this.name,
                    style: new TextStyle(fontWeight: FontWeight.bold)),
                new Container(
                  margin: const EdgeInsets.only(top: 5.0),
                  child: new Text(text),
                ),
              ],
            ),
          ),
        ];
      }
    
      List<Widget> myMessage(context) {
        return <Widget>[
          new Expanded(
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.end,
              children: <Widget>[
                new Text(this.name, style: Theme.of(context).textTheme.subhead),
                new Container(
                  margin: const EdgeInsets.only(top: 5.0),
                  child: new Text(text),
                ),
              ],
            ),
          ),
          new Container(
            margin: const EdgeInsets.only(left: 16.0),
            child: new CircleAvatar(
                child: new Text(
              this.name[0],
              style: new TextStyle(fontWeight: FontWeight.bold),
            )),
          ),
        ];
      }
    
      @override
      Widget build(BuildContext context) {
        return new Container(
          margin: const EdgeInsets.symmetric(vertical: 10.0),
          child: new Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: this.type ? myMessage(context) : otherMessage(context),
          ),
        );
      }
    }
    
    

    On line 51, the code AIResponse response = await dialogflow.detectIntent(query); gives me an error although I have already initialised dialogflow in the line above.

  • Daniele Angelini
    Daniele Angelini about 3 years
    i'm very confused i still have problem i export key service accont with admin and dialogflow integration in either case still have error Exception: NoSuchMethodError: The method '[]' was called on null for bot i create and default bot...