【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用

简介: 【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用

packages思维

即使软件包未在Pub。对于未用于公共发布的特殊插件或尚未准备好发布的软件包,可以使用其他依赖选项:

dependencies:
  flutter:
    sdk: flutter

路径依赖性:Flutter应用程序可以通过文件系统依赖插件的路径依赖性。路径可以是相对路径,也可以是绝对路径。例如,要依赖位于应用程序相邻目录中的插件“plugin1”,请使用以下语法依赖项:plugin1:path:/plugin1/
Git依赖性:还可以依赖存储在Git存储库中的包。如果软件包位于仓库的根目录中,请使用以下语法:dependencies:plugin1:git:url:git://github.com/flutter/plugin1.git

import 'package:flutter/material.dart';
import 'package:css_colors/css_colors.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new DemoPage(),
    );
  }
}

class DemoPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Container(color: CSSColors.orange)
    );
  }
}

Git依赖于文件夹中的包:默认情况下,Pub假设包位于Git存储库的根目录中。如果不是这样,可以使用path参数指定位置,例如:dependencies:package1:git:url:git://github.com/flutter/packages.git路径:packages/package1
最后,可以使用ref参数来修复对特定gitcommit、分支或标记的依赖关系。
当pubspec.yaml以速记方式添加包时,plugin1:这被解释为plugin1,即可以使用任何版本的包。为了确保包在更新后可以正常使用,我们建议使用以下格式之一指定版本范围:

范围限制:指定最小和最大版本号,例如依赖项:url_launcher:'>=0.1.2<0.2.0'
对范围限制使用插入符号语法:类似于常规范围限制。相关性:集合:“^0.1.2”

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new DemoPage(),
    );
  }
}

class DemoPage extends StatelessWidget {
  launchURL() {
    launch('https://flutter.io');
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new RaisedButton(
          onPressed: launchURL,
          child: new Text('Show Flutter homepage'),
        ),
      ),
    );
  }
}

过程实现

步骤1:创建包
要创建插件包,请使用--template=plugin参数执行flutter创建
使用--org选项指定的组织并使用反向域名表示法。该值用于生成的Android和iOS代码中的各种包和包标识符。
$flutter创建--org com.example--template=plugin hello
这将在hello/文件夹下创建一个包含以下特殊内容的插件项目:
Lib/你好。part:插件包的Dart API
Android/src/main/java.com/yourcompany/hello/HelloPlugin.java:插件包API的Android实现

Ios/类/HelloPlugin。m: 插件包API的ios实现
示例/:一个Flutter应用程序,它依赖于插件来解释如何使用它
默认情况下,插件项目对iOS代码使用Objective-C,对Android代码使用Java。如果喜欢Swift或Kotlin,可以使用-i或-a指定iOS或Android的语言。

$ flutter create --template=plugin -i swift -a kotlin hello

Android平台代码

我们建议使用Android Studio编辑Android代码。
在AndroidStudio中编辑Android平台代码之前,首先确保代码至少构建了一次(例如,从IntelliJ运行示例应用程序或在终端上执行cd hello/example;flutter build apk)
下一个

$ flutter packages pub publish --dry-run

启动Android Studio
在“欢迎使用Android Studio”对话框中,选择“导入项目”,或在菜单栏“文件>新建>导入项目…”中,然后选择hello/example/android/build.gradle文件
在“渐变同步”对话框中,选择“确定”
在“Android Gradle插件更新”对话框中,选择“不再介意我参与此项目”
插件的Android平台代码位于hello/java.com中。的公司。hello/HelloPlugin

dependencies:
  url_launcher: ^0.4.2
android {
    // lines skipped
    dependencies {
        provided rootProject.findProject(":url_launcher")
    }
}

如果some_包声明了上述依赖项,other_包声明一个url_启动程序版本类似于“0.4.5”或“^0.4.0”,pub将能够自动解决问题。类似的评论适用于插件包对Gradle模块和Cocoa pods的平台特定依赖性。
即使某些软件包和其他软件包声明了不兼容的urls_Launcher版本,该版本可能仍然是_启动器以兼容的方式工作。可以通过向hello包的pubspec.yaml文件添加依赖重写语句来强制使用特定版本来处理冲突:
在hello/pubspec.yaml中强制使用url版本0.4.3_ Launcher:

dependencies:
  some_package:
  other_package:
dependency_overrides:
  url_launcher: '0.4.3'

如果冲突的依赖项不是一个包,而是一个Android特定的库,如番石榴,那么依赖项重写声明必须添加到Gradle构造逻辑中。

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:23.0-android'
    }
}

创建Flutter平台客户端

