Flutter Как использовать page.dart в качестве навигационной панели всего приложения?

#flutter #dart

Вопрос:

Я действительно новичок в флаттере, я не знаю, безумие это или нет, но, надеюсь, я смогу это сделать.

Я создал StatefulWidget имя LayOut , и оно устроено так:

Я расскажу обо всем этом по ссылке здесь: здесь

     @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          Container(), **//Irrelevant code**
          SafeArea(child: Container()), **//Irrelevant code**
          TweenAnimationBuilder(
              tween: Tween<double>(begin: 0, end: value),
              duration: Duration(milliseconds: 200),
              curve: Curves.easeInExpo,
              builder: (_, double val, __) {
                return (Transform(
                    alignment: Alignment.center,
                    transform: Matrix4.identity()
                      ..setEntry(3, 2, 0.001)
                      ..setEntry(0, 3, 200 * val)
                      ..rotateY((pi / 6) * val),
                    child: chilWidget));
              }),
          GestureDetector() **//Irrelevant code**
        ],
      ),
    );
  }
 

И это будет выглядеть так:

введите описание изображения здесь

И вот как я использую его для других file.dart файлов:

   @override
  Widget build(BuildContext context) {
    return LayOut( //I use here
      Scaffold(
        appBar: AppBar(
          title: Text("Favorites Page"),
          centerTitle: true,
        ),
        body: Text('Thanks you!'),
      ),
    );
  }
 

Хотя он все еще может работать нормально без какого-либо предупреждения, в настоящее время я сталкиваюсь с несколькими проблемами, когда LayOut он используется. Во-первых , когда я использую DropDownFormField , выбранное значение не может отображаться на экране, даже если оно было выбрано и добавлено в Firestore. Во-вторых, когда я выполняю поиск, значение также не может отображаться на экране.

Я попробовал сделать паузу LayOut , и все работает правильно.

Является ли это конфликтом между Scaffolds ними ? Как я могу использовать это LayOut для других страниц?

Ответ №1:

Вы можете сделать это, как показано в следующем коде. Внесите свои имена на экране в список. Этот пример-нижняя панель навигации. Но та же логика применима и к боковой навигации.

 int _page = 0;
    final screens = [
        ScreenOne(),
        ScreenTwo(),
        ScreenThree(),
        ScreenFour(),
      ];
      @override
      Widget build(BuildContext context) {
        return Scaffold(
                
                bottomNavigationBar: CurvedNavigationBar(
                  index: 0,
                  
                  items: [
                    Icon(
                      FontAwesomeIcons.home,
                      color: Colors.white,
                    ),
                    Icon(
                      FontAwesomeIcons.plus,
                      color: Colors.white,
                    ),
                    Icon(
                      FontAwesomeIcons.calendarAlt,
                      color: Colors.white,
                    ),
                    Icon(
                      FontAwesomeIcons.userAlt,
                      color: Colors.white,
                    ),
                  ],
                  onTap: (index) {
                    setState(() {
                      _page = index;
                    });
                  },
                  body: screens[_page]
                ),
    }