gpt4 book ai didi

flutter - flutter_bloc:构建函数返回null

转载 作者:行者123 更新时间:2023-12-03 04:46:10 25 4
gpt4 key购买 nike

我正在用BLoC模式在Flutter中重写一个非常简单的应用程序。但是,当我尝试在应用程序中使用BLoC组件时,出现错误。

我不知道该如何解决,如果有人知道,我将非常高兴!

当我尝试在BlocListener和BlocBuilder中构建窗口小部件时,将显示此错误。

错误图片:
App image

码:

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

import '../shared/custom_card.dart';

import '../bloc/average_bloc.dart';

class ArithmeticAverageScreen extends StatefulWidget {
@override
_ArithmeticAverageScreenState createState() => _ArithmeticAverageScreenState();
}


class _ArithmeticAverageScreenState extends State<ArithmeticAverageScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('arithmetic_average_title').tr(),
),
body: BlocListener<AverageBloc, AverageState>(
listener: (context, state) {
if (state is AverageError) {
return errorDialog(state.message);
}
},
child: BlocBuilder<AverageBloc, AverageState>(
builder: (context, state) {
if (state is AverageInitial) {
return buildListViewWithCards(context);
}
},
),
),
);
}
}

Widget errorDialog(message) {
return AlertDialog(
content: Text(message).tr(),
);
}

Widget buildListViewWithCards(BuildContext context) {
TextEditingController _textFieldController = TextEditingController();

return Container(
padding: EdgeInsets.all(20.0),
child: ListView(
children: <Widget>[
CustomCard(
child: Column(
children: <Widget>[
ListTile(
leading: Icon(Icons.help),
title: Text('arithmetic_average_help').tr(),
subtitle: Text('arithmetic_average_help_content').tr(),
)
],
),
),
SizedBox(height: 16.0),
CustomCard(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('arithmetic_average_your_grades', style: Theme.of(context).textTheme.headline5).tr(),
SizedBox(height: 16.0),
Text('arithmetic_average_type_grades', style: Theme.of(context).textTheme.headline6).tr(),
SizedBox(height: 16.0),
Row(
children: <Widget>[
Container(
width: 60.0,
child: TextField(
controller: _textFieldController,
decoration: InputDecoration(
labelText: 'arithmetic_average_textfield_hint'.tr(),
hintText: '5'
),
),
),
SizedBox(width: 16.0),
RaisedButton(
onPressed: () {
submitGrade(context, _textFieldController.text);
},
child: Text('arithmetic_average_add_button').tr(),
color: Colors.teal[300],
textColor: Colors.white,
)
],
)
],
),
)
),
SizedBox(height: 16.0),
CustomCard(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('arithmetic_average_your_average', style: Theme.of(context).textTheme.headline5).tr(),
SizedBox(height: 16.0),
Center(
child: Text('???', style: Theme.of(context).textTheme.headline4)
)
],
)
)
)
],
)
);
}

void submitGrade(BuildContext context, String average) {
final averageBloc = BlocProvider.of<AverageBloc>(context);
averageBloc.add(GetArithmeticAverage(average));
}

最佳答案

您没有在BlocBuilder中返回任何小部件,只是在没有return的情况下调用了Widget函数

class _ArithmeticAverageScreenState extends State<ArithmeticAverageScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('arithmetic_average_title').tr(),
),
body: BlocListener<AverageBloc, AverageState>(
listener: (context, state) {
if (state is AverageError) {
errorDialog(state.message);
}
},
child: BlocBuilder<AverageBloc, AverageState>(
builder: (context, state) {
if (state is AverageInitial) {
return buildListViewWithCards(context); // return the widget (you didn't add `return` before
}else{
return Container();
}
},
),
),
);
}
}

关于flutter - flutter_bloc:构建函数返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62252480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com