Flutter Hw在执行OnPressed后用另一个特定小部件替换一个特定小部件

Flutter Hw在执行OnPressed后用另一个特定小部件替换一个特定小部件,flutter,Flutter,我有两个特定的小部件,第一个有一个RaisedButton,应该单击它,带有RaisedButton的小部件将被另一个替代。 这是我的代码: Widget FundsWidget() { return Container( height: 200, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text(

我有两个特定的小部件,第一个有一个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),
            ),
          );
        },
      ),
    );
  }
目前还没有进入构建方法。
如何执行该操作?

我认为您可以在OnPresseSD中使用setState方法并更改其中的布尔值。 并检查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),
            ),
          );
        },
      ),
    );
  }
}
类Test2扩展了StatefulWidget{ @凌驾 _Test2State createState()=>Test2State(); } 类_Test2State扩展状态{ bool boolName=true; @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文:安全区( child:boolName?fontwweight:PostGrid); } Widget FundsWidget(){ 返回容器( 身高:200, 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 正文( 'Devi acquistare dei crediti per poter vedere i Post di${widget.user.name}', 样式:TextStyle(字体大小:12), ), 升起的按钮( 标高:10, 颜色:颜色,蓝色, 子项:文本('Acquista Crediti'), 已按下:(){ 设置状态(){ boolName=false; }); } ), ), ], ), ); } 控件PostGrid(){ 返回容器( 身高:291, 子项:GridView.builder( 控制器:控制器, itemCount:widget.user.imageUrl.length+1, gridDelegate:SliverGridDelegateWithFixedCrossAxisCount( 交叉轴计数:3, ), itemBuilder:(构建上下文,int索引){ if(index==widget.user.imageUrl.length){} 返回手势检测器( onTap:()=>showDialog( 上下文:上下文, 生成器:(上下文)=>AlertDialog( 行动:[ Image.asset(widget.user.imageUrl), 文本(widget.user.name), ], ), ), 孩子:卡片( 标高:5, 子项:Image.asset(widget.user.imageUrl), ), ); }, ), ); } }