flutter 跳转到应用市场

本文介绍了在Flutter中如何实现应用更新功能。通过检查下载权限,决定是直接下载更新还是引导用户到应用市场。使用了decimal、url_launcher、r_upgrade和flutter_upgrade库,确保在用户设备上获取最新的应用版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用更新,先判断下载权限,有就直接后台下载地址更新,没有就跳转市场,判断市场是否是最新版本,是就更新,不是就跳转官网,
先导入decimal,url_launcher,r_upgrade,flutter_upgrade依赖
flutter_upgrade获取本地应用市场比较多

AppStore.jumpToAppStore();
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:flutter_upgrade/flutter_upgrade.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:r_upgrade/r_upgrade.dart';
import 'package:toptongpin/app/store/store.dart';
import 'package:toptongpin/app/utils/toast_util.dart';
import 'num_util.dart';
import 'object_util.dart';
import 'package:decimal/decimal.dart';
import 'package:url_launcher/url_launcher.dart';
class AppStore {
  static StoreController storeController = Get.find();

  static void jumpToAppStore() async {
    EasyLoading.show();
    if (Platform.isIOS) {
      await getVersionFromAppStore();
    } else if (Platform.isAndroid) {
      await getAndroidStores();
    }
  }

  static getVersionFromAppStore() async {
    String? versionName = await RUpgrade.getVersionFromAppStore(
      '1619726940', //例如:微信的AppId:414478124
    );
    if (ObjectUtil.isNotEmpty(versionName)) {
      EasyLoading.dismiss();
      jumpToIosAppStore();
    } else {
      EasyLoading.dismiss();
      ToastUtil.success('暂未在您应用市场找到该app');
    }
  }

  static void jumpToIosAppStore() async {
    bool? isSuccess = await RUpgrade.upgradeFromAppStore(
      '1619726940', //例如:微信的AppId:414478124
    );
    print(isSuccess);
  }

  static getAndroidStores() async {
    final res = await FlutterUpgrade.getInstallMarket();
    print(res);
    if (ObjectUtil.isEmptyList(res)) {
      EasyLoading.dismiss();
      ToastUtil.success('暂无应用市场');
    } else {
      EasyLoading.dismiss();
      print(res[0]);

      final versionName = await RUpgrade.getVersionFromAndroidStore(
          AndroidStore.internal(res[0].toString()));
      print(versionName.toString() + '88888888888888888888888888');

      if (ObjectUtil.isEmpty(versionName)) {
        ToastUtil.success('请先开
### 如何从 Android 原生应用跳转Flutter 模块 在 Android 原生应用程序中集成并导航至 Flutter 模块是一种常见的混合开发场景。通过配置 Launch Flags 和其他必要的设置,可以实现这一目标。 #### 配置 Android 项目以支持 Flutter 模块 为了使 Android 应用能够加载和启动 Flutter 模块,需要完成以下几项工作: 1. **创建 Flutter Module 并将其引入到现有 Android 工程** 使用 `flutter create --template=module` 创建一个新的模块,并按照官方文档中的说明将其导入现有的 Android 项目[^1]。 2. **修改 AndroidManifest 文件** 确保在 Android 的 `AndroidManifest.xml` 中声明了用于承载 Flutter 内容的 Activity 或 Fragment。通常情况下,这可以通过继承自 `io.flutter.embedding.android.FlutterActivity` 来实现。 3. **初始化 FlutterEngine 实例** 在 Android 代码中,需手动实例化一个 `FlutterEngine` 对象来管理 Dart 虚拟机及其运行环境。此对象可以在全局范围内共享以便多次调用时无需重复初始化。 ```java import io.flutter.embedding.engine.FlutterEngine; import io.flutter.embedding.engine.dart.DartExecutor; public class MyApplication extends Application { private FlutterEngine flutterEngine; @Override public void onCreate() { super.onCreate(); // 初始化 Flutter Engine flutterEngine = new FlutterEngine(this); flutterEngine.getDartExecutor().executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ); } public FlutterEngine getFlutterEngine(){ return flutterEngine; } } ``` 4. **定义 Intent 启动参数 (Launch Flags)** 当从 Native Code 导航到 Flutter 页面时,可通过传递额外的数据作为启动标志给定初始路由或者携带特定业务逻辑所需的信息。 ```java Intent intent = new Intent(CurrentActivity.this, FlutterActivity.class); // 设置要打开的具体路径,默认为 '/' intent.putExtra(FlutterActivity.EXTRA_INITIAL_ROUTE, "/customRoute"); // 如果已经存在可用引擎,则指定它;否则会自动创建新的 if(myApp.getFlutterEngine()!=null){ intent.putExtra(FlutterActivity.EXTRA_FLUTTER_ENGINE, myApp.getFlutterEngine()); } startActivity(intent); ``` 以上方法展示了如何无缝衔接两个不同框架之间的交互过程,既保留各自优势又满足实际需求。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值