无法使用提供程序获取对象的最新状态

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;