Flutter GetX 封装同页过渡问题

问题描述 投票:0回答:1

这是我的依赖代码。

import 'package:get/get.dart';

import 'movies.dart';

class DiMoviesDetail extends Bindings {
  @override
  void dependencies() {
    Get.lazyPut<MoviesDetailRemoteDatasource>(
        () => MoviesDetailRemoteDatasourceImpl(),
        fenix: true);
    Get.lazyPut<MoviesDetailLocalDatasource>(
        () => MoviesDetailLocalDatasourcImp(),
        fenix: true);
    Get.lazyPut<MoviesDetailRepository>(() => MoviesDetailRepositoryImp(),
        fenix: true);
    Get.lazyPut(() => MoviesDetailRemote(), fenix: true);
    Get.lazyPut(() => MovieDetailLocal(), fenix: true);
    Get.lazyPut(() => MoviesDetailUsecase(), fenix: true);
    Get.lazyPut(() => MoviesImagesUsecase(), fenix: true);
    Get.lazyPut(() => MoviesCollectionDetailUsecase(), fenix: true);

    Get.create(() => MoviesDetailController(),);
  }

这部分是路线代码。


import 'package:get/get.dart';

import '../../lib.dart';

class RouteManager {
  static appRoutes() => [
        GetPage(
          name: RouteConstants.SPLASH,
          bindings: [DiDiscovery(), DiMovieList()],
          page: () => const Filmolog(),
        ),
        GetPage(
          name: RouteConstants.MOVIEDETAIL,
          bindings: [DiMoviesDetail(),],
          page: () => const MoviesDetailPage(),
          transition: Transition.rightToLeft,
        ),
      ];
}

这部分是GetMaterialApp代码。

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

  @override
  Widget build(BuildContext context) {
    return ScreenUtilInit(
        designSize: const Size(360, 690),
        builder: (context, child) {
          return GetMaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Filmolog',
            translations: LocalizationsApp(),
            locale: Get.deviceLocale,
            fallbackLocale: const Locale('tr', 'TR'),
            theme: getApplicationTheme(),
            themeMode: ThemeMode.dark,
            localizationsDelegates: const [
              GlobalMaterialLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate,
              GlobalCupertinoLocalizations.delegate,
            ],            
            supportedLocales: const [
              Locale('tr'),
              Locale('en'),
            ],
            initialBinding: DiApp(),
            initialRoute: RouteConstants.SPLASH,
            getPages: RouteManager.appRoutes(),
          );
        });
  }
}

我正在像这样进行转换。

GestureDetector(
                      child: PosterAndTitleWidget(
                        posterPath: result[index].posterPath,
                        releaseDate: result[index].releaseDate,
                        title: result[index].title,
                        voteAverage: AppSettings.voteAverageString(
                            result[index].voteAverage!),
                      ),
                      onTap: () {
                     
                        Get.toNamed(RouteConstants.MOVIEDETAIL,
                            preventDuplicates: false,
                            arguments: result[index].id!);
                      },
                    );

用户来到电影详情页面。在详细信息页面上时,他们再次打开相同的详细信息页面。我对 get.create 没有任何关于此的问题。但是,当用户关闭并重新打开手机屏幕时,之前的电影详细信息会消失,并且会重复显示上次打开的电影详细信息。

我对你的期望是,当用户重新打开手机时,至少应用程序会从根页面(“/”)启动

flutter transition flutter-getx
1个回答
0
投票

您可以尝试使用下一个:

class LifecycleEventHandler extends WidgetsBindingObserver {

  @override
  Future<void> didChangeAppLifecycleState(AppLifecycleState state) async {
    switch (state) {
      case AppLifecycleState.resumed:
         //do something here, for example
         Get.offAll(() => Home());
      case AppLifecycleState.inactive:
      case AppLifecycleState.paused:
      case AppLifecycleState.detached:
          //do something here: 
     
    }
  }
}

您应该在 main.dart 或其他地方注册观察者:

WidgetsBinding.instance.addObserver(lifecycleEventHandler);

您还可以创建一个指定的

<bool>
控制器,其状态将在以下情况发生变化:
AppLifecycleState
改变。然后,您可以根据控制器状态在小部件中执行一些 UI/导航逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.