Flutter Telegram Web App集成插件new_telegram_web_app的使用

Flutter Telegram Web App 集成插件 new_telegram_web_app 的使用

Telegram Web App

通过使用 telegram_web_app 库,可以在 Flutter 中构建 Telegram Web 应用。

telegram_web_app version

开始使用

  1. 在你的 pubspec.yaml 文件中导入库。
  2. 并在 <code>web/index.html</code> 文件中添加以下脚本:
<head>
    <script src="https://telegram.org/js/telegram-web-app.js" defer=""></script>
</head>

可以在这里查看可用的 telegram_web API 详细信息: Telegram Web App 文档 你也可以在示例项目中找到详细的例子。

开发环境设置

  1. 在 Telegram Web App 中启用调试。更多详情请查看 这篇帖子
  2. 导航到 <code>\example</code> 文件夹。
  3. 通过 Firebase 或其他托管服务部署示例应用。你可以在这里找到 Firebase 托管文档: Firebase 托管文档
  4. 在 Telegram 中创建 Web 应用。
  5. 使用网站 URL 加载 Web 应用。
  6. 你也可以通过调试使用 JavaScript 日志检查应用。更多信息请查看 这里
  7. 如需更多信息和支持,可以加入 Telegram 群组: Telegram 群组

一篇关于如何将 Web 应用部署到 Firebase 并与 Telegram Web 应用关联的文章: Telegram Mini Apps

如何使用

有一个名为 TelegramWebApp 的类,它包含所有 Telegram Web API。可以通过 <code>TelegramWebApp.instance</code> 调用这些方法。

如果你试图在 Telegram 平台之外测试,可以通过扩展该类来模拟 TelegramWebApp。或者,也可以使用 TelegramWebAppFake 对象达到相同目的。

示例代码

// 当前 Telegram 版本
Text(TelegramWebApp.instance.version)

// 与用户应用程序相关的 Telegram 颜色
Text(TelegramWebApp.instance.themeParams)

// 包含用户详细信息和用户验证哈希的对象
Text(TelegramWebApp.instance.initData.toString())

可以在示例文件夹中找到完整的 API 示例列表。如果你有任何改进或更新,请随时贡献: GitHub 仓库

注意事项

  1. 所有的 API 只能在 Telegram Web App 内部使用。你不能在平台外部使用这些 API。
  2. 在 Android 上,Web 应用有时无法加载(仅显示灰色/白色屏幕)。如果发生这种情况,有一个“hacky”的解决办法。你也可以在示例应用中找到它:
void main() async {
  try {
    if (TelegramWebApp.instance.isSupported) {
      TelegramWebApp.instance.ready();
      Future.delayed(const Duration(seconds: 1), TelegramWebApp.instance.expand);
    }
  } catch (e) {
    print("Error happened in Flutter while loading Telegram $e");
    // 添加延迟以修复 'Telegram 有时不加载' 的问题
    await Future.delayed(const Duration(milliseconds: 200));
    main();
    return;
  }

  FlutterError.onError = (details) {
    print("Flutter error happened: $details");
  };

  runApp(const MyApp());
}

示例 Demo

import 'package:example/screens/main_screen.dart';
import 'package:flutter/material.dart';
import 'package:new_telegram_web_app/telegram_web_app.dart';

void main() async {
  try {
    if (TelegramWebApp.instance.isSupported) {
      TelegramWebApp.instance.ready();
      Future.delayed(
          const Duration(seconds: 1), TelegramWebApp.instance.expand);
    }
  } catch (e) {
    print("Error happened in Flutter while loading Telegram $e");
    // 添加延迟以修复 'Telegram 有时不加载' 的问题
    await Future.delayed(const Duration(milliseconds: 200));
    main();
    return;
  }

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Telegram Web App Example',
      theme: TelegramThemeUtil.getTheme(TelegramWebApp.instance),
      home: const MainScreen(),
    );
  }
}

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

1 回复

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


new_telegram_web_app 是一个用于在 Flutter 应用中集成 Telegram Web App 的插件。Telegram Web App 允许开发者通过 Telegram 的 Web 界面与用户进行交互,而 new_telegram_web_app 插件则简化了在 Flutter 应用中使用 Telegram Web App 的过程。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 new_telegram_web_app 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  new_telegram_web_app: ^0.0.1  # 请确保使用最新版本

然后,运行 flutter pub get 来安装插件。

基本使用

  1. 初始化插件

    main.dart 或其他入口文件中,初始化 new_telegram_web_app 插件:

    import 'package:flutter/material.dart';
    import 'package:new_telegram_web_app/new_telegram_web_app.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      [@override](/user/override)
      Widget build(BuildContext context) {
        return MaterialApp(
          home: TelegramWebAppWrapper(),
        );
      }
    }
    
    class TelegramWebAppWrapper extends StatelessWidget {
      [@override](/user/override)
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Telegram Web App'),
          ),
          body: Center(
            child: TelegramWebApp(
              onInit: (TelegramWebApp webApp) {
                // Telegram Web App 初始化完成后的回调
                print('Telegram Web App initialized');
                print('User info: ${webApp.initData}');
              },
              child: Text('Hello, Telegram Web App!'),
            ),
          ),
        );
      }
    }
    
  2. 访问 Telegram Web App 的功能

    TelegramWebApp 提供了一个 webApp 对象,你可以通过它来访问 Telegram Web App 的各种功能,例如获取用户信息、发送消息等。

    TelegramWebApp(
      onInit: (TelegramWebApp webApp) {
        // 获取用户信息
        var user = webApp.initData['user'];
        print('User ID: ${user['id']}');
        print('First Name: ${user['first_name']}');
        print('Last Name: ${user['last_name']}');
    
        // 发送消息
        webApp.sendMessage('Hello from Flutter!');
      },
      child: Text('Hello, Telegram Web App!'),
    );
    
  3. 处理事件

    你还可以监听 Telegram Web App 的各种事件,例如 onEventonClose

    TelegramWebApp(
      onInit: (TelegramWebApp webApp) {
        webApp.onEvent('themeChanged', (data) {
          print('Theme changed: $data');
        });
    
        webApp.onClose(() {
          print('Web App closed');
        });
      },
      child: Text('Hello, Telegram Web App!'),
    );
    

高级功能

new_telegram_web_app 插件还支持更多高级功能,例如:

  • 自定义主题:你可以通过 webApp.setThemeParams 来设置自定义主题。
  • 显示主按钮:使用 webApp.MainButton 来控制主按钮的显示和状态。
  • 弹出窗口:使用 webApp.showPopupwebApp.showAlert 来显示弹出窗口。

示例代码

以下是一个完整的示例代码,展示了如何使用 new_telegram_web_app 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TelegramWebAppWrapper(),
    );
  }
}

class TelegramWebAppWrapper extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Telegram Web App'),
      ),
      body: Center(
        child: TelegramWebApp(
          onInit: (TelegramWebApp webApp) {
            // 获取用户信息
            var user = webApp.initData['user'];
            print('User ID: ${user['id']}');
            print('First Name: ${user['first_name']}');
            print('Last Name: ${user['last_name']}');

            // 发送消息
            webApp.sendMessage('Hello from Flutter!');

            // 监听主题变化
            webApp.onEvent('themeChanged', (data) {
              print('Theme changed: $data');
            });

            // 监听关闭事件
            webApp.onClose(() {
              print('Web App closed');
            });
          },
          child: Text('Hello, Telegram Web App!'),
        ),
      ),
    );
  }
}
回到顶部