Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:导航弹出时未调用构建_Flutter_Dart_Flutter Provider - Fatal编程技术网

Flutter 颤振:导航弹出时未调用构建

Flutter 颤振:导航弹出时未调用构建,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我已经使用提供者库有一段时间了,试图掌握它。 我最近遇到了一个导航问题 在我的应用程序中,我有一个“订单”,其中包含在我的提供商状态(appState)中持有的产品。订单在菜单视图中建立。然后,我使用以下代码进入“产品审查”屏幕: Navigator.push( 上下文 PageRouteBuilder( transitionDuration:transitionDuration==null ?持续时间( 毫秒:appState.settings .StandardPageNavigationD

我已经使用提供者库有一段时间了,试图掌握它。 我最近遇到了一个导航问题

在我的应用程序中,我有一个“订单”,其中包含在我的提供商状态(appState)中持有的产品。订单在菜单视图中建立。然后,我使用以下代码进入“产品审查”屏幕:

Navigator.push(
上下文
PageRouteBuilder(
transitionDuration:transitionDuration==null
?持续时间(
毫秒:appState.settings
.StandardPageNavigationDuration)//标准应用程序Duration
:过渡期,
页面生成器:(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(
孩子:视图,
值:appState,
),
), 
用户可以在订单审查屏幕中修改产品数量。例如,如果编辑了数量,则订单(在应用程序状态下保留)将更新

问题 我遇到的问题是,当用户从订单审查中单击返回时,菜单屏幕上的构建功能似乎没有被触发,因此它不会更新(尽管订单中已删除项目,但仍显示旧价格)


我不确定解决这个问题的最佳方法是什么,你有什么建议吗?

一个简单而有效的解决方案是在使用pop时调用setState(我假设这是你回到第一页所做的)

这看起来像这样:

  Navigator.push(
    context,
    PageRouteBuilder(
      transitionDuration: transitionDuration == null
          ? Duration(
              milliseconds:
                  appState.settings.standardPageNavigatoinDuration) // standard app durration
          : transitionDuration,
      pageBuilder: (_, __, ___) => Provider<TrinoAppState>.value(
        child: view,
        value: appState,
      ),
    ),
  ).whenComplete(() => setState((){})),

实际上,您只是弹出当前视图,底部视图将位于其下方。快速修复方法是使用Navigator.push/pushNamed()而不是弹出,因为它将调用initState方法..这适用于导航到视图。我的问题是手机上按了后退按钮,所以我现在不导航。对于我来说,按下后退按钮时会调用。请尝试我的示例进行确认。在我的项目中尝试了这一点,效果很好!非常感谢。
import 'dart:math';

import 'package:flutter/material.dart';

main() {
  runApp(MaterialApp(home: MyApp()));
}

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

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First page'),
      ),
      floatingActionButton: FloatingActionButton(
        backgroundColor: Colors.red,
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => SecondRoute()),
          ).whenComplete(() => print('POP'));
        },
      ),
    );
  }
}

class SecondRoute extends StatefulWidget {
  @override
  _SecondRouteState createState() => _SecondRouteState();
}

class _SecondRouteState extends State<SecondRoute> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second page'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.pop(context);
        },
      ),
    );
  }
}