我是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()),
])
你需要实际重新运行你的 CheckBluetooth()
功能。目前它只是从 Per.initialize()
.
你可以通过调用 modal.CheckBluetooth();
. 然后它将执行该函数,并在完成后通过Provider更新UI.一个Provider不会一直运行它的函数,以防万一有什么变化,你必须手动完成。