Flutter GetX 如何跨路由使用 Controller?

21 min read

要跨路由使用Controller,需要让Controller成为全局可访问的变量。可以使用GetX的依赖注入功能来实现这一点。

在main.dart中,将Controller注册为依赖项:

void main() {
  //...
  Get.put(MyController());
  //...
}

现在,在整个应用程序中,都可以通过Get.find方法来访问MyController实例。

例如,在第一个路由中,可以使用以下代码来获取MyController实例并访问其中的变量:

class FirstRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final MyController c = Get.find();
    return Scaffold(
      body: Center(
        child: Obx(() => Text("${c.myVariable}")),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => Get.to(SecondRoute()),
        child: Icon(Icons.arrow_forward),
      ),
    );
  }
}

在第二个路由中,可以使用相同的方法来获取MyController实例:

class SecondRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final MyController c = Get.find();
    return Scaffold(
      body: Center(
        child: RaisedButton(
          onPressed: () => c.increment(), // 或者使用Get.find<MyController>().increment();
          child: Text('Increment'),
        ),
      ),
    );
  }
}

通过依赖注入,MyController类成为全局可访问的变量,因此在路由之间共享状态就变得很简单,而无需手动传递数据。