GetX Get.ToNamed не работает внутри дочернего элемента
Я хотел бы создать простое приложение, которое поддерживает константу bottomNavigationBar, изменяя его дочерний элемент.
Я полагаю, что GetX - лучший и самый простой способ реализовать это, но я столкнулся с неожиданной проблемой.
Вот фрагмент кода:
class Home extends StatelessWidget {
final NavController navController = Get.put(NavController());
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
//child: navController.bodyContent[navController.selectedIndex],
child: Obx(
// ignore: missing_return
() {
String _test =
navController.bodyContent[navController.selectedIndex];
print(_test);
return Profile(); //well, it's hardcoded but it works.
//I can realise my logic to change screens right here...
//... but I'm not sure it's good enough
//And I can see recived from controller text but cannot use it as desighned.
//return Text(_test);
//return Get.toNamed(_test); //that's what i supposed to realize but faced an error:
//The return type 'Future<dynamic>' isn't a 'Widget', as required by the closure's context.
},
//() => Text(navController.bodyContent[navController.selectedIndex])),
// navController.bodyContent[navController.selectedIndex]),
//child: Showcase(),)
),
),
bottomNavigationBar: Obx(() => BottomNavigationBar(
type: BottomNavigationBarType.fixed,
items: [], //here i specify my BottomNavigationBarItems
currentIndex: navController.selectedIndex,
onTap: (index) => navController.selectedIndex = index,
)),
);
}
}
И контроллер:
class NavController extends GetxController {
final _selectedIndex = 0.obs;
final List<String> bodyContent = [
'/showcase',
'/liked',
'/publish',
'/messages',
'/profile',
].obs;
get selectedIndex => this._selectedIndex.value;
set selectedIndex(index) => this._selectedIndex.value = index;
}
Что ж, отчасти это работает. Я могу получать маршруты bodyContent, но не могу просто использовать их. Хотите сохранить логику показа дочернего элемента на контроллере. Что я должен делать?
1 ответ
использовать
Get.reset();Get.toNamed('${Routes.ITEMS}', параметры: параметры);