Задать вопрос
@nikitasalnikov
Новичок

Как избавиться от ошибки при запуске приложения Flutter в Telegram Mini App?

Всем здравствуйте. Нужна помощь, подсказка или возможное решение проблемы.
Собственно сама проблема заключается в том, что при запуске приложения Flutter в через Telegram Bot как Telegram Mini App, появляется это:
Page Not Found

GoException: no routes for location: tgWebAppData=query_id%3DAAEZhREwAAAAABmFETBM12E3%26user%3D%257B%2522id%2522%253A806454553%252C%2522first_name%2522%253A%2522nik%2522%252C%2522last_name%2522%253A%2522Alex%2520%25F0%259F%2590%2588%25E2%2580%258D%25E2%25AC%259B%2522%252C%2522username%2522%253A%2522nikitasalnikov1788%2522%252C%2522language_code%2522%253A%2522ru%2522%252C%2522allows_write_to_pm%2522%253Atrue%257D%26auth_date%3D1731143638%26hash%3D8519149776b7756ef83550af8e26cfedba0c44baf637141f98116700c33aaa2e&tgWebAppVersion=7.10&tgWebAppPlatform=tdesktop&tgWebAppThemeParams=%7B%22accent_text_color%22%3A%22%23168acd%22%2C%22bg_color%22%3A%22%23ffffff%22%2C%22bottom_bar_bg_color%22%3A%22%23ffffff%22%2C%22button_color%22%3A%22%2340a7e3%22%2C%22button_text_color%22%3A%22%23ffffff%22%2C%22destructive_text_color%22%3A%22%23d14e4e%22%2C%22header_bg_color%22%3A%22%23ffffff%22%2C%22hint_color%22%3A%22%23999999%22%2C%22link_color%22%3A%22%23168acd%22%2C%22secondary_bg_color%22%3A%22%23f1f1f1%22%2C%22section_bg_color%22%3A%22%23ffffff%22%2C%22section_header_text_color%22%3A%22%23168acd%22%2C%22section_separator_color%22%3A%22%23e7e7e7%22%2C%22subtitle_text_color%22%3A%22%23999999%22%2C%22text_color%22%3A%22%23000000%22%7D

а внизу есть кнопка Home, которая собственно и открывает мое приложение.
Как мне избавиться от этого Page Not Found и GoException. Я читал информацию что телеграмм передает какие то параметры дополнительные. У себя в routes я прописывал такой код
abstract class AppNavigator {
  static final GoRouter _router = GoRouter(
    initialLocation: '/',
    routes: [
      GoRoute(path: AppRoutes.splash, builder: (context, state) => const SplashScreen(),),
      GoRoute(
        path: AppRoutes.home,
        builder: (context, state) => const HomePage(),
      ),
    ],
    redirect: (context, state){
      final queryParams = state.uri.queryParameters.containsKey('tgWebAppData');
      if (queryParams && state.uri.toString() != '/') {
        return '/';
      }
      return null;
    }
  );

  static GoRouter get router => _router;
}

это не помогает.

Также добавил в собранный командой flutter build web - index.html такой код
(function () {
      if (location.search) {
        const url = new URL(location);
        url.search = '';
        window.history.replaceState(null, '', url);
      }
    })();
  </script>

  <script src="https://telegram.org/js/telegram-web-app.js" defer=""></script>

в самом приложении Flutter использовал библиотеку telegram_web_app
в функции main добавил
try {
    if (TelegramWebApp.instance.isSupported) {
      TelegramWebApp.instance.ready();
      Future.delayed(
          const Duration(seconds: 1), TelegramWebApp.instance.expand);
    }else {
      log("Telegram Web App не поддерживается в этом окружении.");
    }
  } catch (e) {
    log("Error happened in Flutter while loading Telegram $e");
    // add delay for 'Telegram seldom not loading' bug
    await Future.delayed(const Duration(milliseconds: 200));
    main();
    return;
  }

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

само собранное веб приложение задеплоил на Vercel, так как воспользовавшись подсказкой ИИ, Github Pages не подойдет теста приложения.
Также читал эту статью Пробуем Flutter в Telegram Mini Apps
Возможно я что то не так делаю с redirect в go_router. Но у них своя реализация, у меня своя, может и не совсем правильная.
При этом открывая ссылку напрямую в браузере, приложение запускается сразу, без каких либо проблем
В общем буду рад советам, помощи, и указания на то как избавиться от ошибки, чтобы приложение сразу запускалось.
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы