Flutterfragment не получает обновления ChangeNotifier ⇐ Android
-
Гость
Flutterfragment не получает обновления ChangeNotifier
Я использую FlutterFragment для размещения фрагмента флаттера внутри студии Android. Вот и все, flutter открывает активность Android (экран карты), в которой, в свою очередь, размещается FlutterFragment (простой нижний лист). Проблема в том, что когда я обновляю что-то в ChangeNotifier androidNavigationController, это не отражается внутри AndroidCustomNavigationBottomSheet. Кроме того, что-либо внутри AndroidCustomNavigationBottomSheet не может получать обновления ни от одного GetxController. Есть идеи, в чем может быть проблема? Интересно, речь идет о создании нового движка, отличного от FlutterEngine? Это части кода:
GetMaterialApp( строитель: (контекст BuildContext, виджет? дочерний) { окончательные данные MediaQueryData = MediaQuery.of(context); вернуть МедиаЗапрос( данные: data.copyWith(textScaleFactor: data.textScaleFactor.clamp(0.5, 3.2)), ребенок: ребенок! ); }, заголовок: '$appName', Ключ Навигатора: Ключ Навигатора, debugShowCheckedModeBanner: ложь, тема: MyTheme.darkTheme, darkTheme: MyTheme.darkTheme, themeMode: ThemeMode.dark, маршруты: { LoginScreen.routeName: (контекст) => LoginScreen(), HomeScreen.routeName: (контекст) => HomeScreen(), LoginWithCredentials.routeName: (контекст) => LoginWithCredentials(), ** 'flutter_android_bottomsheet': (контекст) => Provider.value(значение: androidNavigationController, дочерний элемент: AndroidCustomNavigationBottomSheet(),)** }, получить страницы: [ GetPage(имя: HomeScreen.routeName, страница: () => HomeScreen()) ], переводы: МойПеревод(), локаль: TranslationController.initialLang, дом: Дом(isDark) ); Внутри моего MainActivity.kt
класс MainActivity: FlutterActivity() { ... переопределить удовольствие configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) globalFlutterEngine = flutterEngine mainViewBinding = MainViewBinding.inflate(layoutInflater) setContentView(mainViewBinding.root) ... val newEngine = FlutterEngine(это) newEngine.navigationChannel.setInitialRoute("flutter_android_bottomsheet") newEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) FlutterEngineCache.getInstance().put("my_cached_engine", newEngine) }
И внутри моей NavigationActivity
класс NavigationActivity : AppCompatActivity() { @SuppressLint("MissingPermission") переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) привязка = NavigationActivityWithTokenBinding.inflate(layoutInflater) setContentView(binding.root) flutterFragment = FlutterFragment.withCachedEngine("my_cached_engine").transparencyMode(TransparencyMode.transparent).build() val tx: FragmentTransaction = supportFragmentManager.beginTransaction() tx.replace(R.id.flutter_container, flutterFragment!!) tx.commitNow() supportFragmentManager.executePendingTransactions() } } Проверено и ожидаемо: использовался FluterFragment (виджет AndroidCustomNavigationBottomSheet Flutter), который размещается действием Android, и ожидалось, что FluterFragment будет использовать другие объекты ChangeNotifier и Getxcontroller. Результат: виджет AndroidCustomNavigationBottomSheet Flutter не получает никаких обновлений ни от ChangeNotifier, ни от Getxcontroller.
Я использую FlutterFragment для размещения фрагмента флаттера внутри студии Android. Вот и все, flutter открывает активность Android (экран карты), в которой, в свою очередь, размещается FlutterFragment (простой нижний лист). Проблема в том, что когда я обновляю что-то в ChangeNotifier androidNavigationController, это не отражается внутри AndroidCustomNavigationBottomSheet. Кроме того, что-либо внутри AndroidCustomNavigationBottomSheet не может получать обновления ни от одного GetxController. Есть идеи, в чем может быть проблема? Интересно, речь идет о создании нового движка, отличного от FlutterEngine? Это части кода:
GetMaterialApp( строитель: (контекст BuildContext, виджет? дочерний) { окончательные данные MediaQueryData = MediaQuery.of(context); вернуть МедиаЗапрос( данные: data.copyWith(textScaleFactor: data.textScaleFactor.clamp(0.5, 3.2)), ребенок: ребенок! ); }, заголовок: '$appName', Ключ Навигатора: Ключ Навигатора, debugShowCheckedModeBanner: ложь, тема: MyTheme.darkTheme, darkTheme: MyTheme.darkTheme, themeMode: ThemeMode.dark, маршруты: { LoginScreen.routeName: (контекст) => LoginScreen(), HomeScreen.routeName: (контекст) => HomeScreen(), LoginWithCredentials.routeName: (контекст) => LoginWithCredentials(), ** 'flutter_android_bottomsheet': (контекст) => Provider.value(значение: androidNavigationController, дочерний элемент: AndroidCustomNavigationBottomSheet(),)** }, получить страницы: [ GetPage(имя: HomeScreen.routeName, страница: () => HomeScreen()) ], переводы: МойПеревод(), локаль: TranslationController.initialLang, дом: Дом(isDark) ); Внутри моего MainActivity.kt
класс MainActivity: FlutterActivity() { ... переопределить удовольствие configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) globalFlutterEngine = flutterEngine mainViewBinding = MainViewBinding.inflate(layoutInflater) setContentView(mainViewBinding.root) ... val newEngine = FlutterEngine(это) newEngine.navigationChannel.setInitialRoute("flutter_android_bottomsheet") newEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) FlutterEngineCache.getInstance().put("my_cached_engine", newEngine) }
И внутри моей NavigationActivity
класс NavigationActivity : AppCompatActivity() { @SuppressLint("MissingPermission") переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) привязка = NavigationActivityWithTokenBinding.inflate(layoutInflater) setContentView(binding.root) flutterFragment = FlutterFragment.withCachedEngine("my_cached_engine").transparencyMode(TransparencyMode.transparent).build() val tx: FragmentTransaction = supportFragmentManager.beginTransaction() tx.replace(R.id.flutter_container, flutterFragment!!) tx.commitNow() supportFragmentManager.executePendingTransactions() } } Проверено и ожидаемо: использовался FluterFragment (виджет AndroidCustomNavigationBottomSheet Flutter), который размещается действием Android, и ожидалось, что FluterFragment будет использовать другие объекты ChangeNotifier и Getxcontroller. Результат: виджет AndroidCustomNavigationBottomSheet Flutter не получает никаких обновлений ни от ChangeNotifier, ни от Getxcontroller.
Мобильная версия