Flutter GitHub反馈集成插件feedback_github的使用

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

Flutter GitHub反馈集成插件 feedback_github 的使用

feedback_github 是一个Flutter插件,允许用户在应用中直接提交反馈并将其作为GitHub问题存储在Firebase Storage中。以下是详细的使用指南和示例代码。

功能

  • 允许用户通过注释当前页面的截图以及添加文本的方式提供交互式反馈。
  • 将反馈发送为GitHub问题,并将图像存储在Firebase Storage中。
  • 可选地添加调试信息(包括包信息和设备信息)。

示例动画

Example Image

开始使用

步骤 1: 设置 Firebase 和 Firebase Storage

首先,按照官方文档设置 Firebase 和 Firebase Storage: https://firebase.google.com/docs/storage/flutter/start

步骤 2: 创建 GitHub Token

  1. 登录到 GitHub。
  2. 点击右上角的头像。
  3. 进入“Settings”(齿轮图标)。
  4. 在列表底部选择“Developer settings”。
  5. 选择“Personal access tokens” -> “Fine-grained tokens”。
  6. 生成新令牌:
    • 命名令牌并可选设置过期时间(最大日期是从今天起一年)。
    • 选择仅对特定仓库有访问权限,并选择你的仓库。
    • 授予仓库读写Issue的权限。
    • 生成令牌并安全保存(不要将其提交到代码库中)。

步骤 3: 包装应用

void main() {
  runApp(
    BetterFeedback(
      child: const App(),
    ),
  );
}

步骤 4: 提供反馈显示方式

BetterFeedback.of(context).showAndUploadToGitHub(
    repoUrl: "https://github.com/tempo-riz/dummy-repo",
    gitHubToken: dotenv.get("GITHUB_ISSUE_TOKEN"),
    labels: ['feedback'],
    packageInfo: true,
    deviceInfo: true,
    extraData: "Some extra data you want to add in the issue",
    onSucces: (issue) => print("success !"),
    onError: (error) => print("failed :/ $error"),
);

你也可以直接调用 uploadToGitHub() 方法,如果你不想使用面板的话(图片是可选的)。

你可以调用 BetterFeedback.of(context).hide() 来手动关闭面板。

完整示例 Demo

完整的Flutter示例可以在这里找到:完整示例

示例代码

import 'package:feedback_github/feedback_github.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

import 'package:example/firebase_options.dart';
import 'package:firebase_core/firebase_core.dart';

void main() async {
  await dotenv.load();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  // 不要忘记将MaterialApp包装在BetterFeedback小部件中:
  runApp(BetterFeedback(
    child: App(),
  ));
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Demo',
        home: Scaffold(
          appBar: AppBar(title: Text("Demo")),
          body: Center(
              child: ElevatedButton.icon(
            icon: Icon(Icons.feedback),
            label: Text("Send feedback"),
            onPressed: () {
              BetterFeedback.of(context).showAndUploadToGitHub(
                  repoUrl: "https://github.com/tempo-riz/dummy-repo",
                  gitHubToken: dotenv.get("GITHUB_ISSUE_TOKEN"),
                  labels: ['feedback'],
                  packageInfo: true,
                  deviceInfo: true,
                  extraData: "Some extra data you want to add in the issue",
                  onSucces: (issue) => print("success !"),
                  onError: (error) => print("failed :/ $error"));
            },
          )),
        ));
  }
}

配置与自定义

你可以根据需要自定义主题和本地化文本:

自定义主题

import 'package:feedback/feedback.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

void main() {
  runApp(
    BetterFeedback(
      child: const MyApp(),
      theme: FeedbackThemeData(
        background: Colors.grey,
        feedbackSheetColor: Colors.grey[50]!,
        drawColors: [
          Colors.red,
          Colors.green,
          Colors.blue,
          Colors.yellow,
        ],
      ),
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalFeedbackLocalizationsDelegate(),
      ],
      localeOverride: const Locale('en'),
    ),
  );
}

更改本地化文本

class CustomFeedbackLocalizations implements FeedbackLocalizations {
  // ...
}

class CustomFeedbackLocalizationsDelegate
    extends GlobalFeedbackLocalizationsDelegate {
  static final supportedLocales = <Locale, FeedbackLocalizations>{
    const Locale('en'): const CustomFeedbackLocalizations(),
  };
}

void main() {
  runApp(
    BetterFeedback(
      child: const MyApp(),
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        CustomFeedbackLocalizationsDelegate(),
      ],
    ),
  );
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用feedback_github插件的一个代码案例。这个插件允许用户通过GitHub Issues提交反馈。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  feedback_github: ^x.y.z  # 请替换为最新版本号

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

2. 配置GitHub OAuth应用

为了使用这个插件,你需要在GitHub上创建一个OAuth应用。访问GitHub开发者设置,然后点击“New OAuth App”来创建一个新的OAuth应用。你需要提供应用名称、描述、回调URL(可以是任意的,因为这个插件不需要它)。创建完成后,你将获得Client ID和Client Secret。

3. 在Flutter项目中配置插件

在你的Flutter项目中,你需要配置这个插件以使用你的GitHub OAuth应用的凭据。以下是一个简单的例子:

import 'package:flutter/material.dart';
import 'package:feedback_github/feedback_github.dart';

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String clientId = 'YOUR_CLIENT_ID'; // 替换为你的Client ID
  final String clientSecret = 'YOUR_CLIENT_SECRET'; // 替换为你的Client Secret
  final String repoOwner = 'your-username'; // GitHub仓库的所有者
  final String repoName = 'your-repo'; // GitHub仓库的名称

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Feedback GitHub Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              // 初始化GitHub反馈
              final feedback = FeedbackGitHub(
                clientId: clientId,
                clientSecret: clientSecret,
                repoOwner: repoOwner,
                repoName: repoName,
              );

              // 打开反馈界面
              await feedback.open(context);
            } catch (e) {
              // 处理错误
              print('Error: $e');
            }
          },
          child: Text('Submit Feedback'),
        ),
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的Flutter应用。当用户点击“Submit Feedback”按钮时,将打开一个界面,允许他们填写并提交反馈到指定的GitHub仓库的Issues中。

注意事项

  • 确保你的GitHub OAuth应用有足够的权限来创建Issues。
  • 在生产环境中,不要硬编码Client ID和Client Secret。考虑使用环境变量或安全的密钥管理服务。
  • 用户提交反馈时,可能会要求他们登录GitHub并授权你的应用。

这个代码案例展示了如何在Flutter应用中集成和使用feedback_github插件来收集用户反馈。根据你的具体需求,你可能需要调整配置和UI。

回到顶部