Currently exploring functional_widgets and flutter_hooks. Having same idea with reactjs I'm fetching data with the following code.
@hwidget
Widget homeScreen(BuildContext context) {
TodoListProvider model = Provider.of<TodoListProvider>(context);
useEffect(() {
print('effect');
model.fetchList();
return () => {};
}, []);
return Scaffold(
appBar: _buildAppbar(context, model),
bottomNavigationBar: _buildBottomNav(context, model),
floatingActionButton: _buildFloatingAction(context),
body: PageTransitionSwitcher(
duration: const Duration(milliseconds: 300),
reverse: model.reverse,
transitionBuilder: (
Widget child,
Animation<double> animation,
Animation<double> secondaryAnimation,
) {
return SharedAxisTransition(
child: child,
animation: animation,
secondaryAnimation: secondaryAnimation,
transitionType: SharedAxisTransitionType.horizontal,
);
},
child: _getCurrentTab(model.currentIndex),
),
);
}
I don't think this is the right way since it's throwing an error.
The issue with:
useEffect(() {
model.fetchList();
}, []);
is that fetchList
is called synchronously inside build and modify an ancestor widget, which is not good.
You can wrap the fetchList
call in a microtask:
useEffect(() {
Future.microtask(() => model.fetchList());
}, []);