Hw для замены одного конкретного виджета другим после выполнения onPressed

#flutter

#flutter

Вопрос:

У меня есть 2 конкретных виджета, первый из которых имеет RaisedButton, который следует щелкнуть, и виджет с RaisedButton будет заменен другим. это мой код:

 Widget FundsWidget() {
    return Container(
      height: 200,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            'Devi acquistare dei crediti per poter vedere i Post di ${widget.user.name}',
            style: TextStyle(fontSize: 12),
          ),
          RaisedButton(
            elevation: 10,
            color: Colors.blue,
            child: Text('Acquista Crediti'),
            onPressed: () => Navigator.push(
              context,
              MaterialPageRoute(
                builder: (_) => PostGrid(),
              ),
            ),
          ),
        ],
      ),
    );
  }
  

и это вызывается в основном методе сборки, после нажатия кнопки RaisedButton должен быть заменен другим

 Widget PostGrid() {
    return Container(
      height: 291,
      child: GridView.builder(
        controller: controller,
        itemCount: widget.user.imageUrl.length   1,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
        ),
        itemBuilder: (BuildContext context, int index) {
          if (index == widget.user.imageUrl.length) {}
          return GestureDetector(
            onTap: () => showDialog(
              context: context,
              builder: (context) => AlertDialog(
                actions: [
                  Image.asset(widget.user.imageUrl),
                  Text(widget.user.name),
                ],
              ),
            ),
            child: Card(
              elevation: 5,
              child: Image.asset(widget.user.imageUrl),
            ),
          );
        },
      ),
    );
  }
  

на данный момент это не входит в метод сборки.
как я могу это выполнить?

Ответ №1:

Я думаю, вы можете использовать метод setState внутри вашего onPresesd и изменить в нем bool. и проверьте, что bool устанавливает подходящий виджет, как показано ниже. шаблон:

 class Test2 extends StatefulWidget {
  @override
  _Test2State createState() => _Test2State();
}

class _Test2State extends State<Test2> {
  bool boolName = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
            child:boolName ?FontWeight:PostGrid ));
  }

  Widget FundsWidget() {
    return Container(
      height: 200,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            'Devi acquistare dei crediti per poter vedere i Post di ${widget.user.name}',
            style: TextStyle(fontSize: 12),
          ),
          RaisedButton(
            elevation: 10,
            color: Colors.blue,
            child: Text('Acquista Crediti'),
            onPressed: () {
              setState(() {
                boolName = false;
              });
            }
            ),
          ),
        ],
      ),
    );
  }

  Widget PostGrid() {
    return Container(
      height: 291,
      child: GridView.builder(
        controller: controller,
        itemCount: widget.user.imageUrl.length   1,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
        ),
        itemBuilder: (BuildContext context, int index) {
          if (index == widget.user.imageUrl.length) {}
          return GestureDetector(
            onTap: () => showDialog(
              context: context,
              builder: (context) => AlertDialog(
                actions: [
                  Image.asset(widget.user.imageUrl),
                  Text(widget.user.name),
                ],
              ),
            ),
            child: Card(
              elevation: 5,
              child: Image.asset(widget.user.imageUrl),
            ),
          );
        },
      ),
    );
  }
}