标签: bloc

Flutter BLoC:在 build() 方法中的 StreamBuilder 中的 Navigator.pop

我遵循 BLoC 模式并订阅流,并对构建方法中的状态变化做出反应。加载数据后,我想关闭屏幕。

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Bloc'),
      ),
      body: SafeArea(
        child: StreamBuilder<UserState>(
          stream: _userBloc.user,
          initialData: UserInitState(),
          builder: (context, snapshot) {
            if (snapshot.data is UserInitState) {
              return _buildInit();
            }
            if (snapshot.data is UserDataState) {
              Navigator.pop(context, true);
              return Container();
            }
            if (snapshot.data is UserLoadingState) {
              return _buildLoading();
            }
          },
        ),
      ),
    );
  } 
Run Code Online (Sandbox Code Playgroud)

当我Navigator.pop(context, true);使用build()方法时,我得到:

I/flutter ( 4360): ??? EXCEPTION CAUGHT BY ANIMATION LIBRARY ??????????????????????????????????????????????????????????
I/flutter ( 4360): The following …
Run Code Online (Sandbox Code Playgroud)

flutter bloc

11
推荐指数
2
解决办法
4659
查看次数

在 dispose 方法中访问 BlocProvider.of&lt;Bloc&gt;(context)

有人知道我该怎么做吗?

我的代码:

  @override
  void dispose() {
    final FiltersBloc filtersBloc = 
       BlocProvider.of<FiltersBloc>(context);
    super.dispose();
  }
Run Code Online (Sandbox Code Playgroud)

错误是:

