如何在两个屏幕之间使用块模式

2023-11-26

我的 main.dart 文件如下所示。

home: MultiBlocProvider(
      providers: [
        BlocProvider<UserBloc>(
          create: (BuildContext context) =>   UserBloc()..add(GetUser(userId:"5e0b62023b75dd60e22edaad")),
        ),
         BlocProvider<TodoBloc>(
           create: (BuildContext context)=> TodoBloc()..add(AddTodoEvent()),)
      ],
      child: FirstScreen(),
    ),

我想在 FirstScreen 中按下按钮时导航到第二个屏幕。

var router = new MaterialPageRoute(
      builder: (BuildContext context){
        return BlocProvider<UserBloc>(
          create: (BuildContext context) =>   UserBloc(),
          child: SecondScreen(),
        );
      });
  Navigator.of(context).push(router);

它工作正常,但它会创建新的 UserBloc 初始状态。 我想要的是获得 UserBlog 上的当前状态。

I tried this

UserBloc userBloc = BlocProvider.of<UserBloc>(context);
BlocProvider<CounterBloc>(
  bloc: userBloc,
  child: SecondScreen()
 )

bloc 给出错误。 有什么方法可以导航到 SecondScreen 并具有相同的状态。


每次调用 BlocProvider 时,都会创建 bloc 类的新实例。

要使用相同的块实例,您需要创建它一次,并将其放在路由之前,之后您将可以通过上下文访问它。

import 'package:bloc/bloc.dart';

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<BlocSample>(
          create: (BuildContext context) => BlocSample(),
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: FirstScreen(),
      ),
    );
  }
}

class BlocSample extends Bloc<EventSample, String> {
  @override
  String get initialState => 'initial state';

  @override
  Stream<String> mapEventToState(
    EventSample event,
  ) async* {
    yield 'changed state';
  }
}

class EventSample {}

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocBuilder<BlocSample, String>(
      builder: (context, state) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(state),
                RaisedButton(
                  child: Text('change status'),
                  onPressed: () => BlocProvider.of<BlocSample>(context).add(
                    EventSample(),
                  ),
                ),
                RaisedButton(
                  child: Text('change route'),
                  onPressed: () => Navigator.of(context).push(
                    MaterialPageRoute(
                      builder: (_) => SecondScreen(),
                    ),
                  ),
                )
              ],
            ),
          ),
        );
      },
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocBuilder<BlocSample, String>(
      builder: (context, state) {
        return Scaffold(
          body: Center(child: Text(state)),
        );
      },
    );
  }
}

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在两个屏幕之间使用块模式 的相关文章

