Список строки в список StatefulWidget Flutter

Я хочу преобразовать эту строку списка в виджет с отслеживанием состояния

List<String> listString = [
"HomePage()",
"ProfilePage()"
]

to

List<StatefulWidget> listStatefulWidget = [];

ожидаемый результат :

List<StatefulWidget> listStatefulWidget = [
HomePage(),
ProfilePage()
];

обновление: мне это нужно для моей навигационной панели, для которой требуется список StatefulWidget. tabs - это список StatefulWidget, значение которого должно быть получено из API. мой API возвращает listString, поэтому мне нужно преобразовать его в statefulWidget.

вот мой код:

var tabs<StatefulWidget> = [
    HomePageView() 
    AccountView(),
  ];

return Scaffold(
    key: scaffoldKey,
    backgroundColor: Theme.of(context).scaffoldBackgroundColor,
    bottomNavigationBar: CurvedNavigationBar(
      key: _bottomNavigationKey,
      index: 0,
      height: 65.0,
      items: [
       //navbar 
      ],
      color: Colors.white,
      buttonBackgroundColor: kSecondaryColor,
      backgroundColor: Colors.transparent,
      animationCurve: Curves.easeInOutQuint,
      animationDuration: Duration(milliseconds: 300),
      onTap: (index) {
        setState(() {
          _page = index;
        });
      },
      letIndexChange: (index) => true,
    ),
    body: tabs[_page]);

}


person Soveyyy    schedule 28.06.2021    source источник
comment
чего ты пытаешься достичь?   -  person Nishuthan S    schedule 28.06.2021
comment
@NishuthanS вскоре я получил список строк из API (например: HomePage ()). затем я хочу преобразовать его в StatefulWidget, который используется для перехода к каждому классу на нижней панели навигации   -  person Soveyyy    schedule 28.06.2021


Ответы (1)


Вы не можете преобразовать String в StatefulWidget.

Что вы можете сделать, так это использовать строку с NavigatorState для перехода к частям приложения.

Глобальный ключ для NavigatorState

final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();

main.dart

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      navigatorKey: navigatorKey,
      onGenerateRoute: (routeSettings) {
      switch (routeSettings.name) { //add more routes as needed
        case 'Home':
          return MaterialPageRoute(builder: (context) => Home());
        default:
          return MaterialPageRoute(builder: (context) => Profile());
      }
    },
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

Переход на страницу

Вы можете использовать это navigatorKey.currentState!.pushNamed(<Route Name>) для перехода на страницу.

Пример: navigatorKey.currentState!.pushNamed('Home') Это переведет вас на Home страницу.

В вашем случае вы можете получить маршруты из API и создать нижнюю панель навигации и использовать строку для перехода к страницам.

Пример:

navigatorKey.currentState!.pushNamed(listStatefulWidget [index]);

Обратитесь:

https://stackoverflow.com/a/53397266/9074190

https://www.filledstacks.com/post/navigate-without-build-context-in-flutter-using-a-navigation-service/

person Nishuthan S    schedule 28.06.2021
comment
Спасибо за ответ, мистер @Nisuthan S, ценю это. Я хотел listofStatelesWidget из String coz navigation bar, необходимый список statefulwidget. Я обновил свой вопрос. Если не возражаете, можете проверить? Спасибо. - person Soveyyy; 30.06.2021