flutter:         BlocProvider.of() called with a context that does not contain a Bloc of type FiltersBloc.
flutter:         No ancestor could be found starting from the context that was passed to
flutter: BlocProvider.of<FiltersBloc>().
flutter:
flutter:         This can happen if:
flutter:         1. The context you used comes from a widget above the BlocProvider.
flutter:         2. You used MultiBlocProvider and didn't explicity provide the BlocProvider types.
flutter:
flutter:         Good: BlocProvider<FiltersBloc>(builder: …
Run Code Online (Sandbox Code Playgroud)

dispose dart flutter bloc

11
推荐指数
1
解决办法
5236
查看次数

Flutter 状态管理 (BloC):无状态与有状态小部件

所以我通读Bloc了状态管理flutter

由于 Bloc 允许您下沉和流式传输(根据输入重建小部件),那么是否有可能主要使用无状态小部件来构建应用程序?

例如,假设我制作了许多单个无状态类小部件,因此几乎所有东西都被划分为自己的无状态小部件。

使用 Bloc 状态管理,我可以简单地重建某个无状态的子小部件来反映更改。

在这种方法中,我认为不需要使用有状态小部件。当然,作为一个完全的初学者flutter,我想听听这种方法是否有任何优点。

这是一个好方法吗?任何信息将不胜感激。

stateless dart flutter bloc

11
推荐指数
2
解决办法
4464
查看次数

在 BLoC 中触发初始事件

示例状态:

abstract class ExampleState extends Equatable {
  const ExampleState();
}

class LoadingState extends ExampleState {
  //
}

class LoadedState extends ExampleState {
  //
}

class FailedState extends ExampleState {
  //
}
Run Code Online (Sandbox Code Playgroud)

示例_事件:

abstract class ExampleEvent extends Equatable {
  //
}

class SubscribeEvent extends ExampleEvent {
  //
}

class UnsubscribeEvent extends ExampleEvent {
  //
}

class FetchEvent extends ExampleEvent {
  // 
}
Run Code Online (Sandbox Code Playgroud)

示例_块:

class ExampleBloc extends Bloc<ExampleEvent, ExampleState> {
  @override
  ExampleState get initialState => LoadingState();

  @override
  Stream<ExampleState> mapEventToState(
    ExampleEvent event,
  ) …
Run Code Online (Sandbox Code Playgroud)

dart flutter bloc flutter-bloc

11
推荐指数
3
解决办法
6528
查看次数

颤振测试失败。未找到编译器错误 getter 'main'

我正在尝试使用终端运行颤振测试,但收到以下错误。以下文件 C:/Users/User/AppData/Local/Temp/flutter_test_listener.e6fa92b4-6cd1-11e9-b9cb-68f728ca4610/listener.dart 在指定的目录中不存在。

这是错误:

编译器消息:file:///C:/Users/User-45/AppData/Local/Temp/flutter_test_listener.e6fa92b4-6cd1-11e9-b9cb-68f728ca4610/listener.dart:46:17:

错误:找不到 Getter:'main'。返回 test.main;

我的项目目录在另一个文件夹中。我该如何解决这个问题?谢谢

testing mockito dart flutter bloc

10
推荐指数
4
解决办法
3401
查看次数

使用 Cubit(BLoC 库)观察流?

TL;DR:有没有一种方法可以监听流并使用Cubit而不是发出状态BLoC

我正在使用BLoCFlutter 库,我们使用Cubits 进行状态管理。到目前为止,获取数据或保存数据的交互一切正常,但现在我需要使用流。就我而言,这意味着观看来自 的快照FirebaseFirestore

我尝试在互联网上搜索是否有方法观察流而Cubit不是使用BLoC,但大多数结果都指向我BLoC。我曾在另一个项目中工作过BLoC,所以我知道如何使用它来观察流,但Cubit如果有办法的话我想使用它。

以下是我在 FireStore 中观察的代码示例:

@override
  Stream<Either<Failure, List<MTalk>>> watchTalk() async* {
    const path ='path/to/talks';
    yield* firestore
        .collection(path)
        .snapshots()
        .map(
          (snap) => right<Failure, List<MTalk>>(
            snap.docs
                .map(
                    (documentSnapshot) => MTalk.fromFirestore(documentSnapshot))
                .toList(),
          ),
        )
        .onErrorReturnWith((e) {
      if (e is FirestoreException) {
        return left(RetrieveFailure(message: e.message));
      } else {
        return left(UnknownFailure(message: e.toString()));
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

使用时BLoC,只要从调用返回数据,您就可以简单地使用async* …

flutter bloc

10
推荐指数
1
解决办法
4218
查看次数

Flutter:如何模拟 Bloc

我想模拟我的集团以测试我的观点。

例如,这是我的 Bloc:

class SearchBloc extends Bloc<SearchEvent, SearchState> {
  @override
  // TODO: implement initialState
  SearchState get initialState => SearchStateUninitialized();

  @override
  Stream<SearchState> mapEventToState(SearchState currentState, SearchEvent event) async* {
    if (event is UserWrites) {
      yield (SearchStateInitialized.success(objects);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是观点:

class _SearchViewState extends State<SearchView> {
  final TextEditingController _filterController = new TextEditingController();

  @override
  void initState() {
    _filterController.addListener(() {
    widget._searchBloc.dispatch(FetchByName(_filterController.text));
     }
  }


 TextField buildAppBarTitle(BuildContext context) {
    return new TextField(
      key: Key("AppBarTextField"),
        controller: _filterController,
    );
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: …
Run Code Online (Sandbox Code Playgroud)

testing mocking flutter bloc

9
推荐指数
1
解决办法
3763
查看次数

使用 bloc 框架时如何为文本字段提供默认值

我编写了一些简单的 flutter 应用程序,它们使用有状态的小部件/表单/文本表单字段来输入和管理数据。现在我正在尝试了解如何使用 BLoC 和流构建器来完成类似的工作。但是我不知道如何为我的字段设置初始值。

我试图创建一个最简单的例子,我可以想出一个使用 bloc 的小应用程序。这只是需要一个输入到 TextField 的名称并将其回显到下一行。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Bloc Example',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  MyHomePage();

  String initialData = 'Fred';

  @override
  Widget build(BuildContext context) {

    TextEditingController _controller = new TextEditingController();

    return Scaffold(
      appBar: AppBar(title: Text('Bloc Example')),
      body: Center(
        child: Column(
          children: <Widget>[
          StreamBuilder(
            initialData: initialData,
            stream: bloc.nameStream,
              builder: (context, snapshot) {
                if …
Run Code Online (Sandbox Code Playgroud)

dart flutter bloc

9
推荐指数
1
解决办法
7439
查看次数

莫代尔底片和块

当我运行类似于以下代码的代码时,出现以下错误:使用不包含 Bloc 的上下文调用 BlocProvider.of()。

复制

BlocProvider(
          create: (context) => getIt<TheBloc>()
          child: BlocBuilder<TheBloc, TheState>(
          build: (context, state) =>
          MaterialButton(
            onPressed: () => _showModal(context),
            child: const Text('SHOW BLOC MODAL'),
),
Run Code Online (Sandbox Code Playgroud)

...

void _showModal(BuildContext context) {
  showModalBottomSheet<void>(
    context: context,
    builder: (_) {
          return MaterialButton(
               onPressed() {
                       context.bloc<TheBloc>().add(
                         TheEvent.someEvent(),
                       );
               }
              child: Text('Press button to add event to bloc')
          );
    },
  );
}
Run Code Online (Sandbox Code Playgroud)

flutter bloc flutter-bloc

9
推荐指数
1
解决办法
1万
查看次数

Flutter BLOC 和 Provider 如何注册在一起

我正在使用 BLOC 架构编写一个应用程序,并在 main.dart 中注册像这样的块提供程序:

runApp(MultiBlocProvider(providers: [
    BlocProvider<OrderBloc>(
      create: (context) {
        return OrderBloc()..add(OrderInitialEvent());
      },
    ),
    BlocProvider<AuthenticationBloc>(
      create: (context) {
        return AuthenticationBloc(userService: userService)..add(AppStarted());
      },
    ),
    ...
   ], child: MyApp()));
Run Code Online (Sandbox Code Playgroud)

现在我需要将 Provider 方法与 BLOC 一起使用,但不知道如何注册它?是否可以?谢谢

provider flutter bloc

9
推荐指数
1
解决办法
2891
查看次数

标签 统计

bloc ×10

flutter ×10

dart ×5

flutter-bloc ×2

testing ×2

dispose ×1

mocking ×1

mockito ×1

provider ×1

stateless ×1