I'm building an application to stream anime from a popular anime site. However, I would like to run a certain Provider method at app start. Once the app is loaded, I would like to fetch some anime from an api, before a user clicks on "Search" tab.
I would like to point out that this solution didn't work for me: How to call method at App start if I am using provider?
My code:
main.dart
import 'package:anime_go/pages/home.dart';
import 'package:anime_go/providers/anime.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
EasyLocalization(
supportedLocales: [Locale('en', 'US')],
path: 'lib/assets/translations',
fallbackLocale: Locale('en', 'US'),
child: AnimeGO(),
),
);
}
class AnimeGO extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => Anime()..addAnimeList(),
child: MaterialApp(
theme: ThemeData(
primaryColor: Colors.blueGrey[800],
),
title: 'title'.tr(),
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
home: HomeScreen(),
),
);
}
}
providers/anime.dart
import 'package:anime_go/services/anime_twist.dart';
import 'package:flutter/cupertino.dart';
class Anime extends ChangeNotifier {
var allAnimeList;
final AnimeTwistApiService api = AnimeTwistApiService();
void addAnimeList() async {
allAnimeList = await api.getAllAnime();
notifyListeners();
}
}
pages/tabs/search.dart
import 'package:anime_go/providers/anime.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class SearchTab extends StatelessWidget {
@override
Widget build(BuildContext context) {
final allAnimeList = context.watch<Anime>().allAnimeList;
return Center(
child: Column(
children: <Widget>[
for (var i = 0; i < allAnimeList.length; i++)
Text(allAnimeList[i].title.toString())
],
),
);
}
}
pages/home.dart
import 'package:anime_go/pages/tabs/home.dart';
import 'package:anime_go/pages/tabs/search.dart';
import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _selectedIndex = 0;
final List<Widget> _children = <Widget>[
HomeTab(),
SearchTab(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blueGrey[700],
appBar: AppBar(
title: Text('title').tr(),
),
body: _children[_selectedIndex],
bottomNavigationBar: BottomNavigationBar(
backgroundColor: Colors.blueGrey[800],
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('home').tr(),
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
title: Text('search').tr(),
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
title: Text('settings').tr(),
)
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.white,
unselectedItemColor: Colors.grey,
onTap: _onItemTapped),
);
}
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
}