我在单击浮动操作按钮时创建了一个底部工作表,它执行两个功能。
1-底部工作表弹出。
2-如果单击时底部表格的表格有效,则将数据保存到数据库中。
我正在使用冻结的集团。是当我单击浮动操作按钮时,我给 bloc 真值,一旦我填写表格,单击浮动操作按钮将有效,表格将保存到数据库,并且 bloc 的值为 false。一旦在底部工作表打开且表单未验证时再次单击该按钮,底部工作表将重新重新打开“我需要解决此问题”。当底部工作表关闭时,我给出了 bloc 错误值。
肘状态:
abstract class HomeState with _$HomeState {
const factory HomeState({
required Note inputTextValue,
required bool isClicked,
required int radioValue
}) = AddNewNoteClicked;
factory HomeState.init() => HomeState(
inputTextValue: Note(textInput: ''),
isClicked: false,
radioValue: 1,
);
}
肘码是:
class HomeCubit extends Cubit<HomeState> {
HomeCubit() : super(HomeState.init());
void addNewNoteButton({required bool isClicked}) {
//! true && valid
if (isClicked == true && state.inputTextValue.input.isRight()) {
//! make it false
//! save to database
_database();
return emit(state.copyWith(isClicked: false));
} else if (isClicked == true && state.inputTextValue.input.isLeft()) {
} else {
return emit(state.copyWith(isClicked: isClicked));
}
} }
底页代码是:
class HomePage extends StatelessWidget {
const HomePage();
@override
Widget build(BuildContext context) {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
return BlocListener<HomeCubit, HomeState>(
listener: (context, state) {
if (state.isClicked) {
_scaffoldKey.currentState!
.showBottomSheet(
(context) => const AddNewNoteBottomSheet(),
)
.closed
.then((value) {
context.read<HomeCubit>().addNewNoteButton(isClicked: false);
});
}
},
child: DefaultTabController(
length: 3,
child: Scaffold(
key: _scaffoldKey,
// add note float action button
floatingActionButton: InkWell(
onTap: () {
context.read<HomeCubit>().addNewNoteButton(isClicked: true);
},
// for float action button
// icon shape
child: Container(
// add note icon
child: Icon(
// state.showSaveIconState ? Icons.save :
Icons.add,
color: const Color(whiteColor),
size: 9.h,
),
),
),
),
),
);
}
}