无法使用提供程序获取对象的最新状态
No able to get the latest state of an object using provider
我正在尝试从主页 class 获取 name 变量的最新状态,但我得到的是空值而不是值 Tenzin Nyidon。如您所见,我在 MyHomePage 的构建方法中初始化名称变量,并设置 notifyListeners() 方法(通知导航按钮 onPress 内的所有听众)。
main.dart:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<MyHomePage>(builder: (_) => MyHomePage(),)
],
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
),
);
}
}
class MyHomePage extends StatelessWidget with ChangeNotifier {
String name;
@override
Widget build(BuildContext context) {
//* Here I intialized the name variabel
name = "Tenzin Nyidon";
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(name),
RaisedButton(
child: Text("Navigate"),
onPressed: (){
//* notify all listener
notifyListeners();
Navigator.of(context).push(
MaterialPageRoute(
builder: (_){
return Home();
}
)
);
},
)
],
),
),
);
}
}
home.dart:
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
var provider = Provider.of<MyHomePage>(context);
return Scaffold(
body: Center(
//! I am getting a null value here
child: Text("name from the main.dart: ${provider.name}"),
),
);
}
}
尽量不要使用无状态小部件创建提供程序,因为它无法更新其状态。
并且您还必须创建一个方法来处理更改,然后调用 changeNotifier();
如:
class MyProvider extends ChangeNotifier {
String name;
void changeName(String newValue){
name = newValue;
}
}
然后调用提供商:
要更改值:
Provider.of<MyProvider>(context).changeName(newValue);
阅读:
Provider.of<MyProvider>(context).name;
我正在尝试从主页 class 获取 name 变量的最新状态,但我得到的是空值而不是值 Tenzin Nyidon。如您所见,我在 MyHomePage 的构建方法中初始化名称变量,并设置 notifyListeners() 方法(通知导航按钮 onPress 内的所有听众)。
main.dart:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<MyHomePage>(builder: (_) => MyHomePage(),)
],
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
),
);
}
}
class MyHomePage extends StatelessWidget with ChangeNotifier {
String name;
@override
Widget build(BuildContext context) {
//* Here I intialized the name variabel
name = "Tenzin Nyidon";
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(name),
RaisedButton(
child: Text("Navigate"),
onPressed: (){
//* notify all listener
notifyListeners();
Navigator.of(context).push(
MaterialPageRoute(
builder: (_){
return Home();
}
)
);
},
)
],
),
),
);
}
}
home.dart:
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
var provider = Provider.of<MyHomePage>(context);
return Scaffold(
body: Center(
//! I am getting a null value here
child: Text("name from the main.dart: ${provider.name}"),
),
);
}
}
尽量不要使用无状态小部件创建提供程序,因为它无法更新其状态。
并且您还必须创建一个方法来处理更改,然后调用 changeNotifier();
如:
class MyProvider extends ChangeNotifier {
String name;
void changeName(String newValue){
name = newValue;
}
}
然后调用提供商:
要更改值:
Provider.of<MyProvider>(context).changeName(newValue);
阅读:
Provider.of<MyProvider>(context).name;