Flutter 如何正确使用ChangeNotifierProvider.value将状态从屏幕1传递到屏幕2
我有两个屏幕主页和详细页面。我想基于某个动作在detailpage中重建小部件,但问题是数据通过http请求来自homepage,并且一个特定的对象被传递到第二个屏幕,以便在其上显示详细信息Flutter 如何正确使用ChangeNotifierProvider.value将状态从屏幕1传递到屏幕2,flutter,state,provider,Flutter,State,Provider,我有两个屏幕主页和详细页面。我想基于某个动作在detailpage中重建小部件,但问题是数据通过http请求来自homepage,并且一个特定的对象被传递到第二个屏幕,以便在其上显示详细信息 class ListPage extends StatefulWidget { @override _ListPageState createState() => _ListPageState(); } class _ListPageS
class ListPage extends StatefulWidget {
@override
_ListPageState createState() => _ListPageState();
}
class _ListPageState extends State<ListPage> {
ParcelModel model = ParcelModel();
@override
void initState() {
model.loadData();
super.initState();
}
Widget build(BuildContext context) {
width = MediaQuery.of(context).size.width;
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => ParcelModel()),
],
child: DefaultTabController(
length: 3,
child: ChangeNotifierProvider(
create: (context) => model,
child: Consumer<ParcelModel>(
builder:(context, model, child){
if(model.failed == true){
return Scaffold(
backgroundColor: Colors.white,
body:TabBarView(children:[
mescolis(context.watch<ParcelModel().listParcel),futureWidget_quotation(),
Payezcolisencoursdelivraison(context.watch<ParcelModel>().listParcel),
]),
floatingActionButton:FloatingActionButton(
onPressed: (){
MaterialPageRoute(
builder:(context) => ChangeNotifierProvider.value(
value:model,
child:Formtest(dataPays:context.watch<ParcelModel().listParcel,newsecontext:context,) //trying to pass the model here
)
);
}
)
),
),
);
class ListPage扩展了StatefulWidget{
@凌驾
_ListPageState createState()=>\u ListPageState();
}
类_ListPageState扩展状态{
ParcelModel模型=ParcelModel();
@凌驾
void initState(){
model.loadData();
super.initState();
}
小部件构建(构建上下文){
宽度=MediaQuery.of(context).size.width;
回程多供应商(
供应商:[
ChangeNotifierProvider(创建:(\u)=>ParcelModel()),
],
子级:DefaultTabController(
长度:3,
子项:ChangeNotifierProvider(
创建:(上下文)=>模型,
儿童:消费者(
生成器:(上下文、模型、子对象){
如果(model.failed==true){
返回脚手架(
背景颜色:Colors.white,
正文:选项卡视图(子项:[
mescolis(context.watch ChangeNotifierProvider.value(
价值:模型,
child:Formtest(dataPays:context.watch)
new RaisedButton(
onPressed: (){
try{
Provider.of<ParcelModel>(newContext,listen: false).postData(
formData,
dio,
context,
nom_coli_Controller,
description_coli_Controller,
nature_Controller,
nom_coli_Controller
);
}catch(e){
FlutterFlexibleToast.showToast(
message: "error",
toastLength: Toast.LENGTH_LONG,
timeInSeconds:30,
radius: 70,
);
}
},
child: new Text("Press here"),),