Commit d50ed5a0 authored by 汪林玲's avatar 汪林玲

Flutter原生Toast升级

parents
.DS_Store
.dart_tool/
.packages
.pub/
build/
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Dart SDK">
<CLASSES>
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/async" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/collection" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/convert" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/core" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/developer" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/html" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/io" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/isolate" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/math" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/mirrors" />
<root url="file://D:/dev/flutter_windows_1.22.3-stable/bin/cache/dart-sdk/lib/typed_data" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Flutter Plugins" type="FlutterPluginsLibraryType">
<CLASSES>
<root url="file://$PROJECT_DIR$" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Flutter for Android">
<CLASSES>
<root url="jar://D:/dev/flutter_windows_1.22.3-stable/bin/cache/artifacts/engine/android-arm/flutter.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectType">
<option name="id" value="io.flutter" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/flutter_native_toast.iml" filepath="$PROJECT_DIR$/flutter_native_toast.iml" />
<module fileurl="file://$PROJECT_DIR$/android/flutter_native_toast_android.iml" filepath="$PROJECT_DIR$/android/flutter_native_toast_android.iml" />
<module fileurl="file://$PROJECT_DIR$/example/android/flutter_native_toast_example_android.iml" filepath="$PROJECT_DIR$/example/android/flutter_native_toast_example_android.iml" />
</modules>
</component>
</project>
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="example/lib/main.dart" type="FlutterRunConfigurationType" factoryName="Flutter">
<option name="filePath" value="$PROJECT_DIR$/example/lib/main.dart" />
<method />
</configuration>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidLogFilters">
<option name="TOOL_WINDOW_CONFIGURED_FILTER" value="Show only selected application" />
</component>
<component name="ChangeListManager">
<list default="true" id="9988bf61-adeb-4b03-957a-81796b332c60" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="42f75c37" />
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="1lJAxw38AtfmGQj4EwftoU6NUTy" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showExcludedFiles" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="dart.analysis.tool.window.force.activate" value="false" />
<property name="io.flutter.reload.alreadyRun" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/example/android" />
<property name="show.migrate.to.gradle.popup" value="false" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="9988bf61-adeb-4b03-957a-81796b332c60" name="Default Changelist" comment="" />
<created>1607305070827</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1607305070827</updated>
</task>
<servers />
</component>
<component name="WindowStateProjectService">
<state x="4900" y="1157" key="FileChooserDialogImpl" timestamp="1607305099392">
<screen x="3840" y="702" width="2560" height="1400" />
</state>
<state x="4900" y="1157" key="FileChooserDialogImpl/0.0.1536.824/3840.702.2560.1400@3840.702.2560.1400" timestamp="1607305099392" />
<state width="2503" height="553" key="GridCell.Tab.0.bottom" timestamp="1607323873944">
<screen x="3840" y="702" width="2560" height="1400" />
</state>
<state width="2503" height="553" key="GridCell.Tab.0.bottom/0.0.1536.824/3840.702.2560.1400@3840.702.2560.1400" timestamp="1607323873944" />
<state width="2503" height="553" key="GridCell.Tab.0.center" timestamp="1607323873943">
<screen x="3840" y="702" width="2560" height="1400" />
</state>
<state width="2503" height="553" key="GridCell.Tab.0.center/0.0.1536.824/3840.702.2560.1400@3840.702.2560.1400" timestamp="1607323873943" />
<state width="2503" height="553" key="GridCell.Tab.0.left" timestamp="1607323873943">
<screen x="3840" y="702" width="2560" height="1400" />
</state>
<state width="2503" height="553" key="GridCell.Tab.0.left/0.0.1536.824/3840.702.2560.1400@3840.702.2560.1400" timestamp="1607323873943" />
<state width="2503" height="553" key="GridCell.Tab.0.right" timestamp="1607323873944">
<screen x="3840" y="702" width="2560" height="1400" />
</state>
<state width="2503" height="553" key="GridCell.Tab.0.right/0.0.1536.824/3840.702.2560.1400@3840.702.2560.1400" timestamp="1607323873944" />
</component>
</project>
\ No newline at end of file
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: f7a6a7906be96d2288f5d63a5a54c515a6e987fe
channel: stable
project_type: plugin
# 引入说明
\ No newline at end of file
public class ShowToastUtil {
private static TextView mTextView;
private static ImageView mImageView;
public static void showToast(Context context, String message,int cnt) {
final Timer timer = new Timer();
//加载Toast布局
View toastRoot = LayoutInflater.from(context).inflate(R.layout.toast, null);
//初始化布局控件
mTextView = (TextView) toastRoot.findViewById(R.id.message);
mImageView = (ImageView) toastRoot.findViewById(R.id.imageView);
//为控件设置属性
mTextView.setText(message);
mImageView.setImageResource(R.mipmap.ic_launcher);
//Toast的初始化
final Toast toastStart = new Toast(context);
//获取屏幕高度
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
int height = wm.getDefaultDisplay().getHeight();
//Toast的Y坐标是屏幕高度的1/3,不会出现不适配的问题
toastStart.setGravity(Gravity.TOP, 0, height / 3);
toastStart.setDuration(Toast.LENGTH_LONG);
toastStart.setView(toastRoot);
timer.schedule(new TimerTask() {
@Override
public void run() {
toastStart.show();
}
}, 0, 3000); //Toast long默认显示的是3000毫秒,所以设置成3000
new Timer().schedule(new TimerTask() {
@Override
public void run() {
toastStart.cancel();
timer.cancel();
}
}, cnt );
}
\ No newline at end of file
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
group 'com.qiaomeng.flutter.flutter_native_toast'
version '1.0'
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
rootProject.allprojects {
repositories {
google()
jcenter()
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 16
}
lintOptions {
disable 'InvalidPackage'
}
}
\ No newline at end of file
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
rootProject.name = 'flutter_native_toast'
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qiaomeng.flutter.flutter_native_toast">
</manifest>
package com.qiaomeng.flutter.flutter_native_toast;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
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;
import io.flutter.plugin.common.PluginRegistry.Registrar;
/**
* FlutterNativeToastPlugin
*/
public class FlutterNativeToastPlugin implements FlutterPlugin, MethodCallHandler {
private MethodChannel channel;
private ToastHandler toastHandler;
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
channel = new MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "flutter_native_toast");
channel.setMethodCallHandler(this);
toastHandler = new ToastHandler(flutterPluginBinding.getApplicationContext());
}
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "flutter_native_toast");
channel.setMethodCallHandler(new FlutterNativeToastPlugin());
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("showToast")) {
String msg = call.argument("msg");
int duration = 0;
int position = 2;
if (call.argument("duration") != null) {
duration = call.argument("duration");
}
if (call.argument("position") != null) {
position = call.argument("position");
}
toastHandler.showToast(msg, duration, position);
} else {
result.notImplemented();
}
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
}
}
package com.qiaomeng.flutter.flutter_native_toast;
import android.content.Context;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
public class ToastHandler {
private Context context;
public ToastHandler(Context context) {
this.context = context;
}
/**
* 显示toast
*
* @param msg
* @param duration
* @param position
*/
public void showToast(String msg, int duration, int position) {
final Toast toast = Toast.makeText(context, "", duration);
final View view = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.toast_2_layout, null);
final TextView msgTv = view.findViewById(R.id.msg);
int offset = 200;
if (position == 0) {
toast.setGravity(Gravity.TOP, 0, offset);
} else if (position == 1) {
toast.setGravity(Gravity.CENTER, 0, offset);
} else if (position == 2) {
toast.setGravity(Gravity.BOTTOM, 0, offset);
}
msgTv.setText(msg);
toast.setView(view);
toast.show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#cc000000" />
<corners android:radius="8dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_toast_layout"
android:orientation="vertical"
android:paddingHorizontal="17dp"
android:paddingVertical="10dp">
<TextView
android:id="@+id/msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品标题已复制"
android:textColor="#ffffffff"
android:textSize="14sp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/.idea" />
<excludeFolder url="file://$MODULE_DIR$/.pub" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/build" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Dart SDK" level="project" />
<orderEntry type="library" name="Flutter Plugins" level="project" />
</component>
</module>
\ No newline at end of file
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/Generated.xcconfig
/Flutter/flutter_export_environment.sh
\ No newline at end of file
#import <Flutter/Flutter.h>
@interface FlutterNativeToastPlugin : NSObject<FlutterPlugin>
@end
#import "FlutterNativeToastPlugin.h"
#if __has_include(<flutter_native_toast/flutter_native_toast-Swift.h>)
#import <flutter_native_toast/flutter_native_toast-Swift.h>
#else
// Support project import fallback if the generated compatibility header
// is not copied when this plugin is created as a library.
// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816
#import "flutter_native_toast-Swift.h"
#endif
@implementation FlutterNativeToastPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
[SwiftFlutterNativeToastPlugin registerWithRegistrar:registrar];
}
@end
import Flutter
import UIKit
import Toast_Swift
public class SwiftFlutterNativeToastPlugin: NSObject, FlutterPlugin {
var isInited = false
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "flutter_native_toast", binaryMessenger: registrar.messenger())
let instance = SwiftFlutterNativeToastPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
// public override init() {
// super.init()
// self.startHost()
// }
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
// result("iOS " + UIDevice.current.systemVersion)
switch call.method {
case "showToast":
showToast(call: call, result: result)
case "hideToast":
UIApplication.shared.keyWindow?.hideAllToasts()
default:
result(FlutterMethodNotImplemented)
}
}
func showToast(call:FlutterMethodCall,result:FlutterResult) {
let args = call.arguments as! [String:Any]
let positon = convertInt(value: args["position"] as! Int)
let msg = args["msg"] as! String
UIApplication.shared.keyWindow?.hideAllToasts()
UIApplication.shared.keyWindow?.makeToast(msg,position: positon)
}
//int to enum
func convertInt(value:Int) -> ToastPosition{
switch value {
case 0:
return ToastPosition.top
case 1:
return ToastPosition.center
case 2:
return ToastPosition.bottom
default:
return ToastPosition.top
}
}
// deinit {
// stopNotifier()
// }
}
//extension SwiftFlutterNativeToastPlugin {
//
//
//
// func startHost() {
// stopNotifier()
// setupReachability()
// startNotifier()
// }
//
// func setupReachability() {
// let reachability: Reachability?
// reachability = try? Reachability.init(hostname: "www.baidu.com")
// self.reachability = reachability
//
// NotificationCenter.default.addObserver(
// self,
// selector: #selector(reachabilityChanged(_:)),
// name: .reachabilityChanged,
// object: reachability
// )
// }
//
// func startNotifier() {
// print("开始监听")
// do {
// try reachability?.startNotifier()
// } catch {
// print("监听失败")
// return
// }
// }
//
// func stopNotifier() {
// print("停止监听")
// reachability?.stopNotifier()
// NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: nil)
// reachability = nil
// }
//
//
// @objc func reachabilityChanged(_ note: Notification) {
// let window = UIApplication.shared.keyWindow;
// let reachability = note.object as! Reachability
// //启动时不提示
// if(isInited == false){
// isInited = true
// return
// }
// switch reachability.connection {
// case .unavailable:
// print("网络无连接")
// // window?.makeToast("网络无连接")
// window?.makeToast("网络无连接,请检查您的网络", duration: 2.0,title: "", image: UIImage(named: "home_invite_icon")) { didTap in
// if didTap {
// print("completion from tap")
// } else {
// print("completion without tap")
// }
// }
// case .cellular:
// print("数据连接")
// window?.makeToast("数据连接")
// case .wifi:
// print("WiFi连接")
// window?.makeToast("WiFi连接")
//
// case .none:
// print("网络无连接.")
// }
// }
//}
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
# Run `pod lib lint flutter_native_toast.podspec' to validate before publishing.
#
Pod::Spec.new do |s|
s.name = 'flutter_native_toast'
s.version = '0.0.1'
s.summary = 'A new Flutter plugin.'
s.description = <<-DESC
A new Flutter plugin.
DESC
s.homepage = 'http://example.com'
s.license = { :file => '../LICENSE' }
s.author = { 'Your Company' => 'email@example.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.dependency 'Flutter'
s.platform = :ios, '10.0'
s.dependency 'Toast-Swift', '~> 5.0.1'
s.static_framework = true
# Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
s.swift_version = '5.0'
end
import 'package:flutter/services.dart';
class FlutterNativeToast {
static const MethodChannel _channel =
const MethodChannel('flutter_native_toast');
static showToast(String msg,
{ToastDuration duration = ToastDuration.LENGTH_SHORT,
ToastPosition position = ToastPosition.center}) {
_channel.invokeMethod('showToast',
{"msg": msg, "duration": duration.index, "position": position.index});
}
}
//toast位置
enum ToastPosition {
top,
center,
bottom,
}
enum ToastDuration { LENGTH_SHORT, LENGTH_LONG }
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.15.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.7.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.2"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
sdks:
dart: ">=2.12.0 <3.0.0"
flutter: ">=1.10.0"
name: flutter_native_toast
description: A new Flutter plugin.
version: 1.0.0
homepage:
environment:
sdk: ">=2.7.0 <3.0.0"
flutter: ">=1.10.0"
dependencies:
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
flutter:
plugin:
platforms:
android:
package: com.qiaomeng.flutter.flutter_native_toast
pluginClass: FlutterNativeToastPlugin
ios:
pluginClass: FlutterNativeToastPlugin
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment