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