Как я могу сохранить маршрут страницы с общими настройками на Flutter?

#flutter #sharedpreferences

#flutter #sharedpreferences

Вопрос:

Я хочу сохранить маршрут страницы в общих настройках, чтобы я мог перейти на ту же страницу после перезапуска приложения.

Комментарии:

1. Использует именованные маршруты.

Ответ №1:

Вот пример того, как вы можете выполнить простую реализацию SharedPreferences с сохранением вашего последнего маршрута с именованными маршрутами. Вы должны иметь возможность изменять его в соответствии с вашими потребностями:

 void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      initialRoute: '/',
      routes: {
        '/': (context) => SharedPrefRoutes65799959(),
        'otherView': (context) => OtherView(),
      },
    ),
  );
}


class SharedPrefRoutes65799959 extends StatefulWidget {
  @override
  _SharedPrefRoutes65799959State createState() => _SharedPrefRoutes65799959State();
}

class _SharedPrefRoutes65799959State extends State<SharedPrefRoutes65799959> {
  SharedPreferences sharedPreferences;
  Navigation navigation = Navigation();
  @override
  void initState() {
    loadLastRoute();
    super.initState();
  }

  loadLastRoute() async {
    sharedPreferences = await SharedPreferences.getInstance();
    navigation.loadLastRoute(context, sharedPreferences);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Main'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Go to OtherView'),
          onPressed: () => navigation.navigateTo(context, 'otherView'),
        ),
      ),
    );
  }
}

class OtherView extends StatefulWidget {
  @override
  _OtherViewState createState() => _OtherViewState();
}

class _OtherViewState extends State<OtherView> {
  Navigation navigation = Navigation();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OtherView'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Go to Main'),
          onPressed: () => navigation.navigateTo(context, '/'),
        ),
      ),
    );
  }
}

class Navigation {
  SharedPreferences sharedPreferences;


  Navigation(){
    loadSharedPreferences();
  }

  void loadSharedPreferences() async {
    sharedPreferences = await SharedPreferences.getInstance();
  }

  Future<void> navigateTo(context, routeName){
    return sharedPreferences.setString('currentRoute', routeName).then((value) {
      return Navigator.of(context).popAndPushNamed(routeName);
    });
  }

  Future<void> loadLastRoute(context, sharedPreferences){
    String currentRoute = sharedPreferences.getString('currentRoute');
    if(currentRoute != null amp;amp; currentRoute != '' amp;amp; currentRoute != '/')
      return Navigator.of(context).popAndPushNamed(currentRoute);

    return null;
  }
}