【发布时间】:2021-10-31 05:55:22
【问题描述】:
我正在尝试在以下代码中实现 GetX 导航:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
initialRoute: '/',
getPages: [
GetPage(name: '/', page: () => HomeScreen()),
GetPage(name: '/second', page: () => SecondScreen())
],
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => Get.toNamed('/second', arguments: 'A'),
child: Text('Second Screen A')),
ElevatedButton(
onPressed: () => Get.toNamed('/second', arguments: 'B'),
child: Text('Second Screen B'))
],
),
));
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
var controller =
Get.put(SecondScreenController(), tag: Get.arguments);
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(controller.text),
ElevatedButton(
onPressed: () => Get.toNamed('/second',
arguments: controller.text == 'A' ? 'B' : 'A'),
child: controller.text == 'A'
? Text('Switch to other second screen B')
: Text('Switch to other second screen A'))
],
),
));
}
}
class SecondScreenController extends GetxController {
final text = Get.arguments;
}
从HomeScreen 导航到SecondScreen 工作正常。只有当我在 SecondScreen 中时,我才能再次导航到同一个屏幕,用 不同 arguments('B' 或 'A')包含在 same 中控制器类。当放置控制器指定here时,我尝试使用tag属性,但它没有帮助。我的猜测是我的SecondScreen 根本不会重建,因为 Flutter 认为它(或附加的controller)已经存在。如何在路由方法Get.toNamed() 中指定tag 以告诉Flutter SecondScreen 需要重建?
也许我做的事情完全错误,而我想要实现的目标实际上是不同的。我很高兴得到任何建议和帮助!
【问题讨论】:
标签: flutter navigation flutter-getx