要跨路由使用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类成为全局可访问的变量,因此在路由之间共享状态就变得很简单,而无需手动传递数据。