Я разрабатываю приложение для котировок как новичок в flutter. Я использовал виджет стека, чтобы использовать как изображение, так и текст в центре моего экрана. И добавил «виджет просмотра страницы», чтобы иметь несколько страниц в моем приложении. Но проблема, с которой я столкнулся, заключается в , всякий раз, когда я пытаюсь пролистать страницу, изображение удаляется, но текст остается прежним. Я имею в виду первую страницу «Текст», которая все еще отображается в середине 2-й страницы. Более того, я не могу перетащить на следующую страницу, касаясь буквы, это делается только касанием над или под буквой. Я просто хочу иметь простое многостраничное приложение с текстом и изображением. Как я могу решить эту проблему?

class OverviewScreen extends StatefulWidget {
const OverviewScreen({key, Key,}) : super(key: key);
@override
_OverviewScreenState createState() => _OverviewScreenState();
}

class _OverviewScreenState extends State<OverviewScreen> {
PageController pageController =PageController(initialPage: 0);

@override
Widget build(BuildContext context) {
return MaterialApp(
  home:Scaffold(
    extendBodyBehindAppBar: true,
    appBar: AppBar(
        title: Text("Hu   R   Rehman",
        style: TextStyle(fontFamily: "MonteCarlo"),),
        centerTitle: true,
      leading: Icon(Icons.menu),

      shape:RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(bottom: Radius.circular(16))
      ),
    backgroundColor: Colors.transparent,
      elevation: 0,

    ),
    body:Center(
      child: Stack(
        alignment: Alignment.center,
        children: [
          PageView(
            controller: pageController,
            children: [
              Image(
                image:AssetImage('Image/soc1.jpg'),
                fit:BoxFit.cover,
                width: double.infinity,
                height: double.infinity,
              ),
          
             p1()
            ],

          ),
          const Text('Text'
            ,style: TextStyle(fontSize: 31.0,
                fontFamily:"MonteCarlo",
                  color: Colors.white,
                fontWeight: FontWeight.w700 )
            ),
           ],

          ),
         )


           ),
         );
        }
      }

Здесь p1 () - вторая страница

 class p1 extends StatefulWidget {
 @override
 _p1State createState() => _p1State();
  }

 class _p1State extends State<p1> {
 @override
 Widget build(BuildContext context) {
 return MaterialApp(
  home: Scaffold(
    backgroundColor: Colors.blueGrey,

  ),
  );
  }
  }
0
Sultan ul Arefin 17 Сен 2021 в 15:45

2 ответа

Лучший ответ

Если вы посмотрите на дерево виджетов, там два виджета PageView и Text размещены как дочерние Stack, и в соответствии с приоритетом рендеринга виджета Text виджет будет наверху . Кроме того, он не зависит от PageView, и изменение Pageview не повлияет на этот текстовый виджет.

enter image description here

Скажем, вы хотите разделить его на 1-го потомка PageView, вы можете переместить его туда, обернув стеком, как это

  body: Center(
            child: Stack(
              alignment: Alignment.center,
              children: [
                PageView(
                  controller: pageController,
                  children: [
                    Stack(
                      alignment: Alignment.center,
                      children: [
                        Image(
                          image: AssetImage('Image/soc1.jpg'),
                          fit: BoxFit.cover,
                          width: double.infinity,
                          height: double.infinity,
                        ),
                        const Text(
                          'Text',
                          style: TextStyle(
                            fontSize: 31.0,
                            fontFamily: "MonteCarlo",
                            color: Colors.white,
                            fontWeight: FontWeight.w700,
                          ),
                        ),
                      ],
                    ),
                    p1()
                  ],
                ),
              ],
            ),
          )

Решает ли это вашу проблему?

2
Yeasin Sheikh 17 Сен 2021 в 13:02

Попробуйте поместить Stack в дочерние элементы PageView.

PageView(controller: pageController, children: [
      Stack(
        alignment: Alignment.center,
        children: [
          Image(
            image: AssetImage('Image/soc1.jpg'),
            fit: BoxFit.cover,
            width: double.infinity,
            height: double.infinity,
          ),
          const Text('Text',
              style: TextStyle(
                  fontSize: 31.0,
                  fontFamily: "MonteCarlo",
                  color: Colors.white,
                  fontWeight: FontWeight.w700)),
        ],   
      ),     
      p1(),
    ],
    );
2
speeder 17 Сен 2021 в 13:02