소개
게시글
질문&답변
2023.02.14
의존성 주입 질문있습니다.
해결했습니다! Provider 못찾는 문제라고 말씀주셔서 Provider 생성및 선언해주는 부분을 잘 찾아서 해보니 getProviders() 함수의 리턴 해주는 배열에 각각 타입을 넣어주니 호출하는 부분에서 Provider 를 못찾는다는 에러가 해결되었습니다.타입을 안넣어주니 각 Provider 를 못찾는 것이였습니다. List getProviders() { final dio = Dio(); SongRepository repository = SongRepository(dio); UseCases useCases = UseCases( getSearchSong: GetSearchSongUseCase(repository: repository), getSearchSinger: GetSearchSingerUseCase(repository: repository), getRecentlySongsList: GetRecentlySongsListUseCase(repository: repository), ); SearchViewModel searchViewModel = SearchViewModel(useCases: useCases); HomeViewModel homeViewModel = HomeViewModel(useCases: useCases); return [ // 타입추가 ChangeNotifierProvider(create: (_) => searchViewModel), // 타입추가 ChangeNotifierProvider(create: (_) => homeViewModel), ]; }
- 0
- 3
- 1.1K
질문&답변
2023.02.14
의존성 주입 질문있습니다.
답변 주셔서 감사합니다.제가 선생님 강의를 공부 하면서 적용한 방법은provider_setup.dart 에서 의존성 선언 및 생성해주고 main.dart 에서 MultiProvider 로 Provider 여러개 주입시켜주고home_screen.dart 에서는 주입시켜준 Provider를 찾아서 상태에 접근한다. 라고 생각하며 코드를 작성했습니다!main.dart 입니다.void main() { // provider 호출 final providers = getProviders(); runApp( MultiProvider( providers: providers, child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return const MaterialApp( debugShowCheckedModeBanner: false, title: 'title', home: HomeScreen(), ); } }homeScreen 입니다.class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DefaultLayout( appBar: AppBar(), floatingActionButton: FloatingActionButton( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => const SearchScreen())); }, backgroundColor: Colors.black, child: const Icon(Icons.search_rounded), ), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: const [ _Header(), SizedBox(height: 8.0), _Body(), SizedBox(height: 8.0), ], ), ), ); } } // _Header 코드 // _Body 코드 class _Body extends StatelessWidget { const _Body({Key? key}) : super(key: key); @override Widget build(BuildContext context) { final homeViewModel = context.watch(); final state = homeViewModel.state; return ListView.builder( itemBuilder: (BuildContext context, int index) { final data = state.recentlyList[index]; return ListCard(data: data); }, ); } 검색 페이지에는 이미 Provider 를 주입해서 잘 출력하고있습니다.하지만 homeScreen 클래스에서는 Provider 를 찾지를 못하네요.. 무엇이 잘못 되었을까요?
- 0
- 3
- 1.1K