如何根据用户在 Flutter 中的另一个屏幕上的操作来动态显示带有文本的黑色横幅?

如何解决如何根据用户在 Flutter 中的另一个屏幕上的操作来动态显示带有文本的黑色横幅?

我的任务是让一个黑色横幅显示用户在另一个屏幕上订购商品时从同一选项卡上的屏幕返回。如果用户通过选择另一个选项卡离开然后返回到屏幕,下面的当前代码仅适当地显示黑色横幅。我需要动态呈现的部分以“if (OrderProvider.listOrderSummary.isNotEmpty)”开头。我相信这涉及使无状态小部件有状态,但这会导致错误,表明这可能不是正确的方法

class GridItems extends StatelessWidget {
  GridItems({@required this.infinityPageController});

  final InfinityPageController infinityPageController;

  @override
  Widget build(BuildContext context) {
    final List<Item> itemList = Provider.of<List<Item>>(context);
    if (itemList == null) {
       return Center(
       child: CupertinoActivityIndicator(
         radius: 20,),);
  }
  final List<Item> mapItemList = itemList.toList();
    return Column(
      children: <Widget>[
        TopMenuNavigation(
          infinityPageController: infinityPageController,title: 'ALL ITEMS',Divider(
          color: Colors.grey,Expanded(
          child: GridView.builder(
            gridDelegate:
               SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),itemCount: itemList.length,itemBuilder: (BuildContext contex,int index) {
              return Center(
                child: InkWell(
                  onTap: () {
                    Navigator.of(context)
                        .pushNamed('/order',arguments: mapItemList[index]);
                  },child: Container(
                    width: 310,margin: EdgeInsets.all(7),decoration: Boxdecoration(
                      color: Colors.white,border: Border.all(width: 1,color: Colors.grey),borderRadius: BorderRadius.all(
                        Radius.circular(7.0),child: Column(
                      children: <Widget>[
                        Container(
                          padding: EdgeInsets.only(left: 10,top: 10),width: double.infinity,child: Text('${mapItemList[index].itemName}'),Expanded(
                          child: Image.network(
                            '${mapItemList[index].imageUrl}',],);
            },if (OrderProvider.listOrderSummary.isNotEmpty)
          GestureDetector(
            onTap: () {
              Navigator.of(context).pushNamed('/review_order');
            },child: Container(
              height: 55,color: Colors.black,child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,children: <Widget>[
                  Spacer(),Text(
                    'REVIEW ORDER (${OrderProvider.listOrderSummary.length} items)',style: TextStyle(
                        fontSize: 17,color: Colors.white,fontFamily: 'OpenSans',fontWeight: FontWeight.bold),SizedBox(width: 8),Icon(
                    Icons.navigate_next,size: 35,SizedBox(
                    width: MediaQuery.of(context).size.height * 0.065,)
        else
          SizedBox(),);
  }
}

解决方法

您必须以某种方式重建您想要返回的屏幕(或其中的一部分)。这就是状态管理解决方案应该出现的地方:)

创建 BLoC 或 ValueNotifier 并使用 StreamBuilderValueListenableBuilder 重建小部件。如果您想让它变得简单,只需在标签屏幕之间的有状态小部件内创建一个共享状态,并在出现黑色横幅时调用 setState

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?