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

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

时间:2022-12-23 19:05:07浏览次数:39  
标签:Java url 使用 flutter import new 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代码,并使用响应参数返回成功和错误响应。如果调用了未知方法,我们还将通知返回

标签:Java,url,使用,flutter,import,new,Android,Flutter
From: https://blog.51cto.com/u_15603561/5963319

相关文章

  • java接口的实例化
    代码publicinterfaceRequestHandler{voidonRequest(Stringrecive,StringtoRespon);}publicinterfaceRequestHandler{voidonRequest(Stringrecive......
  • java项目打包(含lib jar包)
    1.无jar包<build><finalName>ZhiFou-1.0-SNAPSHOT</finalName><!--导出jar的名字--><plugins><plugin><groupId>org.apache.maven.plugins......
  • Project facet Java version 1.7 is not supported
    当运行这个web程序时,无法运行,提示错误如下:     当时安装的tomcat是tomcat7版本,安装的jdk版本是1.6。     配置的tomcat如下: window-Preferences-Server-Runtim......
  • 初学java懵了,这个异常是怎么产生的?
    一.异常现象最近壹哥的老表开始学Java啦,结果学了还不到两天,就遇到了他解决不了的问题,然后就跑来问我了。不知有没有其他初学java的小伙伴,大家可以过来围观一下,看看下面的问......
  • 实用干货!Java乱码问题原因及解决方案大全
    最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的。其实乱码问题解决起来很简单,很多人搞不定乱码是由于没有找到导致乱码的根本......
  • java命令执行之-jar与-cp或-classpath
    参考java-jar命令运行jar包时指定外部依赖jar包differences-between-java-cp-and-java-jar背景使用java-cplib.jar-jarpointed.jar时始终显示NoClassDefFoundEr......
  • 一篇文章带你了解Java中的运算符
    前言在前一篇文章中,壹哥给大家讲解了Java数据类型之间的转换,包括自动类型转换、强制类型转换、隐含的强制类型转换等问题。且在上一篇文章中,我还简单地给大家提到了Java的......
  • Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发?
    摘要:为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云。本文分享自华为云社......
  • 1 月 25 日见|Flutter Forward 活动日程表正式发布!
    2023年1月25日(正月初四),我们将在肯尼亚首都内罗毕举办FlutterForward大会,并同时开启线上直播。本次活动将展示最新的Flutter技术更新,包括一个主题演讲以及多......
  • Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发?
    摘要:为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云。本文分享自华为云社区......