Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在颤振中传递静态类中的上下文或任何参数?_Flutter_Dart_Static Methods - Fatal编程技术网

Flutter 如何在颤振中传递静态类中的上下文或任何参数?

Flutter 如何在颤振中传递静态类中的上下文或任何参数?,flutter,dart,static-methods,Flutter,Dart,Static Methods,我目前正在使用包实现分页。但是要使用pagecontroller,我必须定义一个静态控制器和静态未来函数,它将使用http连接到我的api。我的问题是,在使用provider检索的API请求中,我还需要当前用户id作为参数。我还需要BuildContext来显示API请求返回对话框。是否可以像下面的示例代码那样全局保存id和上下文,或者在类外部保存?请教我如何用正确的方法做这件事 int id; BuildContext currentContext; class MyWidgetView e

我目前正在使用包实现分页。但是要使用pagecontroller,我必须定义一个静态控制器和静态未来函数,它将使用http连接到我的api。我的问题是,在使用provider检索的API请求中,我还需要当前用户id作为参数。我还需要BuildContext来显示API请求返回对话框。是否可以像下面的示例代码那样全局保存id和上下文,或者在类外部保存?请教我如何用正确的方法做这件事

int id;
BuildContext currentContext;

class MyWidgetView extends StatefulWidget {
  @override
  _MyWidgetViewState createState() => _MyWidgetViewState();
}

class _MyWidgetViewState extends State<MyWidgetView> {
  bool _empty = false;

  @override
  void initState() {
    super.initState();
    currentContext = context;
    id = Provider.of<User>(context, listen: false).id;
    this._pageLoadController.addListener(() {
      if (this._pageLoadController.noItemsFound) {
        setState(() {
          this._empty = this._pageLoadController.noItemsFound;
        });
      }
    });
  }

  final _pageLoadController = PagewiseLoadController(
      pageSize: PAGE_SIZE, pageFuture: (pageIndex) => getPage(pageIndex));
      
  static Future<List<page>> getPage(int pageIndex) async {
    final APIService _pageService = APIService();
    final pages = await _pageService.getPage(id: id);
    if (pages.error == false) {
      return pages.data;
    } else {
      dialogBox(
          title: 'Error',
          message: pages.errorMessage,
          context: currentContext,
          isModal: true,
          function: () => Navigator.pop(currentContext));
    }
  }
那个静电是一个你不应该遵循的兔子洞。首先不要让它静止

PagewiseLoadController _pageLoadController; 

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

  _pageLoadController = PagewiseLoadController(pageSize: PAGE_SIZE, pageFuture: (pageIndex) => getPage(pageIndex));

  // rest of your method here    
}
现在,您的getPage方法可以是一个普通的非静态类方法。

静态是一个不应该遵循的兔子洞。首先不要让它静止

PagewiseLoadController _pageLoadController; 

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

  _pageLoadController = PagewiseLoadController(pageSize: PAGE_SIZE, pageFuture: (pageIndex) => getPage(pageIndex));

  // rest of your method here    
}

现在,您的getPage方法可以是一个普通的非静态类方法。

我必须定义一个静态控制器和静态未来函数=>为什么?@nvoig如果未声明为静态,则无法从_pageLoadController访问未来getPage函数。下面是一个错误,只有静态成员才能在Initializers中访问,然后在构造函数中访问。或者您的initState方法。您在这里看到的解决方案是错误的。静态不是您问题的解决方案,它只是另外一个问题。@nvoigt您能给我一个如何做到这一点的例子吗?我只是在关注pagewise插件文档。他们也使用静态。错误来自final _pageLoadController=PagewiseLoadControllerI我必须定义一个静态控制器和静态未来函数=>为什么?@nvoig我无法从未声明为静态的_pageLoadController访问未来getPage函数。下面是一个错误,只有静态成员才能在Initializers中访问,然后在构造函数中访问。或者您的initState方法。您在这里看到的解决方案是错误的。静态不是您问题的解决方案,它只是另一个问题。@nvoigt您能给我一个如何做到这一点的例子吗?我只是在关注pagewise插件文档。它们也使用静态。错误来自final _pageLoadController=PagewiseLoadController