应用程序的State类具有当前应用程序状态。我们需要扩展它以保持当前的功率
首先,我们建立渠道。我们使用MethodChannel调用一个方法来返回电池电量。
通道的客户端和主机通过通道构造函数中传递的通道名称进行连接。单个应用程序中使用的所有频道名称必须是唯一的;我们建议在频道名称中添加一个唯一的“域名前缀”,例如samples.flatter.io/pattern。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
...
class _MyHomePageState extends State<MyHomePage> {
  static const platform = const MethodChannel('samples.flutter.io/battery');

  // Get battery level.
}

接下来,我们调用通道上的方法,指定通过字符串标识符调用方法getBatteryLevel。调用可能失败-例如,如果平台不支持平台API(例如,在模拟器中运行时),我们将invokeMethod调用包装在try-catch语句中。
我们使用返回的结果更新setState中的用户界面状态batteryLevel。

 String _batteryLevel = 'Unknown battery level.';

  Future<Null> _getBatteryLevel() async {
    String batteryLevel;
    try {
      final int result = await platform.invokeMethod('getBatteryLevel');
      batteryLevel = 'Battery level at $result % .';
    } on PlatformException catch (e) {
      batteryLevel = "Failed to get battery level: '${e.message}'.";
    }

    setState(() {
      _batteryLevel = batteryLevel;
    });
  }

使用Java添加Android平台特定的实现

首先在Android Studio中打开Flutter应用程序的Android部分:
启动Android Studio
选择“文件>打开…”
导航到Flutter应用程序目录,选择android文件夹,然后单击“确定”
在java目录中打开MainActivity.java
接下来,在onCreate中创建MethodChannel并设置MethodCallHandler。确保使用与Flutter客户端中使用的频道名称相同的频道名称。

import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "samples.flutter.io/battery";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                new MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall call, Result result) {
                        // TODO
                    }
                });
    }
}

最后,我们完成了前面添加的onMethodCall方法。我们需要处理名为getBatteryLevel的平台方法,因此我们检查它是否是调用参数中的getBattery Level。这个平台方法的实现只需要调用我们在上一步中编写的Android代码,并使用响应参数返回成功和错误响应。如果调用了未知方法,我们还将通知返回

相关文章
|
14天前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
73 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
3月前
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模版),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、事件绑定与动态交互等功能,广泛适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业加速数字化转型。
|
4天前
|
JavaScript 安全 Java
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
33 12
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
3月前
|
开发框架 前端开发 定位技术
Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证
本文深入探讨了Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证,常见插件市场的介绍,选择合适插件的策略,以及开源资源的利用价值与注意事项。通过案例分析和对社区影响的讨论,展示了这些资源如何促进开发效率和技术进步,并展望了未来的发展趋势。
69 11
|
3月前
|
开发框架 数据安全/隐私保护 开发者
Flutter 是一款强大的跨平台移动应用开发框架,本文深入探讨了其布局与样式设计
Flutter 是一款强大的跨平台移动应用开发框架,本文深入探讨了其布局与样式设计,涵盖布局基础、常用组件、样式设计、实战应用、响应式布局及性能优化等方面,助力开发者打造精美用户界面。
70 7
|
3月前
|
开发框架 Dart 前端开发
Flutter 是谷歌推出的一款高效跨平台移动应用开发框架,使用 Dart 语言,具备快速开发、跨平台支持、高性能、热重载及美观界面等特点。
Flutter 是谷歌推出的一款高效跨平台移动应用开发框架,使用 Dart 语言,具备快速开发、跨平台支持、高性能、热重载及美观界面等特点。本文从 Flutter 简介、特点、开发环境搭建、应用架构、组件详解、路由管理、状态管理、与原生代码交互、性能优化、应用发布与部署及未来趋势等方面,全面解析 Flutter 技术,助你掌握这一前沿开发工具。
165 8
|
3月前
|
SQL 安全 Java
JavaSecLab 一款综合Java漏洞平台
JavaSecLab是一款综合型Java漏洞学习平台,涵盖多种漏洞场景,提供漏洞代码、修复示例、安全编码规范及友好UI。适用于安全服务、甲方安全培训、安全研究等领域,助于理解漏洞原理与修复方法。支持跨站脚本、SQL注入等多种漏洞类型……
|
3月前
|
缓存 前端开发 数据安全/隐私保护
Flutter 框架提供了丰富的机制和方法来优化键盘处理和输入框体验
在移动应用开发中,Flutter 框架提供了丰富的机制和方法来优化键盘处理和输入框体验。本文深入探讨了键盘的显示与隐藏、输入框的焦点管理、键盘类型的适配、输入框高度自适应、键盘遮挡问题处理及性能优化等关键技术,结合实例分析,旨在帮助开发者提升应用的用户体验。
98 6
|
3月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    零基础构建即时通讯开源项目OpenIM移动端-Flutter篇
    58
  • 3
    flutter3-dart3-dymall原创仿抖音(直播+短视频+聊天)商城app系统模板
    38
  • 4
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    141
  • 5
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 6
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 7
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    121
  • 8
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    75
  • 9
    flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
    18
  • 10
    【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    27