Flutter内容展示插件likeminds_feed_flutter_core的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter内容展示插件likeminds_feed_flutter_core的使用

快速链接

开始使用

LikeMinds Flutter Feed SDK为内置功能提供了一个包装层,以在单次操作中无缝集成,而无需过多配置。

尽管如此,我们还提供了高级自定义选项,可以调整所有用于提供体验的部件、屏幕和流程,使其与您现有应用程序的外观和感觉相匹配。

要开始使用,有两个主要步骤,每个步骤下还有一些子步骤。

环境设置

  1. LikeMinds仪表板生成API密钥。您可以遵循此教程
  2. 您的应用项目只需一个依赖项即可开始使用,即likeminds_feed_flutter_core,可以在这里找到。

集成SDK

  1. 在项目的pubspec.yaml文件中添加likeminds_feed_flutter_core依赖项:
dependencies:
  likeminds_feed_flutter_core: <latest> # 自动从pub.dev获取最新版本

当将LikeMinds Feed SDK集成到您的应用时,您可以通过两种方法之一来启动用户会话:

1. 使用API密钥

当您希望在前端管理LikeMinds身份验证令牌时,应该使用这种方法。 在这种情况下,您直接向LikeMinds Feed SDK提供API密钥,这将用于通过调用showFeedWithApiKey()方法从LMFeedCore初始化用户会话。

  1. 在主函数中设置LMFeedCore包,使用以下代码:
void main() async {
  // 在runApp()函数之前调用设置函数
  await LMFeedCore.instance.initialize();
  ...
  runApp(YourApp());
}
  1. 使用以下代码片段来使用您的API密钥显示Feed,这也可以用于使用传递的用户凭据登录:
// 初始化用户会话,使用响应检查任何错误
LMResponse<void> response = await LMFeedCore.instance.showFeedWithApiKey(
  apiKey: "YOUR_API_KEY",
  uuid: "USER_ID",
  userName: "USER_NAME",
);
  1. 如果上述代码片段成功响应,则可以导航到LMFeedScreen并开始在应用中使用Feed:
if (response.success) {
  MaterialPageRoute route = MaterialPageRoute(
    builder: (context) => const LMFeedScreen(),
  );

  Navigator.pushReplacement(context, route);
}

2. 不使用API密钥

当您希望在后端服务器上管理LikeMinds身份验证令牌时,应该使用这种方法。 在这种情况下,您不需要在客户端应用中暴露您的API密钥,而是由您的后端服务器负责调用initiate API以获取accessTokenrefreshToken,这些令牌将传递给showFeedWithoutApiKey()方法从LMFeedCore验证用户会话。

  1. 创建一个函数,从后端使用initiate API获取accessTokenrefreshToken
Future<(String, String)> getTokens() async {
  // 实现
  ...
  return (accessToken, refreshToken);
}
  1. 在主函数中设置LMFeedCore包,并传递LMFeedCoreCallback,该回调将在accessTokenrefreshToken过期时被调用:
void main() async {
  // 在runApp()函数之前调用设置函数
  await LMFeedCore.instance.initialize(
    lmFeedCallback: LMFeedCoreCallback(
      onAccessTokenExpiredAndRefreshed: (accessToken, refreshToken) {
        debugPrint("Access token expired and refreshed");
      },
      onRefreshTokenExpired: () async {
        // 从后端获取accessToken和refreshToken
        final (accessToken, refreshToken) = await getTokens();
        // 返回包含从后端接收到的accessToken和refreshToken的LMAuthToken
        return (LMAuthTokenBuilder()
              ..accessToken(accessToken!)
              ..refreshToken(refreshToken!))
            .build();
      },
    ),
  );
  ...
  runApp(YourApp());
}
  1. 使用getTokens()函数获取令牌以不使用API密钥登录。在收到accessTokenrefreshToken后,调用LMFeedCore.instance.showFeedWithoutApiKey()函数。
// 从后端获取accessToken和refreshToken
final (accessToken, refreshToken) = await getTokens();
LMResponse response = await LMFeedCore.instance.showFeedWithoutApiKey(
  accessToken: "YOUR_ACCESS_TOKEN",
  refreshToken: "YOUR_REFRESH_TOKEN",
);
  1. 如果上述代码片段成功响应,则可以导航到LMFeedScreen并开始在应用中使用Feed:
if (response.success) {
  MaterialPageRoute route = MaterialPageRoute(
    builder: (context) => const LMFeedScreen(),
  );

  Navigator.pushReplacement(context, route);
}

现在构建应用,并使用按钮或标签调用上述导航函数以体验LMFeed。

恭喜!您的集成已完成。

欢迎来到数字社区和社交网络的未来。

LMFeedAppbar

特性额外步骤

一些特性是可选的,需要额外配置,您可以在这里找到它们。

ProGuard设置

这仅适用于Android,在构建发布模式时需要。

要在Android的发布版本中启用媒体上传,需要在app/build.gradle中添加以下行:

minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-aws-2.1.5.pro'

// 示例
buildTypes {
  release {
    signingConfig signingConfigs.release
    minifyEnabled true
    useProguard true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-aws-2.1.5.pro'
  }
}

现在,在与app/build.gradle相同的目录下创建一个名为"proguard-aws-2.1.5.pro"的新文件,并将复制的内容粘贴到此文件中。将以下内容粘贴到此文件中:

