簡體   English   中英

怎么把state改成一個塊?

[英]How to change the state in a bloc?

我剛開始研究這個集團,我有一個問題。 我需要在選擇 state 時更改顏色,根據我的邏輯,我必須執行state = Colors.red ,但不幸的是事實並非如此。 你能告訴我我應該怎么做才能改變狀態嗎?

這是我的集團-

class SumBloc extends Bloc<Color, SumState> {
  SumBloc() : super(SumNotChosen()) {
    on<Color>((event, emit) {
      final state = this.state;
      if(state is SumSelected) {
        emit(state.color) // ??????
      }
    });
  }
}

這是我的州 -

abstract class SumState {}

class SumNotChosen extends SumState{}
class SumSelected extends SumState{
  final Color color;
  SumSelected({required this.color});
}

您可以使用更簡單的腕尺來實現此功能。

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

class SumCubit extends Cubit<Color> {
  SumCubit() : super(Colors.red);
  void select() => emit(Colors.green);
  void chooseColor(Color color) => emit(color);
}

class DemoWidget extends StatelessWidget {
  const DemoWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: BlocProvider(
        create: (context) => SumCubit(),
        child: Center(
          child: BlocBuilder<SumCubit, Color>(
            builder: (context, state) {
              return ListTile(
                title: const Text('hello'),
                tileColor: state,
                onTap: () => context.read<SumCubit>().select(),
                onLongPress: () =>
                    context.read<SumCubit>().chooseColor(Colors.black),
              );
            },
          ),
        ),
      ),
    );
  }
}

使用 bloc 時,您應該監聽事件並相應地更改狀態。

sum_state.dart

part of 'sum_bloc.dart';

abstract class SumState {
  final Color? color;

  const SumState({this.color});
}

class SumInitial extends SumState {}

class SumSelected extends SumState {
  const SumSelected({required super.color});
}

sum_event.dart

part of 'sum_bloc.dart';

abstract class SumEvent {}

class ColorSelected extends SumEvent {
  final Color color;

  ColorSelected({required this.color});
}

sum_bloc.dart

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

part 'sum_event.dart';
part 'sum_state.dart';

class SumBloc extends Bloc<SumEvent, SumState> {
  SumBloc() : super(SumInitial()) {
    on<ColorSelected>((event, emit) {
      emit(SumSelected(color: event.color));
    });
  }
}

在這里你聽SumSelected事件並發出新的 state

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM