обрабатывать ссылки и перемещаться с помощью динамической c ссылок в флаттере - PullRequest
0 голосов
/ 26 февраля 2020

Я использую firebase_dynamic_links 0.5.0 в моем приложении проекта флаттера. Я использую blo c для управления состоянием, и у меня проблема с навигацией. Я обрабатываю ссылку нормально, но когда я пытаюсь перейти на другую страницу, это не работает. Я не знаю почему?

PS: я тестировал пример firebase_dynamic_links , и это нормально работает


main() {
  WidgetsFlutterBinding.ensureInitialized();

  // Production code
  ErrorWidget.builder = (FlutterErrorDetails details) => Container();


  runApp(MyApp());
}

// Класс Myapp здесь я получаю результат печать, но навигация не работает

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _authBloc = AuthBloc();

  final _progressBloc = new ProgressBloc();

  @override
  void initState() {
    super.initState();
    initDynamicLinks();
  }



  void initDynamicLinks() async {
    final PendingDynamicLinkData data =
        await FirebaseDynamicLinks.instance.getInitialLink();
    final Uri deepLink = data?.link;

    //print("hhhhhhh" + deepLink.path);

    if (deepLink != null) {
      print("Link :" + deepLink.path);

      // this line don't work 
      Navigator.pushNamed(context, '/helloworld');
    }

    FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData dynamicLink) async {
      final Uri deepLink = dynamicLink?.link;

      if (deepLink != null) {
        print("Link :" + deepLink.path);

        Navigator.pushNamed(context, '/helloworld');
      }
    }, onError: (OnLinkErrorException e) async {
      print('onLinkError');
      print(e.message);
    });
  }

  @override
  Widget build(BuildContext context) {
    ThemeData themeData = ThemeData(
      fontFamily: Constants.DEFAULT_FONT_NAME,
      textTheme: Theme.of(context)
          .textTheme
          .apply(fontFamily: Constants.DEFAULT_FONT_NAME),
      brightness: Brightness.light,
      canvasColor: Colors.black12,
      scaffoldBackgroundColor: Colors.white,
      primaryIconTheme:
          Theme.of(context).primaryIconTheme.copyWith(color: Colors.white),
      accentIconTheme:
          Theme.of(context).accentIconTheme.copyWith(color: Colors.white),
      primaryTextTheme:
          Theme.of(context).primaryTextTheme.apply(bodyColor: Colors.white),
      primaryColorLight: Colors.white,
      primaryColorBrightness: Brightness.light,
      primarySwatch: Constants.COLOR_PRIMARY,
      primaryColor: Constants.COLOR_PRIMARY,
    );

    var home = Stack(children: <Widget>[
      RootPage(),
      ProgressDialog(),
    ]);

    return ProgressProvider(
      dialog: _progressBloc,
      child: AuthBlocProvider(
        bloc: _authBloc,
        child: StoreBlocProvider(
          store: Store(),
          child: RootProvider(
            bloc: new RootBloc(),
            child: MaterialApp(
              localizationsDelegates: [
                GlobalMaterialLocalizations.delegate,
                GlobalWidgetsLocalizations.delegate,
              ],
              supportedLocales: [
                const Locale('en'), // English
                const Locale('fr'), // Hebrew
              ],
              title: 'Foodynasty',
              theme: themeData,
              debugShowCheckedModeBanner: false,
              routes: <String, WidgetBuilder>{
                '/': (BuildContext context) => home,
                '/helloworld': (BuildContext context) => RestaurantShare(
                      restaurantId: 'test',
                    ),
              },
            ),
          ),
        ),
      ),
    );
  }
}

спасибо, простите за мой плохой английский

...