[Day28] Flutter - Application Click Game (part12)

前言

Hi, 我是鱼板伯爵今天要把按下萤幕时触发的事件接上去,教学内容只会撷取片段程序码,建议大家搭配完整程序码来练习。

完整程序码

需要具备知识

Count:Event

按下萤幕时IncrementEvent事件触发并把数字传进来。

part of 'count_bloc.dart';

abstract class CountEvent extends Equatable {
  const CountEvent();

  @override
  List<Object> get props => [];
}

class IncrementEvent extends CountEvent {
  final int count;

  const IncrementEvent(this.count);

  @override
  List<Object> get props => [count];
}

Count:State

将计数器切成三个阶段,初始数字、计数成功和计数失败,成功的时候就会回传加一的结果。

part of 'count_bloc.dart';

abstract class CountState extends Equatable {
  const CountState();

  @override
  List<Object> get props => [];
}

class CountInitial extends CountState {
  final int count = 0;

  @override
  List<Object> get props => [count];
}

class CountSuccess extends CountState {
  final int count;

  const CountSuccess(this.count);

  @override
  List<Object> get props => [count];
}

class CountFailure extends CountState {}

Count:Bloc

IncrementEvent事件触发时把数字传进来加一然後回传加一结果。

import 'dart:async';
import 'dart:developer';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:stunning_tribble/infrastructure/count/count_repository.dart';

part 'count_event.dart';
part 'count_state.dart';

class CountBloc extends Bloc<CountEvent, CountState> {
  CountRepository _countRepository;
  CountBloc({required CountRepository countRepository})
      : _countRepository = countRepository,
        super(CountInitial());

  @override
  Stream<CountState> mapEventToState(
    CountEvent event,
  ) async* {
    if (event is IncrementEvent) {
      yield* _mapIncrementToState(event.count);
    }
  }

  Stream<CountState> _mapIncrementToState(int _count) async* {
    final increment = await _countRepository.increment(_count);
    yield* increment.fold(
      (countFailure) async* {
        log("$countFailure");
        yield CountFailure();
      },
      (count) async* {
        yield CountSuccess(count);
      },
    );
  }
}

Note

距离游戏完成就剩最後几步了。


<<:  DAY13 - 认识与操作 firestore

>>:  DAY 16 『 改用 xib 进行界面创作 』

[Day17]程序菜鸟自学C++资料结构演算法 – 堆积实作与应用

前言:昨天讲解完了堆积的概念,今天要来实际操作一遍,在查找资料之余,有发现一个有趣的ACM程序竞赛题...

laravel 8 (一) 建立专案及资料库设定

安装专案 composer global require laravel/installer //将...

Day 03:Android 开发工具

前言 在开始写 Android 之前,想先介绍如何提升写 code 的速度, 如果从现在开始习惯,并...

JavaScript入门 Day16_阵列2

昨天讲到了阵列,那今天要讲怎麽让阵列的资料呈现在网页上 在阵列里,第一个资料的位置不是1而是0 所以...

Day 26 - Watch os 开发学习3(输入框、Picker)

在Apple watch中,我们依然可以去使用输入框 struct ContentView: Vie...