Flutter集成Qt功能插件qt_common_sdk的使用

Flutter集成Qt功能插件qt_common_sdk的使用

本文将详细介绍如何在Flutter项目中集成qt_common_sdk插件,并展示完整的示例代码。

简介

qt_common_sdk插件可以帮助开发者在Flutter应用中集成Qt的功能。通过该插件,您可以实现诸如事件跟踪、属性设置等高级功能。

步骤

1. 添加依赖

首先,在pubspec.yaml文件中添加qt_common_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  qt_common_sdk: ^1.0.0

2. 初始化SDK

main.dart文件中初始化qt_common_sdk插件。以下是一个简单的初始化示例:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:qt_common_sdk/qt_common_sdk.dart';
import 'package:qt_common_sdk_example/page/auto_track_page.dart';
import 'package:qt_common_sdk_example/page/auto_track_page_component.dart';
import 'page/auto_track_page_a.dart';
import 'page/auto_track_page_b.dart';
import 'page/auto_track_page_skip.dart';

const kAndroidUserAgent = 
    'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36';

String selectedUrl = 'file:///android_asset/index.html';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: '/',
      routes: {
        '/': (_) => const MainPage(title: 'Flutter Demo'),
        '/auto_track': (context) => AutoTrackPage(),
        '/auto_track_a': (context) => AutoTrackPageA(username: ''),
        '/auto_track_b': (context) => AutoTrackPageB(),
        '/auto_track_skip': (context) => AutoTrackPageSkip(),
        '/auto_track_component': (context) => AutoTrackPageComponent(),
      },
      navigatorObservers: QTTrackNavigationObserver.wrap([]),
    );
  }
}

3. 配置和使用SDK

接下来,配置和使用qt_common_sdk插件。以下是在MainPage中配置和使用的示例:

class MainPage extends StatefulWidget {
  final String title;

  const MainPage({Key? key, required this.title}) : super(key: key);

  [@override](/user/override)
  _MainPageState createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  static bool sdkHasInit = false;

  static final String APP_KEY = "your_app_key";
  static final String DOMAIN = "https://your_domain";

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
    if (!sdkHasInit) {
      sdkHasInit = true;
      QTCommonSdk.setCustomDomain(DOMAIN, DOMAIN);
      QTCommonSdk.setLogEnabled(true);
      QTCommonSdk.initCommon(APP_KEY, APP_KEY, '配置发布渠道');
      
      QTAutoTrack()
          .config(QTAutoTrackConfig(
            pageConfigs: [
              QTAutoTrackPageConfig<AutoTrackPage>(
                pageName: 'auto_track',
                pagePath: '/auto_track',
                pageTitle: 'rabby test auto_track',
              ),
              QTAutoTrackPageConfig<AutoTrackPageA>(
                pageName: 'auto_track_a',
                pagePath: '/auto_track_a',
                pageTitle: 'rabby test auto_track_a',
              ),
              QTAutoTrackPageConfig<AutoTrackPageB>(
                pageName: 'auto_track_b',
                pagePath: '/auto_track_b',
                pageTitle: 'rabby test auto_track_b',
              ),
              QTAutoTrackPageConfig<AutoTrackPageSkip>(
                pageName: 'auto_track_skip',
                pagePath: '/auto_track_skip',
                pageTitle: 'rabby test auto_track_skip',
                skipMe: true
              )
            ],
            eventHandler: (model) {
              // 前置回调函数
              QTTrackLogger.i("测试页面", model);
            },
          ))
          .enable()
          .enableLog();
    }
  }

  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = (await QTCommonSdk.platformVersion)!;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Running on: $_platformVersion'),
        ),
        body: Center(
          child: GridView.count(
            primary: false,
            padding: const EdgeInsets.all(20),
            crossAxisSpacing: 20,
            mainAxisSpacing: 20,
            crossAxisCount: 3,
            children: [
              TextButton(
                style: ButtonStyle(
                  backgroundColor: MaterialStateProperty.all<Color>(Colors.purple.shade500),
                  foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
                  shape: MaterialStateProperty.all<RoundedRectangleBorder>(RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0))),
                ),
                child: Text("自动埋点测试页面"),
                onPressed: () {
                  Navigator.pushNamed(context, '/auto_track');
                },
              ),
              TextButton(
                style: ButtonStyle(
                  backgroundColor: MaterialStateProperty.all<Color>(Colors.orange.shade500),
                  foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
                  shape: MaterialStateProperty.all<RoundedRectangleBorder>(RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0))),
                ),
                child: Text("组件测试页"),
                onPressed: () {
                  Navigator.pushNamed(context, '/auto_track_component');
                },
              ),
              TextButton(
                style: ButtonStyle(
                  backgroundColor: MaterialStateProperty.all<Color>(Colors.blue),
                  foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
                  shape: MaterialStateProperty.all<RoundedRectangleBorder>(RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0))),
                ),
                child: Text("onEvent(testEkv, {name:jack, age:18,id_number:5220891219})"),
                onPressed: () async {
                  QTCommonSdk.onEvent('testEkv', {
                    'name': 'jack',
                    'age': 18,
                    'id_number': 5220891219
                  });
                },
              ),
              // 其他按钮...
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter集成Qt功能插件qt_common_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Qt功能插件qt_common_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中集成Qt功能插件 qt_common_sdk 可以实现与Qt模块的交互。以下是一个基本的步骤指南,帮助你集成和使用 qt_common_sdk 插件。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 qt_common_sdk 插件的依赖。假设 qt_common_sdk 已经发布到 pub.dev,你可以这样添加:

dependencies:
  flutter:
    sdk: flutter
  qt_common_sdk: ^1.0.0  # 使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置平台代码

qt_common_sdk 插件可能需要在 Android 和 iOS 平台上进行一些配置。具体配置步骤可以参考插件的官方文档。

Android

android/app/build.gradle 文件中,确保你已经启用了对 C++ 的支持(如果插件需要):

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    ...
}

iOS

ios/Podfile 中,你可能需要添加一些依赖项或配置。具体配置步骤可以参考插件的官方文档。

3. 导入和使用插件

在你的 Dart 代码中,导入 qt_common_sdk 插件并使用它提供的功能。

import 'package:qt_common_sdk/qt_common_sdk.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Qt Common SDK Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 调用插件的功能
              String result = await QtCommonSdk.someFunction();
              print('Result: $result');
            },
            child: Text('Call Qt Function'),
          ),
        ),
      ),
    );
  }
}

4. 调用 Qt 功能

qt_common_sdk 插件通常会提供一些方法来调用 Qt 的功能。你可以通过插件的 API 来与 Qt 模块进行交互。例如:

String result = await QtCommonSdk.someFunction();
回到顶部