小编Bor*_*ski的帖子

Flutter BLoC mapEventToState 仅在第一次为事件调用时被调用,并且不会在每次触发该事件时调用

我有CoursesTasks。每个Course都有很多Tasks。这就是为什么我在应用程序中使用不同的屏幕来显示课程列表,在点击课程后,我导航到下一个屏幕 - 任务列表。这是我onTap的课程列表方法:

                          onTap: () {
                            TasksPageLoadedEvent pageLoadedEvent =
                                TasksPageLoadedEvent(
                              courseId: state.courses[index].id,
                              truckNumber: this.truckNumber,
                            );
                            serviceLocator<TaskBloc>().add(pageLoadedEvent);
                            Routes.sailor(
                              Routes.taskScreen,
                              params: {
                                Routes.courseNumber:
                                    state.courses[index].courseNumber,
                                Routes.truckNumber: this.truckNumber,
                                Routes.courseId: state.courses[index].id,
                              },
                            );
                          }
Run Code Online (Sandbox Code Playgroud)

我创建了一个TasksPageLoadedEvent,将其传递给TaskBloc并导航到“任务”页面。

这是它TaskBloc以及它如何处理映射事件 - 状态:

@override
  Stream<TaskState> mapEventToState(
    TaskEvent event,
  ) async* {
    if (event is TasksLoadingEvent) {
      yield TasksLoadingState();
    } else if (event is TasksReloadingErrorEvent) {
      yield TasksErrorState();
    } else if (event is TasksFetchedFailureEvent) { …
Run Code Online (Sandbox Code Playgroud)

flutter bloc

6
推荐指数
1
解决办法
2922
查看次数

即使在事件重新触发后 Flutter BlocListener 也只执行一次

我正在颤振中实现Reso Coder 的简洁架构。我按照他的指南将项目划分为层并使用依赖注入。在其中一种情况下,我希望有以下场景:管理员用户登录,在其主屏幕上查看数据,对其进行编辑,然后按一个按钮,将数据保存到本地数据库 (sqflite)。保存数据后,我想显示Snackbar带有某种文本“已保存设置!”的文本。例如。这是我的代码(部分):

class AdministratorPage extends StatefulWidget {
  @override
  _AdministratorPageState createState() => _AdministratorPageState();
}

class _AdministratorPageState extends State<AdministratorPage> {
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).backgroundColor,
        centerTitle: true,
        leading: Container(),
        title: Text(AppLocalizations.of(context).translate('adminHomeScreen')),
      ),
      body: SingleChildScrollView(
        child: buildBody(context),
      ),
    );
  }

  BlocProvider<SettingsBloc> buildBody(BuildContext context) {
    return BlocProvider(
      create: (_) => serviceLocator<SettingsBloc>(),
      child: BlocListener<SettingsBloc, SettingsState>(
        listener: (context, state) {
          if (state is SettingsUpdatedState) {
            Scaffold.of(context).showSnackBar(
              SnackBar(
                content: Text(
                    AppLocalizations.of(context).translate('settingsUpdated')),
                backgroundColor: Colors.blue,
              ),
            );
          } …
Run Code Online (Sandbox Code Playgroud)

dependency-injection flutter bloc

5
推荐指数
2
解决办法
4522
查看次数

卸载应用程序后,SQLite DB 文件仍然存在

我有一个 flutter 应用程序,我在其中使用了 sqflite 数据库存储。我按照 sqflite 示例中的说明创建了一个数据库 - 我将其getDatabasesPath()用作应用程序的相对路径,然后var db = await openDatabase(path_to_db_file);. 一切正常,我可以创建表格,处理数据等等。

卸载应用程序时遇到问题。虽然仍在开发中,但我需要添加更多表、清除数据、更改列名称等。我想在卸载应用程序后删除与其关联的所有文件,并在下次安装(调试会话)时重新开始。这适用于某些设备。在某些情况下,卸载应用程序后会保留一些文件。DB 文件仍然存在。当我安装具有预期数据库更改的新版本时,它们不适用于尚未删除的数据库文件。

我想问一下,是否有一种机制可以明确告诉 android 在卸载该应用程序时删除与该应用程序关联的所有内容?

flutter sqflite

2
推荐指数
1
解决办法
960
查看次数

标签 统计

flutter ×3

bloc ×2

dependency-injection ×1

sqflite ×1