[英]Why GetXController inheritance not working?
我對 flutter 很陌生。
我有一個名為LoginController的 controller,它從BaseController擴展,但在運行應用程序時出現以下錯誤。
基頁代碼
class BasePage extends StatelessWidget {
var baseController = Get.find<BaseController>();
BasePage({Key? key}) : super(key: key);
late Widget child;
@override
Widget build(BuildContext context) {
return Obx(() {
return baseController.IsNetworkAvailable.value?child:const NoInternetPage();
});
}
Widget GetWidget() {
if (baseController.IsNetworkAvailable.value) {
return child;
} else {
return const NoInternetPage();
}
}
}
這是 LoginPage 代碼片段
class LoginPage extends BasePage {
LoginPage({Key? key}) : super(key: key)
{
loginController =Get.put(LoginController());
child=RenderView();
}
late LoginController loginController;
TextStyle GetHeadingStyle()
{
return const TextStyle(
color: Colors.grey,
fontSize: 20
);
}
Widget RenderView()
{
return Scaffold(
body: Padding(
padding: const EdgeInsets.fromLTRB(30,0,30,0),
child: Obx((){
return
loginController.IsBusy.value?
const Center(
child: SizedBox(
height: 60,
width: 60,
child: CircularProgressIndicator(
strokeWidth: 5.0,
valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
),
),
):
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextField(
controller: loginController.domainController,
decoration: const InputDecoration(labelText: 'Domain',
border: OutlineInputBorder())
),
SizedBox(height: 20),
TextField(
controller: loginController.usernameController,
decoration: const InputDecoration(labelText: 'Username',
border: OutlineInputBorder())
),
const SizedBox(height: 20),
TextField(
controller: loginController.passwordController,
obscureText: true,
decoration: const InputDecoration(labelText: 'Password',
border: OutlineInputBorder())
),
const SizedBox(height: 20),
SizedBox(
width: 150,
height: 40,
child:
ElevatedButton(onPressed: ()=>{
loginController.doLogin(LoginSuccess,LoginFailed)
},
child:const Text('Login'
,style: TextStyle()),
),
),
],
);
})
),
);
}
void LoginSuccess() {
loginController.IsBusy.value = false;
Get.snackbar("Success", "Login Success",backgroundColor: Colors.green,colorText: Colors.white);
var storage = GetStorage();
storage.write("IsLoggedIn", true);
Get.off(MainPage());
}
void LoginFailed()
{
loginController.IsBusy.value=false;
Get.snackbar("Failed", "Login Failed",backgroundColor: Colors.red,colorText: Colors.white);
}
}
登錄 Controller 代碼
class LoginController extends BaseController {
TextEditingController domainController = TextEditingController();
TextEditingController usernameController = TextEditingController();
TextEditingController passwordController = TextEditingController();
LoginController() {}
void doLogin(Function loginSuccess, Function loginFailed) async {
if (await checkConnection()) {
//await RestService().PostRequest(Resources.LOGIN_URL,loginData , loginSuccess, loginFailed);
}
}
}
底座 Controller 代碼
class BaseController extends GetxController {
var IsBusy = false.obs;
var IsNetworkAvailable = false.obs;
var IsServerDown = false.obs;
BaseController() {}
Future<bool> checkConnection(
{bool setIsBusy = true, bool setNetworkAvailable = true}) async {
var result = await ConnectivityService.checkConnection();
bool isConnected = result != ConnectivityResult.none;
if (setIsBusy) {
IsBusy.value = isConnected;
}
if (setNetworkAvailable) {
IsNetworkAvailable.value = isConnected;
}
return isConnected;
}
}
注意:我假設初始化Get.put(LoginController())也應該自動初始化 BaseController,因為它繼承自 BaseController。
嘗試在 LoginController 中像這樣調用 BaseController。
class LoginController extends GetxController {
TextEditingController domainController = TextEditingController();
TextEditingController usernameController = TextEditingController();
TextEditingController passwordController = TextEditingController();
LoginController() {}
void doLogin(Function loginSuccess, Function loginFailed) async {
if (Get.putAsync(() => BaseController(). checkConnection())) {
//await RestService().PostRequest(Resources.LOGIN_URL,loginData , loginSuccess, loginFailed);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.