Как я могу использовать новую библиотеку в проекте старой версии?IOS

Программируем под IOS
Ответить
Anonymous
 Как я могу использовать новую библиотеку в проекте старой версии?

Сообщение Anonymous »

Я новичок в Flutter и сейчас столкнулся с ситуацией, когда мне нужно добавить функцию автоматического захвата для распознавания лиц. Однако в проекте используется более старая версия Flutter, которую невозможно обновить, поэтому я не могу интегрировать необходимую библиотеку.
Мой код
  • Файл AndoidManifest.xml

Код: Выделить всё

    package="com.example.test_project">















  • Файл build.gradle

Код: Выделить всё

   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)
)
}
}
}
}

  • Файл main.dart

Код: Выделить всё

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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»