簡體   English   中英

Flutter 從提供商節目中獲取價值 null

[英]Flutter getting value from provider show null

我有一個像這樣的簡單 controller

class UserController with ChangeNotifier {
  UserData user = UserData();

  UserData get userdata => user;

  void setUser(UserData user) {
    user = user;
    print(user.sId);
    notifyListeners();
  }

  login(data) async {
    var response = await ApiService().login(data);
    final databody = json.decode(response);
    if (databody['success']) {
      UserData authUser = UserData.fromJson(databody['data']);
      setUser(authUser);
      notifyListeners();
      return true;
    } else {
      return false;
    }
  }
}

我試圖在小部件和初始狀態 function 中像這樣打印它,但值顯示 null。我可以在集合 function 中看到值不是 null。

print('id ${context.watch<UserController>().user.sId.toString()}');
print(
    'id2 ${Provider.of<UserController>(context, listen: false).user.sId.toString()}');

我已經添加了

ChangeNotifierProvider(create: (_) => UserController()),
      ],

在 main.dart 在 MultiProvider 中

同樣在點擊登錄按鈕時我正在這樣做

     showLoader(context);
                  UserController auth = Provider.of<UserController>(
                      context,
                      listen: false);

                  var data = {
                    "userEmail":
                        emailController.text.trim().toLowerCase(),
                    "userPassword": passwordController.text.trim(),
                  };
                  auth.login(data).then((v) {
                    if (v) {
                      hideLoader(context);
                      context.go('/homeroot');
                    } else {
                      hideLoader(context);
                      Fluttertoast.showToast(
                          backgroundColor: green,
                          textColor: Colors.white,
                          msg:
                              'Please enter correct email and password');
                    }
                  });

嘗試在命名相同時包含this

void setUser(UserData user) {
  this.user = user;
  print(user.sId);
  notifyListeners();
}

遵循這個結構

class UserController with ChangeNotifier {
  UserData user = UserData();

  UserData get userdata => user;

  void setUser(UserData user) {
    this.user = user;
    print(user.sId);
    notifyListeners();
  }

  Future<bool> login(String data) async {
    await Future.delayed(Duration(seconds: 1));
    UserData authUser = UserData(sId: data);
    setUser(authUser);
    notifyListeners();
    return true;
  }
}

class HPTest extends StatelessWidget {
  const HPTest({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Consumer<UserController>(
        builder: (context, value, child) {
          return Text(value.user.sId);
        },
      ),
      floatingActionButton: FloatingActionButton(onPressed: () async {
        final result = await Provider.of<UserController>(context, listen: false)
            .login("new ID");

        print("login $result");
        ;
      }),
    );
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM