Anonymous
Как я могу использовать новую библиотеку в проекте старой версии?
Сообщение
Anonymous » 06 дек 2024, 05:12
Я новичок в Flutter и сейчас столкнулся с ситуацией, когда мне нужно добавить функцию автоматического захвата для распознавания лиц. Однако в проекте используется более старая версия Flutter, которую невозможно обновить, поэтому я не могу интегрировать необходимую библиотеку.
Мой код
Код: Выделить всё
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
Файл build.gradle (приложение)
Код: Выделить всё
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 34
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.test_project"
minSdkVersion 25
targetSdkVersion 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
profile {
initWith debug
}
}
}
flutter {
source '../..'
}
String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
repositories {
maven {
url '/Users/phannhattan/Work/KAS/face_camera_module/build/host/outputs/repo'
}
maven {
url "$storageUrl/download.flutter.io"
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
debugImplementation 'com.kas.face_camera_module:flutter_debug:1.0'
profileImplementation 'com.kas.face_camera_module:flutter_profile:1.0'
releaseImplementation 'com.kas.face_camera_module:flutter_release:1.0'
}
Основная активность файла
Код: Выделить всё
package com.example.test_project
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.FlutterEngineCache
import io.flutter.embedding.engine.dart.DartExecutor
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
class MainActivity : FlutterActivity() {
private val CHANNEL = "com.example.channel";
private lateinit var channel: MethodChannel
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL);
channel.setMethodCallHandler {call, result ->
if(call.method == "openFlutterModule") {
result.success("abc")
startActivity(
FlutterActivity
.withNewEngine()
.initialRoute("/face_camera")
.build(this)
)
}
}
}
}
Код: Выделить всё
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
static const platform = MethodChannel('com.example.channel');
Future navigateToModule() async {
try {
// Gửi lệnh xuống Kotlin
String test = await platform.invokeMethod('openFlutterModule');
} catch (e) {
print("Failed to invoke method: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'You have pushed the button this many times:',
),
Text(
'',
style: Theme.of(context).textTheme.displayLarge,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: navigateToModule,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
Файл pubspec.yaml
Код: Выделить всё
name: test_projectdescription: A new Flutter project.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment: sdk: ">=2.16.2
Подробнее здесь: [url]https://stackoverflow.com/questions/79256690/how-can-i-use-a-new-library-in-an-older-version-project[/url]
1733451122
Anonymous
Я новичок в Flutter и сейчас столкнулся с ситуацией, когда мне нужно добавить функцию автоматического захвата для распознавания лиц. Однако в проекте используется более старая версия Flutter, которую невозможно обновить, поэтому я не могу интегрировать необходимую библиотеку. [b]Мой код[/b] [list] [*]Файл AndoidManifest.xml [/list] [code] package="com.example.test_project"> [/code] [list] [*]Файл build.gradle [/list] [code] ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() mavenCentral() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { delete rootProject.buildDir } [/code] [list] [*]Файл build.gradle (приложение) [/list] [code]def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.test_project" minSdkVersion 25 targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } profile { initWith debug } } } flutter { source '../..' } String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com" repositories { maven { url '/Users/phannhattan/Work/KAS/face_camera_module/build/host/outputs/repo' } maven { url "$storageUrl/download.flutter.io" } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) debugImplementation 'com.kas.face_camera_module:flutter_debug:1.0' profileImplementation 'com.kas.face_camera_module:flutter_profile:1.0' releaseImplementation 'com.kas.face_camera_module:flutter_release:1.0' } [/code] [list] [*]Основная активность файла [/list] [code]package com.example.test_project import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.FlutterEngineCache import io.flutter.embedding.engine.dart.DartExecutor import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { private val CHANNEL = "com.example.channel"; private lateinit var channel: MethodChannel override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL); channel.setMethodCallHandler {call, result -> if(call.method == "openFlutterModule") { result.success("abc") startActivity( FlutterActivity .withNewEngine() .initialRoute("/face_camera") .build(this) ) } } } } [/code] [list] [*]Файл main.dart [/list] [code]import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key, required this.title}) : super(key: key); final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { static const platform = MethodChannel('com.example.channel'); Future navigateToModule() async { try { // Gửi lệnh xuống Kotlin String test = await platform.invokeMethod('openFlutterModule'); } catch (e) { print("Failed to invoke method: $e"); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text( 'You have pushed the button this many times:', ), Text( '', style: Theme.of(context).textTheme.displayLarge, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: navigateToModule, tooltip: 'Increment', child: const Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. ); } } [/code] [list] [*]Файл pubspec.yaml [code]name: test_projectdescription: A new Flutter project. publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: sdk: ">=2.16.2 Подробнее здесь: [url]https://stackoverflow.com/questions/79256690/how-can-i-use-a-new-library-in-an-older-version-project[/url]