Определить, покидает ли пользователь текущую страницу во Флаттере? - PullRequest
0 голосов
/ 29 октября 2018

Есть ли способ определить, покидает ли пользователь текущую страницу? Я не думаю, что WidgetsBinding будет работать, потому что он обрабатывает эти события сам по себе. Итак, есть ли у кого-нибудь решение? Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

У меня есть простое решение, если под «уходом со страницы» вы подразумеваете, что пользователь «возвращается» с этой страницы. Следующее решение не будет работать, если вы также хотите получать уведомления, если пользователь открывает другую страницу перед текущей.

Для первого случая вы можете использовать WillPopScope . Это класс, который уведомляет вас, когда включается ModalRoute (внутренне используемый Navigator). Это даже оставляет вам выбор: хотите ли вы, чтобы это произошло?

Просто оберните второй экран Scaffold в WillPopScope.

return WillPopScope(
  onWillPop: () async {
    // You can do some work here.
    // Returning true allows the pop to happen, returning false prevents it.
    return true;
  },
  child: ... // Your Scaffold goes here.
);
0 голосов
/ 29 октября 2018

согласно вашему описанию, я думаю, что вы хотите отслеживать своего пользователя, если пользователь нажмет кнопку назад или вернется к предыдущему экрану.

Может Следующий пример поможет вам найти решение.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: EventRow(),
    );
  }
}


class EventRow extends StatelessWidget {


  @override
  Widget build (BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text("Demo"),
      ),
      body: Center(
        child: Container(
          child: new RaisedButton(
            onPressed: (){
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => SecondScreen()),
              );
              },
            child: Text("Goto Second Scrren"),
          ),
        ),
      ),
    );
  }

}


class SecondScreen extends StatefulWidget {
  @override
  _SecondScreenState createState() => _SecondScreenState();
}

class _SecondScreenState extends State<SecondScreen> {

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    print("Back To old Screen");
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: new Center(
        child: new Container(
          child: new RaisedButton(
              child: Text("Goto First Scrren"),
              onPressed: (){
                Navigator.pop(context);
              }
          ),
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...