| // Copyright 2019 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/widgets.dart'; |
| import 'package:provider/provider.dart'; |
| |
| import '../service/google_authentication.dart'; |
| import '../state/build.dart'; |
| import '../state/index.dart'; |
| |
| class StateProvider extends StatelessWidget { |
| const StateProvider({ |
| Key? key, |
| this.signInService, |
| this.indexState, |
| this.buildState, |
| this.child, |
| }) : super(key: key); |
| |
| final GoogleSignInService? signInService; |
| |
| final IndexState? indexState; |
| |
| final BuildState? buildState; |
| |
| final Widget? child; |
| |
| @override |
| Widget build(BuildContext context) { |
| return MultiProvider( |
| providers: <ValueProvider<Object?>>[ |
| ValueProvider<GoogleSignInService?>(value: signInService), |
| ValueProvider<IndexState?>(value: indexState), |
| ValueProvider<BuildState?>(value: buildState), |
| ], |
| child: child, |
| ); |
| } |
| } |
| |
| /// Similar to Provider.value but doesn't complain when |
| /// the value is a Listenable. |
| class ValueProvider<T> extends InheritedProvider<T> { |
| ValueProvider({ |
| Key? key, |
| required T value, |
| UpdateShouldNotify<T>? updateShouldNotify, |
| Widget? child, |
| }) : super.value( |
| key: key, |
| value: value, |
| updateShouldNotify: updateShouldNotify, |
| child: child, |
| ); |
| } |