如何修复 FutureBuilder 打开多次错误?

3 dart flutter flutter-layout

这是我的两节课(两页)。这两个班级多次开放。我将调试点放在 futurebuilder 中的两个类中。调试点运行,

  1. MainCategory 页面并进入下一页
  2. SubCategory 页面并再次运行 MainCategory 页面(上一页)futurebuilder 并再次运行 MainCategory 页面 futurebuilder
  3. 将子类别页面导航到运行子类别页面和主类别页面的第三页

我将我的两个类上传到 GitHub,请告诉我问题是什么。

MainCategory 代码:https : //github.com/bhanuka96/ios_login/blob/master/MainCategory.dart 子Category 代码:https : //github.com/bhanuka96/ios_login/blob/master/subCategory.dart

pso*_*pso 15

如文档中所述,您不应在小部件的构建事件期间为 Futurebuilder 获取 Future。

https://docs.flutter.io/flutter/widgets/FutureBuilder-class.html

未来必须更早获得,例如在 State.initState、State.didUpdateConfig 或 State.didChangeDependencies 期间。在构造 FutureBuilder 时,它不能在 State.build 或 StatelessWidget.build 方法调用期间创建。如果future和FutureBuilder同时创建,那么每次重建FutureBuilder的parent时,异步任务都会重新启动。

因此,尝试将您对getRegister方法的调用移到build 方法之外,并将其替换为返回的 Future 值。

例如,下面我有一个返回 Future 值的类,它将在 FutureBuilder 的帮助下使用。

class MyApiHelper{

  static Future<List<String>> getMyList() async {
    // your implementation to make server calls
    return List<String>();
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,在您的小部件中,您将拥有如下内容:

class _MyHomePageState extends State<MyHomePage> {

  Future<List<String>> _myList;

  @override
  void initState() {
    super.initState();

    _myList = MyApiHelper.getMyList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: FutureBuilder(
      future: _myList,
      builder: (_, AsyncSnapshot<List<String>> snapLs) {
        if(!snapLs.hasData) return CircularProgressIndicator();

        return ListView.builder(
          itemCount: snapLs.data.length,
          itemBuilder: (_, index) {
            //show your list item row here...
          },
        );
      },
    ));
  }
}
Run Code Online (Sandbox Code Playgroud)

如上所示,Future 在initState函数中获取并在build方法内部使用,并由FutureBuilder.

我希望这可以帮到你。谢谢。