我有一个主页,一个有状态的小部件和一个modalBottomSheet。 当我按下modalBottomSheet中的按钮时,我想在有状态小部件中更改一个变量。
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String variable;
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
child: Text('Show Modal Bottom Sheet'),
onPressed: (){
showModalBottomSheet(
context: context,
builder: (context){
return Container(
child: RaisedButton(
child: Text('Change Variable in ListWidget'),
onPressed: (){
/// ??
},
),
);
}
);
},
),
body: Center(
child: ListView.builder(
itemCount: 5,
itemBuilder: (context, index){
return ListWidget();
},
)
),
);
}
}
当在modalBottomSheet中按下按钮时,我想在此ListWidget中将此变量分配新值。
class ListWidget extends StatefulWidget {
@override
_ListWidgetState createState() => _ListWidgetState();
}
class _ListWidgetState extends State<ListWidget> {
String variable = 'Old Value';
@override
Widget build(BuildContext context) {
return Container(
child: Text(variable),
);
}
}
答案 0 :(得分:0)
使用变量将值传递到第二类文件,然后在主类中更改该变量的值
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String variable;
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
child: Text('Show Modal Bottom Sheet'),
onPressed: (){
showModalBottomSheet(
context: context,
builder: (context){
return Container(
child: RaisedButton(
child: Text('Change Variable in ListWidget'),
onPressed: (){
variable = "new Value";
},
),
);
}
);
},
),
body: Center(
child: ListView.builder(
itemCount: 5,
itemBuilder: (context, index){
return ListWidget(variable : variable);
},
)
),
);
}
}
类文件2的代码
class ListWidget extends StatefulWidget {
String variable;
ListWidget({this.variable='Old Value'});
@override
_ListWidgetState createState() => _ListWidgetState(variable:this.variable);
}
class _ListWidgetState extends State<ListWidget> {
String variable = 'Old Value';
_ListWidgetState({this.variable});
@override
Widget build(BuildContext context) {
return Container(
child: Text(variable),
);
}
}