dartway_telegram 0.1.1
dartway_telegram: ^0.1.1 copied to clipboard
Telegram Mini App integration for DartWay apps: initialize the Telegram WebApp, read its safe-area insets and the Telegram user id. Optional by design.
DartWay Telegram #
Telegram Mini App integration for DartWay apps: announce the app to Telegram, apply the viewport options, and read the safe-area insets, the client platform and the Telegram user id.
A plugin, not a framework feature #
dartway_flutter knows nothing about Telegram — it knows only what a DwPlugin
is. The framework's config has no business carrying a vendor's name, and an app
that is not a Mini App should not download a Telegram SDK to get a bootstrap
runner.
Declare the plugin at startup:
DwFlutter(
config: DwConfig(/* ... */),
plugins: [
DwTelegramWebApp.create(
config: const DwTelegramWebAppConfig(requestFullScreen: true),
),
],
);
…and reach it anywhere as dw.plugins.telegram:
final insets = dw.plugins.telegram.safeAreaInset;
if (dw.plugins.telegram.isRunningInTelegram) { ... }
That accessor is an extension declared in this package, not in the
framework. So you get the ergonomics of an ambient service with none of the
coupling: dw.plugins.telegram exists only for apps that chose Telegram.
(dw itself is the core instance your app declares once at startup — no DartWay package
exports it as a global.)
Everywhere else it is inert #
DwTelegramWebApp.create() returns the real bridge on web and a stub on mobile
and desktop, so you declare Telegram once and still ship every platform.
And on plain web — the same build, just opened in a browser instead of in
Telegram — every getter answers as if Telegram were absent rather than throwing.
isRunningInTelegram tells you which world you are in.
Do not ask Telegram about the device #
platform is Telegram's client, not the user's device. Outside Telegram there
is no Telegram to ask, and the answer is null — even on an iPhone. Ask Flutter
for the device and Telegram only for Telegram:
bool get isIOS => dw.plugins.telegram.isRunningInTelegram
? dw.plugins.telegram.platform == DwTelegramPlatform.ios
: defaultTargetPlatform == TargetPlatform.iOS;
Getting this backwards is a classic: an app asks Telegram for the platform on
web, gets false in Safari on an iPhone, and quietly serves the wrong controls.
telegramUserId is a hint, not a proof #
It comes from Telegram's initDataUnsafe and is not authenticated. Use it to
personalize; never to authorize. Verifying the init-data signature belongs on
the server.
Configuration #
const DwTelegramWebAppConfig(
disableVerticalSwipes: true, // a vertical drag should not dismiss the app
expand: true, // open at full height
requestFullScreen: false, // Telegram 8.0+; older clients ignore it
)