notifyListeners() 没有同时更新UL。

问题描述 投票:0回答:1

我是flutter上的新开发者,我使用flutter闪亮的应用程序,所以我使用Provider packet,我需要改变widget UL,当蓝牙状态被改变,我做了代码,这样做,但在我的代码中,widget UL改变后运行应用程序的第二次,而不是在同一时刻改变,我可以改变widget在同一时间。

类 ChangeNotifier

class Per extends ChangeNotifier {

  bool BLu;

  Per.initialize(){
    CheckBluetooth();
  }

 CheckBluetooth()async{
  await  FlutterBlue.instance.state.listen((state)async {
   if(state==BluetoothState.on){
     BLu=true;
     notifyListeners();
   }else{
     BLu=false;
     notifyListeners();
   }

    if (state==BluetoothState.off) {
      BLu=false;
      notifyListeners();
    } else if (state==BluetoothState.on){
        BLu=true;
      notifyListeners();

    }

  });

}

小部件

   class _HomeState extends State<Hom> {
      @override
      Widget build(BuildContext context) {
        final modal =Provider.of<Per>(context);

      if(modal.BLu!=true){
        return Center(child: Text('NO'),);

      }else{
        return Center(child: Text('YES'),);
      }


    }

    }

多供应商

 return MultiProvider(providers: [
        ChangeNotifierProvider.value(value:AuthProvider.initialize()),
      ChangeNotifierProvider.value(value:Per.initialize()),
])
flutter provider flutter-change-notifier
1个回答
0
投票

你需要实际重新运行你的 CheckBluetooth() 功能。目前它只是从 Per.initialize().

你可以通过调用 modal.CheckBluetooth();. 然后它将执行该函数,并在完成后通过Provider更新UI.一个Provider不会一直运行它的函数,以防万一有什么变化,你必须手动完成。

© www.soinside.com 2019 - 2024. All rights reserved.