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.
Author by
Admin
Updated on December 17, 2022Comments
-
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 about 3 yearsi'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...