Flutter Getx提供商被解雇两次



我使用Getx包来管理我的应用程序状态,

发生了一些奇怪的事情,

所有提供程序被初始化多次

这是我的初始化方法

Future<void> main() async {
WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
ErrorWidget.builder = (e) => ErrorScreen(e.exception);
await App.initializeProviders();
if (Get.find<AuthProvider>().isAuth) await App.initializeUserProviders();

runApp(const Appi());
}

class Appi extends StatelessWidget {
const Appi({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}

这是我用来初始化提供者的两个方法

第一个核心提供商

static initializeProviders() async {
try {
Get.lazyPut<AuthProvider>(() => AuthProvider(), fenix: true);
Get.lazyPut<SettingsProvider>(() => SettingsProvider(), fenix: true);
Get.put<NotificationsProvider>(NotificationsProvider(), permanent: true);
await Get.find<AuthProvider>().load();
await Get.find<SettingsProvider>().load();
await FirebasePlugin.initializeApp();
} catch (e) {
//
print(e);
}
}

和第二个用于认证用户

static initializeUserProviders() async {
try {
Get.lazyPut<MainProvider>(() => MainProvider(), fenix: true);
Get.lazyPut<FiltersProvider>(() => FiltersProvider(), fenix: true);
Get.lazyPut<CartProvider>(() => CartProvider(), fenix: true);
Get.lazyPut<SearchProvider>(() => SearchProvider(), fenix: true);
// Get.lazyPut(() => HomeProvider(), fenix: true);
// Get.find<HomeProvider>().load();
Get.find<NotificationsProvider>().load();
Get.find<FiltersProvider>().load();
Get.find<CartProvider>().load();
} catch (e) {
//
}
}

我在调试控制台得到了这个


[GETX] Instance "NotificationsProvider" has been created
[GETX] Instance "NotificationsProvider" has been initialized
2[GETX] Instance "AuthProvider" has been created
2[GETX] Instance "AuthProvider" has been initialized
[GETX] Instance "NotificationsProvider" has been created
[GETX] Instance "NotificationsProvider" has been initialized
[GETX] Instance "AuthProvider" has been created
[GETX] Instance "AuthProvider" has been initialized
2[GETX] Instance "SettingsProvider" has been created
2[GETX] Instance "SettingsProvider" has been initialized
[GETX] Instance "SettingsProvider" has been created
[GETX] Instance "SettingsProvider" has been initialized
2
W/FLTFireMsgService( 5927): Attempted to start a duplicate background isolate. Returning...

请注意,我在另一个应用程序中使用了完全相同的方法和相同的方式,那里的一切都可以找到,

// auth load 
Future<void> load() async {
if (_profile.value != null && _token.value != null) return;
final localStorage = await SharedPreferences.getInstance();
final lt1 = localStorage.getString('somekey1');
final lt2 = localStorage.getString('somekey2');
final lt3 = localStorage.getString('somekey3');
final localProfile = localStorage.getString('_up');
if (lt1 != null && lt2 != null && lt3 != null && localProfile != null) {
_token.value = lt1 + lt2 + lt3;
final profile = json.decode(localProfile);
_profile.value = UserModel.fromJson(profile, avatar: profile['avatar']);
update();
return;
}
}



// filters load 
load() async {
await App.getData('PRD/filters.php').then((value) {
if (value != null) {
final platforms = value["brands"] as Map<String, dynamic>;
final stores = value["stores"] as Map<String, dynamic>;
setFilters(stores.values.toList(), platforms.values.toList());
}
}).catchError((e) {
throw e;
// TODO:: handle error
});
}
void setFilters(
List<dynamic> stores,
List<dynamic> platforms, {
bool local = false,
}) {
if (stores.isEmpty || platforms.isEmpty) return;
_allPlatforms.value.clear();
_allStores.value.clear();
_allPlatforms.value.add(Filter.getDefault(isPlatform: true));
_allStores.value.add(Filter.getDefault());
for (var platform in platforms) {
_allPlatforms.value.add(Filter.fromJson(platform, isPlatform: true));
}
for (var store in stores) {
_allStores.value.add(Filter.fromJson(store));
}
if (!local) {
SharedPreferences.getInstance().then((prefs) {
prefs.setString("allPlatforms", jsonEncode(platforms));
prefs.setString("allStores", jsonEncode(stores));
});
}
update();
}




// notification load 
Future<void> load() async {
final result = await _database.getAll();
if (result.length == _notifications.value.length) return;
_notifications.value.clear();
_notifications.value.addAll(result
.map((e) => NotificationModel.fromJson({
'id': e['id'],
'message': e['title'],
'type': e['type'],
'type_id': e['type_id'],
'level': e['level'],
'is_new': e['is_new'],
}))
.toList());
if (_notifications.value.isNotEmpty) {
_notifications.value
.sort((a, b) => int.parse(a.id).compareTo(int.parse(b.id)));
}
update();
}


// cart load 
Future<void> load() async {
try {
final items = await database.getAll();
_cartItems.clear();
for (var e in items) {
_cartItems.add(CartItem.fromJson(e));
}
update();
} catch (e) {
rethrow;
}
}

我修复这个问题如下:

我创建了一个新的flutter项目,我把我的lib文件夹移到新项目中。

我猜是VSCode的bug或者是android文件夹里的什么东西。

最新更新