title: notifyListeners() of nested Provider is not updating the UI
body: <p>I'm using <a href="https://pub.dev/packages/provider" rel="noreferrer">provider</a> Flutter package.</p>
  
  <p>I have a main list and each item of the main list has a sublist. I can add items to the main list and it's working but every time I add something to the sublist the UI is not getting updated. Run the code and add some items and open them then add some items there (this is the sublist) and you will see you won't see any update but if you minimize the keyboard the UI will get updated. Maybe because I am using <code>Provider.of&lt;Collection&gt;(context)</code>to access the object of the sublist and <code>notifyListeners()</code> of the <code>CityName</code> class can't run the <code>findById(id)</code> this is what I can think of.</p>
  
  <pre class="lang-dart prettyprint-override"><code>import 'package:flutter/material.dart';
  import 'package:provider/provider.dart';
  
  void main() =&gt; runApp(MyApp());
  
  class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return MultiProvider(
        providers: [
          ChangeNotifierProvider.value(
            value: Collection(),
          ),
          ChangeNotifierProvider.value(
            value: CityName(),
          )
        ],
        child: MaterialApp(
          home: MyHomePage(),
        ),
      );
    }
  }
  
  class MyHomePage extends StatefulWidget {
    @override
    _MyHomePageState createState() =&gt; _MyHomePageState();
  }
  
  class _MyHomePageState extends State&lt;MyHomePage&gt; {
    final _textEditingController = TextEditingController();
  
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Expanded(
                child: ListView(
                    children: Provider.of&lt;Collection&gt;(context)
                        .cityNameCollection
                        .map((collection) {
                  return CollectionCard(collection.title, collection.id);
                }).toList()),
              ),
              Container(
                child: Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: &lt;Widget&gt;[
                    Expanded(
                      child: TextField(
                        controller: _textEditingController,
                        autofocus: true,
                      ),
                    ),
                    FlatButton(
                      onPressed: () {
                        Provider.of&lt;Collection&gt;(context)
                            .addCollection(_textEditingController.text);
                        _textEditingController.clear();
                      },
                      child: Text(
                        'ADD',
                      ),
                    ),
                  ],
                ),
              ),
            ]),
      );
    }
  }
  
  class CollectionCard extends StatelessWidget {
    final String title;
    final String id;
  
    CollectionCard(this.title, this.id);
    @override
    Widget build(BuildContext context) {
      return GestureDetector(
        child: Card(
          child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 10.0, vertical: 20),
            child: Text(title),
          ),
        ),
        onTap: () {
          Navigator.of(context).push(
            MaterialPageRoute(
              builder: (context) =&gt; CityNamesList(id),
            ),
          );
        },
      );
    }
  }
  
  class CityNamesList extends StatelessWidget {
    final String id;
    CityNamesList(this.id);
    final _textEditingController = TextEditingController();
  
    @override
    Widget build(BuildContext context) {
      final item = Provider.of&lt;Collection&gt;(context).findById(id);
  
      return Scaffold(
        appBar: AppBar(
          title: Text(item.title),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Expanded(
              child: ListView(
                  children: item.names.map((name) {
                return ListTile(
                  title: Text(name),
                  trailing: IconButton(
                    icon: Icon(Icons.delete),
                    onPressed: () {
                      item.removeName(name);
                    },
                  ),
                );
              }).toList()),
            ),
            Container(
              child: Row(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: &lt;Widget&gt;[
                  Expanded(
                    child: TextField(
                      controller: _textEditingController,
                      autofocus: true,
                    ),
                  ),
                  FlatButton(
                    onPressed: () {
                      item.addName(_textEditingController.text);
                      _textEditingController.clear();
                    },
                    child: Text(
                      'ADD',
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      );
    }
  }
  
  class Collection with ChangeNotifier {
    List&lt;CityName&gt; cityNameCollection = [];
  
    void addCollection(value) {
      cityNameCollection
          .add(CityName(title: value, id: DateTime.now().toString()));
      notifyListeners();
    }
  
    CityName findById(id) {
      return cityNameCollection.firstWhere((a) =&gt; a.id == id);
    }
  }
  
  class CityName with ChangeNotifier {
    String title;
    String id;
    List&lt;String&gt; names = [];
  
    CityName({this.title, this.id});
  
    void addName(value) {
      names.add(value);
      notifyListeners();
    }
  
    void removeName(value) {
      names.remove(value);
      notifyListeners();
    }
  }
  
  </code></pre>