【问题标题】:How to pass parameters into the future instance of Futurebuilder?如何将参数传递给 Futurebuilder 的未来实例?
【发布时间】:2021-07-14 16:51:14
【问题描述】:

我正在尝试将参数传递给未来的实例,但我在 future: _getData 遇到了 _getData 的“错误实例成员无法在初始化程序中访问”,即使我已经在 initState 中对其进行了初始化。

class _DisplayListState extends State<DisplayList> {

  late Future<QuerySnapshot> _getData;

  Future<QuerySnapshot> getData(String value)async{
    return await FirebaseFirestore.instance
        .collection('x')
        .where('a', isEqualTo: value)
        .get();
  }

  @override
  void initState(){
    super.initState();
    _getData = getData(widget.value);
  }

  Widget displayList = FutureBuilder(
    future: _getData, 
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      return Container();
    },
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: displayList,
    );
  }
}

我删除了getData 的参数,认为我应该先简化问题并尝试future: getData(),但我遇到了同样的错误。

我没有遇到错误的唯一方法是如果我这样做 - future: FirebaseFirestore.instance.collection('x').where('a', isEqualTo: 'something').get() for FutureBuilder。但这意味着我不能传递参数,我更愿意在长长的代码行中为此使用函数/变量。

future: FirebaseFirestore.instance.collection('x').where('a', isEqualTo: value).get() value=widget.value 在 initState 中被初始化会出现同样的错误。

【问题讨论】:

  • 只需在build 方法中创建FutureBuilder - 为什么需要Widget displayList = FutureBuilder( ... 呢?

标签: flutter google-cloud-firestore flutter-futurebuilder


【解决方案1】:

您可以为displayList 使用方法而不是变量。

你可以改变这个:

      Widget displayList = FutureBuilder(
        future: _getData, 
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          return Container();
        },
      );

到这里:

    Widget getDisplayList()  => FutureBuilder(
        future: _getData, 
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          return Container();
        },
    );

而在Scaffold的正文中,使用如下方法:

      body: getDisplayList()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2021-12-20
    • 2014-05-24
    • 1970-01-01
    • 2010-12-14
    • 2020-07-29
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多