Flutter集成SDK插件se_flutter_sdk_cn的使用

Flutter集成SDK插件se_flutter_sdk_cn的使用

本项目是一个用于Flutter的新插件项目。它包含Android和/或iOS平台上的特定实现代码。

开始使用

此项目是Flutter的一个插件包的起点。插件包是一种专门的包,包括平台特定的实现代码。

若要开始Flutter开发,请查看官方文档,该文档提供了教程、示例、移动开发指导以及完整的API引用。

示例代码

以下是example/lib/main.dart文件中的完整示例代码:

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:se_flutter_sdk_cn/solar_engine_core/solar_engine.dart';
import 'package:se_flutter_sdk_cn/solar_engine_core/solar_engine_config.dart';
import 'package:se_flutter_sdk_cn/solar_engine_core/solar_engine_event_data.dart';
import 'package:se_flutter_sdk_cn/solar_engine_remote_config/remote_config.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'SolarEngine Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title, this.initialUri, this.latestUri});

  final String title;
  final String? initialUri;
  final String? latestUri;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();

  [@override](/user/override)
  void initState() {
    print("initState+++");
    _initDeepLinkListener();
  }

  Future<void> _initDeepLinkListener() async {
    // 获取初始 deep link 链接
    // final initialLink = await getInitialLink();
    // if (initialLink != null) {
    //   print("initialLink:" + initialLink);
    // }
  }
}

typedef ClickCallbackString = void Function(String result);
typedef ClickCallbackString2 = void Function(String result1, String result2);
typedef ClickCallback = void Function();

class SETextButtonItem extends StatelessWidget {
  final String title;
  final String desc;
  final ClickCallbackString tapAction;

  var _titleTxt = new TextEditingController();

  SETextButtonItem(this.title, this.desc, this.tapAction);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(12),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          TextField(
            controller: _titleTxt, // 把 TextEditingController 对象应用到 TextField 上
            decoration: InputDecoration(
              filled: true,
              fillColor: Colors.grey[200],
              hintText: desc,
            ),
          ),
          SizedBox(height: 8),
          TextButton(
            onPressed: () {
              tapAction!(_titleTxt.text);
            },
            autofocus: true,
            child: Text(
              title,
              style: TextStyle(fontSize: 18.0),
            ),
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.resolveWith((states) {
                return Colors.blue[200];
              }),
              padding: MaterialStateProperty.all(
                  EdgeInsets.only(left: 50, right: 50)),
            ),
          ),
        ],
      ),
    );
  }
}

class SEText2ButtonItem extends StatelessWidget {
  final String title;
  final String desc1;
  final String desc2;
  final ClickCallbackString2 tapAction;

  var _titleTxt1 = new TextEditingController();
  var _titleTxt2 = new TextEditingController();

  SEText2ButtonItem(this.title, this.desc1, this.desc2, this.tapAction);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(12),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              Expanded(
                child: TextField(
                  controller: _titleTxt1,
                  decoration: InputDecoration(
                    filled: true,
                    fillColor: Colors.grey[200],
                    hintText: desc1,
                  ),
                ),
              ),
              SizedBox(width: 8),
              Expanded(
                child: TextField(
                  controller: _titleTxt2,
                  decoration: InputDecoration(
                    filled: true,
                    fillColor: Colors.grey[200],
                    hintText: desc2,
                  ),
                ),
              ),
            ],
          ),
          SizedBox(height: 8),
          TextButton(
            onPressed: () {
              tapAction!(_titleTxt1.text, _titleTxt2.text);
            },
            autofocus: true,
            child: Text(
              title,
              style: TextStyle(fontSize: 18.0),
            ),
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.resolveWith((states) {
                return Colors.blue[200];
              }),
              padding: MaterialStateProperty.all(
                  EdgeInsets.only(left: 50, right: 50)),
            ),
          ),
        ],
      ),
    );
  }
}

class SEButtonItem extends StatelessWidget {
  final String title;
  final ClickCallback tapAction;

  SEButtonItem(this.title, this.tapAction);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(12),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          TextButton(
            onPressed: () {
              tapAction!();
            },
            autofocus: true,
            child: Text(
              title,
              style: TextStyle(fontSize: 18.0),
            ),
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.resolveWith((states) {
                return Colors.blue[200];
              }),
              padding: MaterialStateProperty.all(
                  EdgeInsets.only(left: 50, right: 50)),
            ),
          ),
        ],
      ),
    );
  }
}

class _MyHomePageState extends State<MyHomePage> {
  void toast(String text) {
    final snackBar = SnackBar(content: Text(text));
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }

  void onReceivedAllData(Map? config) {
    if (config != null) {
      print('Received remote config data: $config');
      // 这里可以处理配置数据
    } else {
      print('No remote config data received');
    }
  }