# 这些选项是使用ProGuard和AWS SDK 2.1.5 for Android运行的应用程序所需的最小选项
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-keep class org.apache.commons.logging.**               { *; }
-keep class com.amazonaws.org.apache.commons.logging.** { *; }
-keep class com.amazonaws.services.sqs.QueueUrlHandler  { *; }
-keep class com.amazonaws.javax.xml.transform.sax.*     { public *; }
-keep class com.amazonaws.javax.xml.stream.**           { *; }
-keep class com.amazonaws.services.**.model.*Exception* { *; }
-keep class com.amazonaws.internal.**                   { *; }
-keep class org.codehaus.**                             { *; }
-keep class org.joda.time.tz.Provider                   { *; }
-keep class org.joda.time.tz.NameProvider               { *; }
-keepattributes Signature,*Annotation*,EnclosingMethod
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class com.amazonaws.** { *; }

-dontwarn com.fasterxml.jackson.databind.**
-dontwarn javax.xml.stream.events.**
-dontwarn org.codehaus.jackson.**
-dontwarn org.apache.commons.logging.impl.**
-dontwarn org.apache.http.conn.scheme.**
-dontwarn org.apache.http.annotation.**
-dontwarn org.ietf.jgss.**
-dontwarn org.joda.convert.**
-dontwarn com.amazonaws.org.joda.convert.**
-dontwarn org.w3c.dom.bootstrap.**

# SDK拆分为多个jar,因此某些类可能被引用但未使用
-dontwarn com.amazonaws.services.s3.**
-dontwarn com.amazonaws.services.sqs.**

-dontnote com.amazonaws.services.sqs.QueueUrlHandler

更多关于Flutter内容展示插件likeminds_feed_flutter_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter内容展示插件likeminds_feed_flutter_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 likeminds_feed_flutter_core 插件在 Flutter 应用中展示内容的示例代码。该插件通常用于展示类似社交媒体 feed 的内容。请注意,实际使用时你需要确保已经在 pubspec.yaml 文件中添加了该插件的依赖,并已经运行了 flutter pub get

首先,确保你的 pubspec.yaml 文件包含以下依赖:

dependencies:
  flutter:
    sdk: flutter
  likeminds_feed_flutter_core: ^最新版本号  # 请替换为实际可用的最新版本号

然后,你可以按照以下步骤在你的 Flutter 应用中使用该插件:

1. 导入插件

在你的 Dart 文件中导入插件:

import 'package:likeminds_feed_flutter_core/likeminds_feed_flutter_core.dart';

2. 配置 Feed

main.dart 或其他合适的地方配置你的 Feed。以下是一个简单的例子:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Feed Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FeedScreen(),
    );
  }
}

class FeedScreen extends StatefulWidget {
  @override
  _FeedScreenState createState() => _FeedScreenState();
}

class _FeedScreenState extends State<FeedScreen> {
  final List<FeedItem> feedItems = [
    FeedItem(
      id: '1',
      type: FeedItemType.image,
      data: FeedImageData(
        imageUrl: 'https://example.com/image1.jpg',
        caption: 'Image Caption 1',
      ),
    ),
    FeedItem(
      id: '2',
      type: FeedItemType.video,
      data: FeedVideoData(
        videoUrl: 'https://example.com/video1.mp4',
        thumbnailUrl: 'https://example.com/thumbnail1.jpg',
        caption: 'Video Caption 1',
      ),
    ),
    // 添加更多 FeedItem
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Feed Screen'),
      ),
      body: FeedView(
        feedItems: feedItems,
        onItemClicked: (FeedItem item) {
          // 处理点击事件,例如导航到详情页面
          print('Clicked on item: ${item.id}');
        },
      ),
    );
  }
}

// 定义 FeedItem 类型和相关的数据类
enum FeedItemType { image, video }

class FeedItem {
  final String id;
  final FeedItemType type;
  final dynamic data; // 使用 dynamic 以便存储不同类型的数据

  FeedItem({required this.id, required this.type, required this.data});
}

class FeedImageData {
  final String imageUrl;
  final String caption;

  FeedImageData({required this.imageUrl, required this.caption});
}

class FeedVideoData {
  final String videoUrl;
  final String thumbnailUrl;
  final String caption;

  FeedVideoData({required this.videoUrl, required this.thumbnailUrl, required this.caption});
}

// 假设 FeedView 是插件提供的组件,用于展示 Feed
// 注意:实际使用时,FeedView 的具体实现和参数可能有所不同,请参考插件文档
class FeedView extends StatelessWidget {
  final List<FeedItem> feedItems;
  final VoidCallback? onItemClicked;

  FeedView({required this.feedItems, this.onItemClicked});

  @override
  Widget build(BuildContext context) {
    // 示例代码:这里仅作为展示如何构建 UI 的框架,实际 FeedView 的使用方式请参考插件文档
    return ListView.builder(
      itemCount: feedItems.length,
      itemBuilder: (context, index) {
        final item = feedItems[index];
        return GestureDetector(
          onTap: () => onItemClicked?.call(item),
          child: Card(
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: item.type == FeedItemType.image
                  ? Image.network(item.data.toString()) // 需要转换为正确的 ImageData
                  : // 根据类型展示不同的内容,例如视频缩略图等
                    Container(
                      child: Stack(
                        children: [
                          Image.network((item.data as FeedVideoData).thumbnailUrl),
                          // 添加播放按钮等 UI 元素
                        ],
                      ),
                    ),
            ),
          ),
        );
      },
    );
  }
}

注意

  1. 上面的 FeedView 组件是一个简化的示例,实际插件可能提供了更具体的组件和 API 用于展示 Feed。
  2. FeedItemFeedImageDataFeedVideoData 类是为了示例而定义的,实际使用时请根据插件的文档进行调整。
  3. 确保你已经正确配置和初始化了插件所需的任何依赖项或服务。

请参考 likeminds_feed_flutter_core 插件的官方文档获取更详细和准确的使用指南。

回到顶部