Flutter Web загружает начальную страницу первой даже при загрузке URL с # / page

Я пробую стандартное приложение для навигации, представленное здесь https://flutter.dev/docs/cookbook/navigation/named-routes. Даже если я открою браузер по адресу http: // localhost: 8080 / # / second, он построит страницу 1, а затем заменит ее на страницу 2 и даже покажет пользователю кнопку «Назад». Я действительно хочу, чтобы пользователь сразу перешел на вторую страницу, не проходя мимо. Есть идеи, пожалуйста?

Вот код снова с добавлением печати

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'Named Routes Demo',
    routes: {
      '/': (context) => FirstScreen(),
      '/second': (context) => SecondScreen(),
    },
  ));
}

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print ("Screen 1 building");
    return Scaffold(
      appBar: AppBar(
        title: Text('First Screen'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Launch second screen'),
          onPressed: () {
            // Navigate to the second screen using a named route.
            Navigator.pushNamed(context, '/second');
          },
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print ("Screen 2 building");
    return Scaffold(
      appBar: AppBar(
        title: Text("Second Screen"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('This is screen 2, go to 1!'),
        ),
      ),
    );
  }
}

person Mark    schedule 08.07.2020    source источник


Ответы (2)


Я думаю, вам следует преобразовать второй экран в StatefulWidget, чтобы добавить didChangeDependencies или initState и добавить свой Navigator.pop(context), чтобы автоматически перейти на FirstScreen

person Ali Nabel    schedule 08.07.2020
comment
Спасибо, но моя цель состоит в том, чтобы убедиться, что когда приложение запускается путем открытия http://localhost:8080/#/second, тогда Flutter строит вторую страницу напрямую, не создавая первую страницу за миллисекунду раньше. - person Mark; 09.07.2020

Вы можете установить путь маршрута по умолчанию в <FlutterProject>/web/index.html в строке 14 <base href="/">.

По умолчанию установлено значение /

person GhoSt    schedule 09.04.2021