Line data Source code
1 : import 'package:flutter/widgets.dart'; 2 : import 'package:flutter_bloc/src/repository_provider.dart'; 3 : import 'package:provider/provider.dart'; 4 : 5 : /// {@template multi_repository_provider} 6 : /// Merges multiple [RepositoryProvider] widgets into one widget tree. 7 : /// 8 : /// [MultiRepositoryProvider] improves the readability and eliminates the need 9 : /// to nest multiple [RepositoryProvider]s. 10 : /// 11 : /// By using [MultiRepositoryProvider] we can go from: 12 : /// 13 : /// ```dart 14 : /// RepositoryProvider<RepositoryA>( 15 : /// create: (context) => RepositoryA(), 16 : /// child: RepositoryProvider<RepositoryB>( 17 : /// create: (context) => RepositoryB(), 18 : /// child: RepositoryProvider<RepositoryC>( 19 : /// create: (context) => RepositoryC(), 20 : /// child: ChildA(), 21 : /// ) 22 : /// ) 23 : /// ) 24 : /// ``` 25 : /// 26 : /// to: 27 : /// 28 : /// ```dart 29 : /// MultiRepositoryProvider( 30 : /// providers: [ 31 : /// RepositoryProvider<RepositoryA>(create: (context) => RepositoryA()), 32 : /// RepositoryProvider<RepositoryB>(create: (context) => RepositoryB()), 33 : /// RepositoryProvider<RepositoryC>(create: (context) => RepositoryC()), 34 : /// ], 35 : /// child: ChildA(), 36 : /// ) 37 : /// ``` 38 : /// 39 : /// [MultiRepositoryProvider] converts the [RepositoryProvider] list into a tree 40 : /// of nested [RepositoryProvider] widgets. 41 : /// As a result, the only advantage of using [MultiRepositoryProvider] is 42 : /// improved readability due to the reduction in nesting and boilerplate. 43 : /// {@endtemplate} 44 : class MultiRepositoryProvider extends MultiProvider { 45 : /// {@macro multi_repository_provider} 46 1 : MultiRepositoryProvider({ 47 : Key? key, 48 : required List<RepositoryProviderSingleChildWidget> providers, 49 : required Widget child, 50 1 : }) : super(key: key, providers: providers, child: child); 51 : }