title: Failed assertion: line 3927 pos 14: '_dependents.isEmpty': is not true
body: <p>I am back again with the issue related to the question already posted by me on stack overflow <a href="https://stackoverflow.com/questions/46728408/error-elements-containselement-is-not-true/46770966#46770966">Error: &#39;_elements.contains(element)&#39;: is not true</a></p>
  
  <p>this issue has been plaguing me but i was unable to reproduce the same issue and now i have somehow tried to repro again and I have posted the code for everyone to figure out what is it that i am doing wrong that's throwing up this assertion error and crashing the app.</p>
  
  <p>I am new to programming and any help would be greatly appreciated. I have trimmed down the code and I am aware of the some of the bugs. But, the only main concern is the <code>Failed assertion: line 3927 pos 14: '_dependents.isEmpty': is not true.</code> and <code>Failed assertion: line 1766 pos 12: '_elements.contains(element)': is not true.</code></p>
  
  <p>Steps to reproduce.</p>
  
  <blockquote>
    <p>main.dart</p>
  </blockquote>
  
  <pre><code>import 'dart:async';
  import 'package:flutter/material.dart';
  import 'package:flutter/rendering.dart';
  import 'package:flutter/widgets.dart';
  import 'package:firebase_auth/firebase_auth.dart';
  import 'package:firebase_database/firebase_database.dart';
  import 'package:untitled1/addnewbranch.dart';
  
  void main() {
    runApp(
      new MaterialApp(
        home: new Branches(),
      ),
    );
  }
  
  class ProjectModel {
    BranchSetUpModelData branchesModel;
    ProjectModel(this.branchesModel);
  }
  
  class BranchSetUpModelData {
    String branchName;
    String hostelType;
    String area;
    String city;
    BranchSetUpModelData(this.branchName, this.hostelType, this.area, this.city);
  }
  
  DatabaseReference _branchesRef;
  List&lt;ProjectModel&gt; projectModel = new List();
  Map data = {};
  
  List&lt;String&gt; mapKeys = new List();
  
  DataSnapshot dataSnapshot;
  
  class Branches extends StatefulWidget {
    //const BranchView({ Key key }) : super(key: key);
    const Branches({Key key}) : super(key: key);
    @override
    _BranchesState createState() =&gt; new _BranchesState();
  }
  
  class _BranchesState extends State&lt;Branches&gt; {
    String userUid = '';
    String text;
    int noOfBranches = 0;
    int itemCount;
  
    Future&lt;Null&gt; getUserUid() async {
      try {
        //FirebaseUser user = await FirebaseAuth.instance.currentUser();
        //userUid = user.uid;
        //print(userUid);
        _branchesRef =
            FirebaseDatabase.instance.reference().child('data').child('branches');
        print('branchesref = $_branchesRef');
  
        if (_branchesRef != null) {
          try {
            _branchesRef.once().then((DataSnapshot snapShot) {
              dataSnapshot = snapShot;
              print(snapShot is Map);
  
              print(dataSnapshot.value);
              data = dataSnapshot.value;
              print(data is Map);
              print(data);
  
              data.forEach((key, value) {
                mapKeys.add(key);
              });
              print('no of branches = $noOfBranches');
              projectModel.clear();
              mapKeys.forEach((value) {
                _branchesRef.child(value).once().then((DataSnapshot b) {
                  data = b.value;
                  data.keys.forEach((k) {
                    BranchSetUpModelData x = new BranchSetUpModelData(
                      b.value['branchDetails']['branchName'],
                      b.value['branchDetails']['hostelType'],
                      b.value['branchDetails']['area'],
                      b.value['branchDetails']['city'],
                    );
                    print('details from for each loop');
                    ProjectModel projectModelData = new ProjectModel(x);
  
                    projectModel.add(projectModelData);
                  });
                  print('projectmodel length = ${projectModel.length}');
                });
              });
              setState(() {
                noOfBranches = mapKeys.length;
                itemCount = noOfBranches;
              });
              print('no of branches = $noOfBranches');
  
              data.keys.forEach((k) {
                print('inside this foreach loop');
                print(k);
              });
            });
          } catch (Exception) {
            showDialog(
                context: context,
                child: new AlertDialog(
                    content: new Text(Exception.message.toString())));
          }
        } else {
          print('user does not exist');
        }
      } catch (Exception) {
        print(Exception.toString());
        showDialog(
            context: context,
            child: new AlertDialog(
              content: new Text(Exception.toString()),
            ));
      }
    }
  
    @override
    void initState() {
      super.initState();
      mapKeys.clear();
      FirebaseDatabase.instance.setPersistenceEnabled(true);
      FirebaseDatabase.instance.setPersistenceCacheSizeBytes(10000000);
      getUserUid();
      /*setState((){
        noOfBranches = mapKeys.length;
      });*/
      print('noOfBranches in init state= $noOfBranches');
    }
  
    @override
    Widget build(BuildContext context) {
      print('noof branches inside widget build = $noOfBranches');
      //if(noOfBranches!=0) {
      return new MaterialApp(
        title: 'Branches',
        theme: new ThemeData(
          primaryColor: const Color(0xFF229E9C),
        ),
        home: new Scaffold(
          appBar: new AppBar(
            title: const Text('Branches'),
            backgroundColor: Colors.teal[300],
          ),
          floatingActionButton: new FloatingActionButton(
            heroTag: 'branchesHeroTag',
            child: new Icon(Icons.add),
            backgroundColor: Colors.teal[300],
            onPressed: (() {
              Navigator.push(
                context,
                new MaterialPageRoute(
                  builder: (_) =&gt; new AddNewBranch(),
                ),
              );
            }),
            tooltip: 'Add Branch',
          ),
          body: new Container(
            child: new ListView.builder(
              padding: const EdgeInsets.only(
                left: 4.0,
                right: 4.0,
              ),
              itemCount: itemCount,
              itemBuilder: (BuildContext context, int index) {
                if (noOfBranches != 0) {
                  // children: &lt;Widget&gt;[
  
                  return new InkWell(
                    onTap: (() {
                      /*Navigate here to a different page*/
                    }),
                    child: new Card(
                      child: new Column(
                        children: &lt;Widget&gt;[
                          new Container(
                            //margin: const EdgeInsets.only(top:16.0),
                            padding: const EdgeInsets.only(top: 16.0),
                            child: new Row(
                              children: &lt;Widget&gt;[
                                new Expanded(
                                  child: new Row(
                                    children: &lt;Widget&gt;[
                                      new Container(
                                          margin: const EdgeInsets.only(
                                              left: 16.0,
                                              right: 8.0,
                                              top: 4.0,
                                              bottom: 4.0),
                                          child: new IconButton(
                                              icon: new Icon(Icons.call),
                                              onPressed: (() {}))),
                                      new Container(
                                        child: new Text(
                                          '80/125',
                                          style: new TextStyle(
                                            fontSize: 18.0,
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                new Expanded(
                                  child: new Row(
                                    textDirection: TextDirection.rtl,
                                    children: [
                                      new Container(
                                        margin:
                                            const EdgeInsets.only(right: 16.0),
                                        child: new Text(
                                          projectModel[index]
                                              .branchesModel
                                              .hostelType,
                                          style: new TextStyle(
                                            fontSize: 18.0,
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          ),
                          new Container(
                            margin:
                                const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 4.0),
                            child: new Row(children: &lt;Widget&gt;[
                              new Text(
                                projectModel[index].branchesModel.branchName,
                                style: new TextStyle(
                                  fontSize: 24.0,
                                ),
                              ),
                            ]),
                          ),
                          new Container(
                            margin: const EdgeInsets.only(
                                left: 16.0, right: 16.0, bottom: 8.0),
                            child: new Row(
                              children: &lt;Widget&gt;[
                                new Text(projectModel[index].branchesModel.city),
                              ],
                            ),
                          ),
                        ],
                      ),
                    ),
                  ); // InkWell ends here so this has to go into ListView.builder
                } else {
                  itemCount = 1;
  
                  return new Center(
                    child: new Column(
  //            mainAxisSize: MainAxisSize.min,
                      mainAxisAlignment: MainAxisAlignment.center,
  
                      children: &lt;Widget&gt;[
                        new Text(
                          'Setup your Hostel',
                          style: new TextStyle(
                            fontSize: 24.0,
                            color: Colors.grey[400],
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                        new Text(
                          'Please click below + icon to Setup your Hostel',
                          style: new TextStyle(
                            fontSize: 16.0,
                            color: Colors.grey[400],
                          ),
                        ),
                      ],
                    ),
                  );
                }
              },
            ), // ListView.builder ends here.
          ),
        ),
      );
    }
  }
  </code></pre>
  
  <blockquote>
    <p>globals.dart</p>
  </blockquote>
  
  <pre><code>library my_app.globals;
  import 'package:firebase_auth/firebase_auth.dart';
  import 'package:firebase_database/firebase_database.dart';
  
  final FirebaseAuth auth = FirebaseAuth.instance;
  final DatabaseReference databaseReference = FirebaseDatabase.instance.reference();
  </code></pre>
  
  <blockquote>
    <p>addnewbranch.dart</p>
  </blockquote>
  
  <pre><code>import 'dart:async';
  import 'package:meta/meta.dart';
  import 'package:firebase_auth/firebase_auth.dart';
  import 'package:flutter/material.dart';
  import 'package:flutter/rendering.dart';
  import 'package:flutter/widgets.dart';
  import 'package:untitled1/main.dart';
  import './globals.dart' as gl;
  
  class BranchSetupModel {
    String branchName;
    String hostelType;
    String area;
    String city;
    BranchSetupModel(this.branchName, this.hostelType, this.area, this.city);
  }
  
  BranchSetupModel branchSetupModel =
      new BranchSetupModel('', 'Hostel Type', '', '');
  
  class AddNewBranch extends StatefulWidget {
    const AddNewBranch({Key key}) : super(key: key);
  
    @override
    State&lt;StatefulWidget&gt; createState() {
      return new _AddNewBranchState();
    }
  }
  
  class _AddNewBranchState extends State&lt;AddNewBranch&gt; {
    String actionsString = 'Next';
    String userUid;
  
    TextEditingController _branchNameController = new TextEditingController();
    TextEditingController _areaController = new TextEditingController();
    TextEditingController _cityController = new TextEditingController();
  
    final GlobalKey&lt;FormState&gt; _formKey = new GlobalKey&lt;FormState&gt;();
    final GlobalKey&lt;ScaffoldState&gt; _scaffoldKey = new GlobalKey&lt;ScaffoldState&gt;();
    bool _formWasEdited = false;
    bool _autovalidate = false;
    String dropDownvalue = 'Hostel Type';
  
    //FocusNode _branchManagerNameFocusNode = new FocusNode();
  
    String _validateName(String value) {
      _formWasEdited = true;
      if (value.isEmpty) return 'Name is required.';
      final RegExp nameExp = new RegExp(r'^[A-Za-z ]+$');
      if (!nameExp.hasMatch(value))
        return 'Please enter only alphabetical characters and spaces.';
      return null;
    }
  
    Future&lt;Null&gt; getUserUid() async {
      try {
        FirebaseUser user = await FirebaseAuth.instance.currentUser();
        userUid = user.uid;
        print(userUid);
      } catch (Exception) {
        print(Exception.toString());
      }
    }
  
    @override
    void initState() {
      super.initState();
      getUserUid();
      _branchNameController =
          new TextEditingController(text: branchSetupModel.branchName);
      _areaController = new TextEditingController(text: branchSetupModel.area);
      _cityController = new TextEditingController(text: branchSetupModel.city);
      dropDownvalue = branchSetupModel.hostelType;
      branchSetupModel = new BranchSetupModel('', 'Hostel Type', '', '');
    }
  
    @override
    Widget build(BuildContext context) {
      return new MaterialApp(
        theme: new ThemeData(
          primarySwatch: Colors.teal,
        ),
        title: 'Branch Setup',
        home: new Scaffold(
          appBar: new AppBar(
            title: const Text('Add New Branch'),
            backgroundColor: Colors.teal[300],
            leading: new IconButton(
              icon: new Icon(Icons.arrow_back),
              onPressed: (() {
                print('back button clicked');
                //to be removed and to include functionality here
                Navigator.push(
                  context,
                  new MaterialPageRoute(
                    builder: (_) =&gt; new Branches(),
                  ),
                );
              }),
            ),
            actions: &lt;Widget&gt;[
              new Center(
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  mainAxisSize: MainAxisSize.min,
                  children: &lt;Widget&gt;[
                    new FlatButton(
                      child: new Text(
                        actionsString,
                        style: new TextStyle(
                          fontSize: 20.0,
                          fontWeight: FontWeight.w500,
                          color: Colors.white,
                        ),
                      ),
                      onPressed: () {
                        print('Save button clicked');
  
                        String pushKey = gl.databaseReference
                            .child('data')
                            .child('branches')
                            .push()
                            .key;
                        gl.databaseReference
                            .child('data')
                            .child('branches')
                            .child(pushKey)
                            .child('branchDetails')
                            .set({
                          "branchName": branchSetupModel.branchName,
                          "hostelType": branchSetupModel.hostelType,
                          "area": branchSetupModel.area,
                          "city": branchSetupModel.city,
                          "pushKey": pushKey
                        });
                        Navigator.push(
                          context,
                          new MaterialPageRoute(
                            builder: (_) =&gt; new Branches(),
                          ),
                        );
                      },
                      splashColor: const Color(0xFF229E9C),
                    ),
                  ],
                ),
              ),
            ],
          ),
          body: new Form(
            key: _formKey,
            child: new ListView(
              children: &lt;Widget&gt;[
                new Container(
                  margin: const EdgeInsets.only(left: 16.0, right: 16.0),
                  child: new Row(
                    children: &lt;Widget&gt;[
                      new Text('Hostel Type'),
                    ],
                  ),
                ),
                new Container(
                  //height: 56.0,
                  margin: const EdgeInsets.only(left: 16.0, right: 16.0),
                  child: new Column(
                    children: &lt;Widget&gt;[
                      new DropdownButton&lt;String&gt;(
                        //key: _dropDownKey,
                        hint: new Text(dropDownvalue),
  
                        items: &lt;String&gt;[
                          'Mens',
                          'Womens',
                        ].map(
                          (String value) {
                            return new DropdownMenuItem&lt;String&gt;(
                              value: value,
                              child: new Text(value),
                            );
                          },
                        ).toList(),
                        onChanged: (String value) {
                          setState(() {
                            dropDownvalue = value;
                            branchSetupModel.hostelType = value;
                            print(branchSetupModel.hostelType);
                          });
                        },
                      ),
                    ],
                  ),
                ),
                new Container(
                  margin: const EdgeInsets.only(left: 16.0, right: 16.0),
                  child: new Row(
                    children: &lt;Widget&gt;[
                      new Expanded(
                        child: new TextField(
                          autocorrect: false,
                          decoration: new InputDecoration(
                            labelText: 'Branch Name',
                          ),
                          controller: _branchNameController,
                          onChanged: (String value) {
                            branchSetupModel.branchName =
                                _branchNameController.text;
                            print(branchSetupModel.branchName);
                          },
                          //validator: _validateName,
                        ),
                      ),
                    ],
                  ),
                ),
                new Container(
                  margin: const EdgeInsets.only(left: 16.0, right: 16.0),
                  child: new Row(
                    children: &lt;Widget&gt;[
                      new Expanded(
                        child: new TextField(
                          decoration: new InputDecoration(
                            labelText: 'Area/Location',
                          ),
                          controller: _areaController,
                          onChanged: (String value) {
                            branchSetupModel.area = value;
                            print(branchSetupModel.area);
                          },
                          //validator: _validateName,
                        ),
                      ),
                    ],
                  ),
                ),
                new Container(
                  margin: const EdgeInsets.only(
                    left: 16.0,
                    right: 16.0,
                  ),
                  child: new Row(
                    children: &lt;Widget&gt;[
                      new Expanded(
                        child: new TextField(
                          decoration: new InputDecoration(
                            labelText: 'City',
                          ),
                          controller: _cityController,
                          onChanged: (String value) {
                            branchSetupModel.city = value;
                          },
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      );
    }
  }
  </code></pre>
  
  <blockquote>
    <p>pubspec.yaml</p>
  </blockquote>
  
  <pre><code>name: untitled1
  description: A new Flutter project.
  
  dependencies:
    flutter:
      sdk: flutter
    google_sign_in: ^1.0.1
    firebase_analytics: ^0.1.1
    firebase_auth: ^0.3.1
    firebase_database: ^0.1.2
    firebase_storage: ^0.0.7
  
  
  dev_dependencies:
    flutter_test:
      sdk: flutter
  
  
  # For information on the generic Dart part of this file, see the
  # following page: https://www.dartlang.org/tools/pub/pubspec
  
  # The following section is specific to Flutter.
  flutter:
  
    # The following line ensures that the Material Icons font is
    # included with your application, so that you can use the icons in
    # the material Icons class.
    uses-material-design: true
  </code></pre>
  
  <p>Please integrate the firebase app to run the code before trying to reproduce the error and make sure the read and write access set to 'true' as I have not added any authentication.</p>
  
  <p>As far as I know the error only occurs in the main.dart file.It works fine for a few times and then the errors start coming in. First, it throws up the error <code>RangeError (index): Invalid value: Valid value range is empty: 0</code> this error is for the <code>ListView.builder()</code> and then the other two assertion errors come up.</p>
  
  <p>Please can someone tell me what I am doing wrong or is there a different way to achieve the same goal without these errors.</p>
  
  <blockquote>
    <p>output from flutter doctor command.</p>
  </blockquote>
  
  <pre><code>    [√] Flutter (on Microsoft Windows [Version 10.0.15063], locale en-GB, channel alpha)
      • Flutter at C:\Users\Prayuta\flutter
      • Framework revision e8aa40eddd (3 weeks ago), 2017-10-17 15:42:40 -0700
      • Engine revision 7c4142808c
      • Tools Dart version 1.25.0-dev.11.0
  
  [√] Android toolchain - develop for Android devices (Android SDK 27.0.0)
      • Android SDK at C:\Users\Prayuta\AppData\Local\Android\sdk
      • Platform android-27, build-tools 27.0.0
      • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
      • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
  
  [√] Android Studio (version 3.0)
      • Android Studio at C:\Program Files\Android\Android Studio
      • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
  
  [√] IntelliJ IDEA Community Edition (version 2017.2)
      • Flutter plugin version 18.4
      • Dart plugin version 172.4343.25
  
  [√] Connected devices
      • Android SDK built for x86 • emulator-5554 • android-x86 • Android 7.1.1 (API 25) (emulator)
  
  Process finished with exit code 0.
  </code></pre>