如何解决Flutter 如何跨类获取提供者的上下文
编辑:我智障,我想通了
-
使用了小部件。访问类变量
-
为我的列表变量换出 Text("fsfd); 导致
child: Consumer<WidgetDataNotify>( builder: (context,datatonotify,child){ print("value == ${datatonotify.value}"); return FuctionListSet[datatonotify.value]; },child: Text("${provtest.value}"),
我一直在关注 Flutter provider state not updating in consumer widget 尝试并了解该过程以及文档和视频等。 我无法弄清楚如何确保我跨类(dart 文件)使用相同的提供程序实例
我的程序由小部件和一个radiolist组成,当它被点击时,它会将提供者更新为它的索引值,然后从我的主要列表中的列表(包装好的)在消费者中将根据影响列表的整数进行更新>
提供者文件:
class WidgetDataNotify extends ChangeNotifier {
int value=0;
//int get grabvalue => value;
// Widget SelectedWidget=SingleButtonMovementFunction();
// Widget get pickedWidget =>SelectedWidget=FuctionListSet[value];
void UpdateWidgetList(int picker){
value = picker;
print("updated value to $value");
notifyListeners();
}
}
RadioList 代码:这里的问题是我不知道如何传达我传入的提供者值
class RadioListBuilder extends StatefulWidget {
final int num;
static int value=0;
final WidgetDataNotify provider;
const RadioListBuilder({Key key,this.num,this.provider}) : super(key: key);
@override
RadioListBuilderState createState() {
return RadioListBuilderState();
}
}
class RadioListBuilderState extends State<RadioListBuilder> {
static int test;
int _value;
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context,index) {
return Column(
children: [
Container(
height: 60,width: MediaQuery.of(context).size.width,color: Colors.brown[800],child: RadioListTile(
selectedTileColor: Colors.amber,activeColor: Colors.amber,tileColor: Colors.black54,value: index,groupValue: _value,onChanged: (x) => setState((){
_value = x;
///provider.UpdateWidgetList(x); /// providing the value to the provider
///ideally would call the function
Activated_Function_Selected=index;
print("Activated fuction is indexed at $Activated_Function_Selected and it's name is == ${FunctionList[index].characters}");
}),title: Text("${FunctionList[index]}",style: TextStyle(color: Colors.white,fontSize: 18,),softWrap: true,maxLines: 2,Divider(color: Colors.black,height: 10,thickness: 10,],);
},itemCount: widget.num,);
}
}
我的主要功能的开始有这个以确保上下文是相同的
@override
Widget build(BuildContext context) {
WidgetDataNotify provtest = Provider.of<WidgetDataNotify>(context,listen: true);
return Scaffold(
appBar: AppBar(
我将其传递到我的广播列表中
Expanded(
flex:2,child: Container(
color: Colors.deepPurple,child: RadioListBuilder(num: FunctionList.length,provider: provtest,
然后我让我的消费者倾听它
Expanded(
flex: 3,child: Container(
color: Colors.orangeAccent,//
// child: Selector<WidgetDataNotify,int>(
// selector: (context,model) => model.value,// builder: (context,value,child){
// print("accesed value==$value");
// return Center(
// child: FuctionListSet[value],// );
// },// child: Text("AAAAAAAAAAAAAAAAAAAAAAAAAAAA"),// ),child: Consumer<WidgetDataNotify>(
builder: (context,child){
print("value == ${datatonotify.value}");
testA=datatonotify.value;
print("test == $testA");
return Text("faf");
},//),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。