随机推荐

  • 如何使用 VBScript 判断 Excel 2007 电子表格是否打开以及是谁打开的

    如何判断 Excel 2007 电子表格是否已打开以及是谁使用 VBScript 打开的 我试图弄清楚 Excel 工作簿当前是否由另一个用户打开 并在我的脚本中返回该用户是谁 我已经弄清楚由谁来确定工作簿当前是否打开 这是一种解决方法 但
  • 计算两列中任意一列中字符串出现次数的向量化方法

    我有一个问题是similar to 这个问题 但只是足够不同 无法用相同的解决方案来解决 我有两个数据框 df1 and df2 像这样 import pandas as pd import numpy as np np random se
  • 如何下载离线副本MSDN(微软帮助文档)?

    我可以下载离线副本MSDN 微软帮助文档 吗 例如 我整天无法访问互联网 但我需要访问帮助信息 又该如何做呢 Yes 如果要简短 只需安装微软帮助查看器在其中您可以离线复制您需要的所有项目 Full instruction you can
  • 编程中的“原子”是什么意思?

    在 Effective Java 一书中 它指出 语言规范保证读或写 变量是原子的 除非变量是类型long or double JLS 17 4 7 在 Java 编程或一般编程中 原子 是什么意思 这是一个例子 假设foo是一个类型变量l
  • 在 Android Studio 上通过 CMake 将 OpenCV 添加到 Native C 代码

    我正在尝试通过 Cmake 将 Opencv 包含到 android studio 项目中的本机 C 代码中 我在网上做了一些研究 并从网上下载了FindOpenCV cmake文件并将其添加到我的android项目的app目录中 这也是
  • 实现后密封接口

    我正在做一个小项目 我遇到了这个问题 项目输出是一个包含接口的库 如果可能的话 我想实现该接口并密封其中的功能 public interface ITest void SomeMethod class A ITest public seal
  • 如何从扩展中退出 Chrome?

    我正在开发 Chrome 扩展程序 有时我需要退出浏览器进程 我尝试使用以下代码关闭所有窗口 chrome windows getCurrent function window chrome windows remove window id
  • git-clone 和结帐后钩子

    根据手册 post checkout钩子在 a 之后运行git checkout 正如预期的那样 而且经过git clone 除非你通过 no checkout 很好 现在考虑以下几点 您之前没有本地存储库git clone 挂钩在遥控器之
  • Angular 6:如何根据滚动突出显示导航栏上的元素?

    我正在 Angular 6 中制作一个页面 这是一个简单的页面 我想强调一下navbar取决于滚动 这是我的代码 sticky position sticky top 0 i ul list style type none margin 0
  • extbase 存储库 findAll() 返回结果 null

    我有几个这样的控制器 CategoryController 和 NewsController 以及类别和新闻的领域模型以及两者的存储库 在 NewsController 中 我执行如下的 dependencyInjection 与在cate
  • 如何在 React 中访问 DOM 元素? React 中的 document.getElementById() 相当于什么

    如何在react js中选择某些栏 这是我的代码 var Progressbar React createClass getInitialState function return completed this props complete
  • 为什么使用 pandas apply 时会出现 AttributeError 错误?

    我应该如何根据条件将 NaN 值转换为分类值 我在尝试转换 Nan 值时遇到错误 category gender sub category title health beauty NaN makeup lipbalm health beau
  • jQuery UI 滑块 - 根据拖动方向选择重叠滑块

    我有这个简单的 jQuery UI 滑块设置 其中包含一个范围和两个重叠的默认值 整个事情 还有一些花里胡哨的东西 可以在这个 jsfiddle 中找到 http jsfiddle net yijian XeyGS slider slide
  • pandas.read_csv:如何跳过注释行

    我想我误解了 read csv 的意图 如果我有一个文件 j 例如 notes a b c more notes 1 2 3 我怎样才能 pandas read csv 这个文件 跳过任何 注释行 我在帮助中看到不支持行的 注释 但它指示应
  • PHP 文件列出多个文件扩展名

    这是我当前的代码 files glob jpg 这很好用 但是 我想列出其他图像类型 例如 png gif 等 我可以请一些帮助来修改上面的代码以使其正常工作吗 我尝试了以下方法但没有成功 files glob jpg png gif fi
  • Web应用程序:框架还是不框架?

    我了解 PHP 并且刚刚开始使用 MySql 但计划使用 ODBC 我不需要任何书籍来解释这一点 我可能有资格开发一个简单的网站 但目标是开发相当雄心勃勃的应用程序 我想几乎所有的网络应用程序都有一些共性 比如安全性 可扩展性等 例如 我完
  • will_paginate 报告太多条目和页面

    我使用 will paginate 来显示从包含联接和 select 语句的查询返回的数据 当我对数据进行分页时 条目数等于执行 select 语句之前的条目数 即使在查询之后调用分页 并且查询包含的元素比分页报告少 sales Sale
  • 如何更改 Octave 中的工具包?

    当我执行时我的 Octave 崩溃了plot命令 我找到了一个解决方案阿萨德 易卜拉欣的回答 他提到将默认工具包切换为gnuplot 并将其更改为octave rc文件 如果我想永久进行更改 但我不清楚永久更改octaverc 当我打开我的
  • 将字符串数据从线程发送到主窗体

    在Dephi中 我创建一个线程 像这样 它会不时向主窗体发送消息 Procedure TMyThread SendLog I Integer Var Log array 0 255 of Char Begin strcopy Log PCh
  • 如何在两个屏幕之间使用块模式

    我的 main dart 文件如下所示 home MultiBlocProvider providers BlocProvider