Flutter Hooks 使用 useEffect 获取数据 - setState() 或 markNeedsBuild() 在构建期间调用

标签 flutter flutter-widget flutter-hooks

目前正在探索functional_widgets 和flutter_hooks。对 reactjs 有同样的想法,我正在使用以下代码获取数据。

@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),
    ),
  );
}

我不认为这是正确的方法,因为它会引发错误。 enter image description here

最佳答案

问题在于:

  useEffect(() {
    model.fetchList();
  }, []);
fetchList在构建和修改祖先小部件内部同步调用,这是不好的。
您可以包装 fetchList调用微任务:
  useEffect(() {
    Future.microtask(() => model.fetchList());
  }, []);

关于Flutter Hooks 使用 useEffect 获取数据 - setState() 或 markNeedsBuild() 在构建期间调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62910479/

相关文章:

string - 如何正确解析包含自定义数据(语义版本控制数据)的字符串?

Flutter - 堆叠在一张条形图中的水平条形图

flutter - 如何在 flutter 应用程序中删除慢模式标签

android - 在空上调用了 '_debugTypesAreRight'方法

flutter - 如何在Flutter Hooks中从父级更新 "useState"的initialData

Flutter 搜索委托(delegate),在文本输入中设置一个值或加载上次搜索的值

flutter - 如何启用 'constructor-tearoffs' 功能?

flutter - “Could not resolved the package” 每次在我自己的包里安装新包