flutter的手机桌面返回,FlutterActivity的方法变更

3 篇文章 0 订阅
3 篇文章 0 订阅

flutter实现桌面返回功能

最近在写flutter的App,需要实现返回键退出时回到桌面而不是退出App

上网找了些资料,但是由于都是老版本,导致

  1. FlutterActivity引用的位置不一样
  2. GeneratedPluginRegistrant.registerWith(this)的this应用不成功
  3. 没有getFlutterView()方法

查询了部分资料后,发现以前的FlutterActivity已经被废弃,需要根据最新的方法写逻辑。

首先在android包下的MainActivity中,修改

import androidx.annotation.NonNull;

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

    //返回手机桌面事件
    static final String eventBackDesktop = "backDesktop";

    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
        //通讯名称,回到手机桌面
        String CHANNEL = "android/back/desktop";
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
                .setMethodCallHandler(
                        (call, result) -> {
                            if (call.method.equals(eventBackDesktop)) {
                                moveTaskToBack(false);
                                result.success(true);
                            }
                        }
                );
    }
}

接下来在Flutter的lib下添加一个android_back_desktop.dart文件:

import 'package:flutter/services.dart';

class AndroidBackDesktop{

  //通讯名称,回到手机桌面
  static const String CHANNEL = "android/back/desktop";
  //设置回退到手机桌面事件
  static const String eventBackDesktop = "backDesktop";

  //设置回退到手机桌面方法
  static Future<bool> backToDesktop() async {

    final platform = MethodChannel(CHANNEL);
    //通知安卓返回到手机桌面
    try{

      await platform.invokeMethod(eventBackDesktop);
    }
    on PlatformException catch (e){

      print("通信失败,设置回退到安卓手机桌面失败");
      print(e.toString());
    }
    return Future.value(false);
  }
}

最后在main.dart中使用WillPopScope包裹,在onWillpop中调用通知回到桌面方法(注意,不一定是main.dart,主要在你的主界面,因项目而异):

import 'package:an_chang_app/src/pages/work/order_add_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:an_chang_app/src/pages/home/home_item3_page.dart';
import 'package:an_chang_app/src/pages/home/home_item_page.dart';
import 'pages/mine/mine_main_page.dart';
import 'utils/android_back_desktop.dart';

///首页面
class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  //当前选中的标识
  int _currentIndex = 0;

  PageController _pageController = new PageController();

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: AndroidBackDesktop.backToDesktop,
      child: Scaffold(
        body: Container(
          width: double.infinity,
          height: double.infinity,
          child: PageView(
            controller: _pageController,
            //不可左右滑动
            physics: NeverScrollableScrollPhysics(),
            children: [
              //第四个文章列表页面
              HomeItem3Page(),
              //第五个个人中心页面
              MineMainPage(),
            ],
          ),
        ),
        bottomNavigationBar: BottomNavigationBar(
          //当前选中的Item 默认为 0
          currentIndex: _currentIndex,
          //点击回调
          onTap: (int value) {
            setState(() {
              _currentIndex = value;
              _pageController.jumpToPage(value);
            });
          },
          //显示文字
          type: BottomNavigationBarType.fixed,
          //选中的颜色
          selectedItemColor: Colors.redAccent,
          //未选中颜色
          unselectedItemColor: Colors.blueGrey,
          items: [
            BottomNavigationBarItem(icon: Icon(Icons.message), label: "工单"),
            BottomNavigationBarItem(icon: Icon(Icons.person), label: "我的"),
          ],
        ),
      ),
    );
  }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值