![](/img/trans.png)
[英]Please how to make the list observable in Flutter using the getx package?
[英]How to make a function return observable in Flutter using GetX?
我正在嘗試將使用有狀態小部件和提供程序 package 的代碼轉換為使用無狀態小部件和 GetX package 的代碼,但我不知道我可以為以下吸氣劑 ZC1C425268E683895D114ZA 做什么?
bool get isAuth {
return token != null;
}
這個function檢查token
是否存在,令牌本身來自以下function:
String? get token {
if (_expiryDate != null &&
_expiryDate!.isAfter(DateTime.now()) &&
_token != null) {
return _token;
}
return null;
}
我不知道如何修改這部分代碼以使isAuth
變量可觀察,然后我可以在main.dart
中使用它來將應用程序引導到身份驗證屏幕或主屏幕?
編輯:我嘗試了@SM JAHANGIR 在答案中建議的代碼,但我不知道我應該為main.dart
文件中的Obx
部分做什么? 以下是主要的main.dart
文件:
void main() {
Get.put(MenuController());
Get.put(NavigationController());
Get.put(AuthController());
Get.put(AuthCard);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
initialRoute: Obx(()=>AuthController.instance.isAuth
? homeScreenRoute
: authenticationScreenRoute),
unknownRoute: GetPage(
name: '/not-found',
page: () => PageNotFound(),
transition: Transition.fadeIn),
getPages: [
GetPage(
name: rootRoute,
page: () {
return SiteLayout();
}),
GetPage(
name: authenticationScreenRoute,
page: () => const AuthenticationScreen()),
GetPage(name: homeScreenRoute, page: () => HomeScreen()),
],
debugShowCheckedModeBanner: false,
title: 'BasicCode',
theme: ThemeData(
scaffoldBackgroundColor: light,
textTheme: GoogleFonts.mulishTextTheme(Theme.of(context).textTheme)
.apply(bodyColor: Colors.black),
pageTransitionsTheme: const PageTransitionsTheme(builders: {
TargetPlatform.iOS: FadeUpwardsPageTransitionsBuilder(),
TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(),
}),
primarySwatch: Colors.blue,
),
// home: AuthenticationPage(),
);
}
}
對於這行代碼initialRoute: Obx(()=>AuthController.instance.isAuth? homeScreenRoute: authenticationScreenRoute)
,我收到以下錯誤消息:
參數類型“Obx”不能分配給參數類型“String?”。
我也試過initialRoute: Obx(()=> AuthController.instance.isAuth? homeScreenRoute: authenticationScreenRoute) as String?
但它給了我一個新的錯誤:
根據閉包上下文的要求,返回類型“String”不是“Widget”。
如果您想讓isAuth
getter 可觀察,您可以簡單地執行以下操作:
RxBool get isAuth {
return RxBool(token != null);
}
但更方便的方法是:
final _isAuth = false.obs;
bool get isAuth {
_isAuth.value= token != null;
return _isAuth.value;
}
並像這樣使用它:
Obx(()=> isAuth? codeIfAuthenticated: codeIfNotAuthenticated)
initialRoute
將 String 作為參數,您不能為其分配widget
。 嘗試這個:
Obx(() =>
GetMaterialApp(
initialRoute: AuthController.instance.isAuth ? homeScreenRoute : authenticationScreenRoute
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.