  late final String timerEventStr;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Padding(
          padding: EdgeInsets.only(left: 0, right: 0),
          child: CustomScrollView(
            shrinkWrap: true,
            slivers: <Widget>[
              SliverPadding(
                padding: const EdgeInsets.all(0),
                sliver: SliverList(
                  delegate: SliverChildListDelegate(
                    <Widget>[
                      SEButtonItem("Init SDK", () {
                        SolarEngine.onDeepLinkCallback((code, data) {
                          print("onDeepLinkCallback----");
                          print(code);
                          if (code == 0) {
                            print("deeplink解析成功----");
                            print(data);
                          } else {
                            print("deeplink失败----$code");
                          }
                        });

                        SolarEngine.onDelayDeepLinkCallback((code, data) {
                          print("onDelayDeepLinkCallback----");
                          print(code);
                          if (code == 0) {
                            print("deeplink解析成功----");
                            print(data);
                          } else {
                            print("deeplink失败----$code");
                          }
                        });

                        String appkey = "e62fe50b80fc6e5c";

                        SolarEngine.preInitialize(appkey);

                        SolarEngineConfig config = SolarEngineConfig();
                        config.logEnabled = true;
                        config.enable2GReporting = true;
                        config.enableDelayDeeplink = true;

                        SERemoteConfigData rcConfig = SERemoteConfigData();
                        rcConfig.enable = true;
                        rcConfig.logEnabled = true;
                        rcConfig.customIDProperties = {
                          "key": "customID",
                          "value": "androidID"
                        };
                        rcConfig.customIDEventProperties = {
                          "key": "customEventID",
                          "value": "_appStart"
                        };
                        rcConfig.customIDUserProperties = {
                          "key": "customUserID",
                          "value": "Topic"
                        };
                        config.remoteConfigData = rcConfig;

                        config.onAttributionSuccess = (data) {
                          print("onAttributionSuccess----");
                          print(data);
                          toast(data!);
                        };
                        config.onAttributionFail = (code) {
                          print("onAttributionFail----");
                          print(code);
                          toast("onAttributionFail$code");
                        };

                        SolarEngine.initializeWithCallbacK(
                          appkey, config,
                              (int? code) {
                            if (code == 0) {
                              print("初始化成功-----");
                              print(code);
                              SolarEngine.handleDeepLinkUrl("liongo://lionmobo.com/goods_detail?sedp_urlscheme=xxx&amp;sedp_link=xxx&amp;download=xxx&amp;turl_id=xxx&amp;a=1&amp;b2&amp;se_from=urlscheme");
                            } else {
                              print("初始化失败-----");
                              print(code);
                            }
                          },
                        );
                      }),
                      SETextButtonItem("asyncFetchRemoteConfig", "key", (key) {
                        SERemoteConfig().asyncFetchRemoteConfig(key, (result) {
                          print("在线参数回调-----");
                          print(result);
                          toast("result=${result!}");
                        });
                      }),
                      // 其他按钮省略...
                    ],
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter项目中集成并使用第三方SDK插件se_flutter_sdk_cn,通常涉及以下几个步骤:添加依赖、配置原生代码(如果需要)、初始化SDK以及调用SDK提供的方法。以下是一个详细的代码案例,展示如何在Flutter项目中集成并使用se_flutter_sdk_cn插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加se_flutter_sdk_cn依赖:

dependencies:
  flutter:
    sdk: flutter
  se_flutter_sdk_cn: ^最新版本号  # 替换为实际的最新版本号

然后运行flutter pub get命令来安装依赖。

2. 导入SDK并初始化

在你的Flutter项目的入口文件(通常是main.dart)中导入SDK并初始化:

import 'package:flutter/material.dart';
import 'package:se_flutter_sdk_cn/se_flutter_sdk_cn.dart';  // 导入SDK

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    // 初始化SDK,这里假设SDK需要一个初始化函数,具体根据SDK文档
    SeFlutterSdkCn.instance.initSdk('你的初始化参数');  // 替换为你的实际参数
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 集成 se_flutter_sdk_cn 示例'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 调用SDK提供的方法,这里假设有一个登录函数
              SeFlutterSdkCn.instance.login('用户名', '密码').then((result) {
                // 处理登录结果
                print('登录结果: $result');
              }).catchError((error) {
                // 处理错误
                print('登录错误: $error');
              });
            },
            child: Text('登录'),
          ),
        ),
      ),
    );
  }
}

3. 配置原生代码(如果需要)

有些SDK可能需要在原生代码(iOS和Android)中进行额外的配置。由于se_flutter_sdk_cn的具体配置可能依赖于SDK的具体版本和功能,这里无法给出具体的原生代码配置。通常,SDK的官方文档会提供详细的配置说明。

4. 处理回调和事件

根据SDK的功能,你可能需要处理回调和事件。在上面的代码中,我们通过.then().catchError()来处理登录的异步结果。

注意事项

  • 确保你使用的se_flutter_sdk_cn版本与Flutter SDK版本兼容。
  • 仔细阅读并遵循SDK的官方文档,因为不同版本的SDK可能有不同的初始化和配置要求。
  • 如果SDK提供了更多的功能,如用户注册、数据同步等,你可以参考SDK的API文档来调用相应的方法。

示例总结

上面的代码展示了如何在Flutter项目中集成并使用se_flutter_sdk_cn插件。实际使用时,你需要根据SDK的具体文档来调整初始化参数和方法调用。如果遇到问题,可以查阅SDK的官方文档或寻求社区的帮助。

回到顶部