anchor.diff:      with ChangeNotifier, PopNavigatorRouterDelegateMixin<AppRoutePath> {
     @override
     final GlobalKey<NavigatorState> navigatorKey;
  -  final AppState _appState = AppState();
  +  final AppState _appState = AppState(MockAuthentication());
   
     BookRouterDelegate() : navigatorKey = GlobalKey<NavigatorState>() {
       _appState.addListener(() => notifyListeners());
  
positive.code: 
    @override
    Widget build(BuildContext context) {
      final isLoggedIn = _appState.isLoggedIn;
      final viewingBooksScreen = _appState.viewingBooks;
      return Navigator(
        key: navigatorKey,
  
negative.code:   runApp(BooksApp());
  }
  
  class Credentials {
    final String username;
    final String password;
  
    Credentials(this.username, this.password);
  }
  
  abstract class Authentication {
    bool isSignedIn();
  
    void signOut();
  
    Future<bool> signIn(String username, String password);
  }
  
  class MockAuthentication implements Authentication {
    bool _signedIn = false;
  
    @override
    bool isSignedIn() {
      return _signedIn;
    }
  
    @override
    void signOut() {
      _signedIn = false;
    }
  
    @override
    Future<bool> signIn(String username, String password) async {
      return _signedIn = true;
    }
  }
  
  class BooksApp extends StatefulWidget {
    @override
    State<StatefulWidget> createState() => _BooksAppState();
  }
  
  class AppState extends ChangeNotifier {
    final Authentication auth;
  
    AppState(this.auth);
  
    Future<bool> signIn(String username, String password) async {
      var success = await auth.signIn(username, password);
      notifyListeners();
      return success;
    }
  
    bool _viewingBooks = false;
  