問題

私は、ホストアプリケーションがflutterViewを起動し、フラッタービューが https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps のようにフラッターモジュールであるadd2appシナリオでflutterを使用しています

私はそれに断片を持つ活動を持っています。 フラグメントには

 @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    FlutterView flutterView = Flutter.createView(getActivity(), getLifecycle(), route);
    GeneratedPluginRegistrant.registerWith(flutterView.getPluginRegistry());

return flutterView;
 

私は、アプリケーションバーのダーツコードが、ホストフラグメントとそのアクティビティでsuper.onBackPressedの効果を達成する左上のボタンを持つことができるように、最良の洗濯は、ハードウェアの戻るボタンと同じように動作し、ホストアプリケーションのバックスタックの前の画面に戻ります。

私が試してみました

 appBar: AppBar(
    leading: BackButton()
    title: const Text("My Screen Title),
    ),
 

しかし、期待どおりinitialRouteなので、canPop = falseです。 私はまた、代わりに同じであるカスタムBackButton()を試しました

 return IconButton(
  icon: const BackButtonIcon(),
  color: color,
  tooltip: MaterialLocalizations.of(context).backButtonTooltip,
  onPressed: () {
    Navigator.maybePop(context);
  }
);
 

back_button.dartのように

 Navigator.Pop(context);
 

の代わりに

 Navigator.maybePop(context);
 

完全に驚くことではなく、AndroidプラットフォームのJavaコードに戻るのではなく、空白の黒い画面が発生します。

私は fragment.getActivity()。finish()を実行するためにプラットフォーム呼び出しを使用することができると思いますが、これはかなり基本的なようです。

前もって感謝します

  ベストアンサー

この問題を見るもう一つの方法は、Flutterアプリからメッセージを送信して、Androidに何らかのアクションを実行するよう指示する方法です。

この場合、Flutterの戻るボタンをタップして、Androidを現在のアクティビティにfinish()にするか、含まれているフラグメントにカスタムナビゲーションアクションを実行するよう指示することです。

DartとAndroidの間のメッセージの受け渡しは、プラットフォームチャンネルを使用して行われます。次のガイドでは、プラットフォームチャンネルの設定と使用方法について説明しています。

https://flutter.io/docs/development/platform-integration/platform-channels

だから私はFlutterで次のようなものから始めます:

 MaterialApp(
  appBar: AppBar(
    leading: IconButton(
      icon: Icons.back,
      onPressed: () {
        // Send your platform channel message, or invoke some other method that will.
      }
    ),
    title: const Text("My Screen Title),
  ),
);
 

  同じタグがついた質問を見る

androidflutter