#mysql #flutter
#mysql #флаттер
Вопрос:
я новичок в flutter, но на самом деле я не вижу, в чем ошибка в моем коде, сначала он продолжает показывать, что: было выдано следующее утверждение building Builder: setState() или markNeedsBuild(), вызванное во время сборки. и когда я выполняю горячую перезагрузку, появляется строка 4016 поз 12: ‘!_debugLocked’: неверно. я не знаю, что делать и почему это происходит, потому что это первый раз
class _RepresentativeUiState extends State<RepresentativeUi> {
int _currentIndex = 0;
// navy bottom pages
final _newsFeedPage = RNewsFeed();
final _profilePage = RProfile();
final _addPostPage = RAddPost();
final _libraryPage = RLibrary();
Widget _showPage = RNewsFeed();
Widget _pageChooser(int page) {
switch (page) {
case 0:
return _newsFeedPage;
break;
case 1:
return _addPostPage;
break;
case 2:
return _libraryPage;
break;
case 3:
return _profilePage;
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: CurvedNavigationBar(
index: _currentIndex,
items: <Widget>[
Icon(
FontAwesomeIcons.newspaper,
size: 30,
),
Icon(
FontAwesomeIcons.plus,
size: 30,
),
Icon(
FontAwesomeIcons.book,
size: 30,
),
Icon(
FontAwesomeIcons.user,
size: 30,
),
],
color: Colors.white,
buttonBackgroundColor: Colors.white,
backgroundColor: Color(0xff131535),
animationCurve: Curves.easeIn,
animationDuration: Duration(milliseconds: 400),
onTap: (int tappedIndex) {
setState(() {
_showPage = _pageChooser(tappedIndex);
});
},
),
body: Container(
child: _showPage,
),
);
}
}
class RNewsFeed extends StatefulWidget {
@override
_RNewsFeedState createState() => _RNewsFeedState();
}
class _RNewsFeedState extends State<RNewsFeed> {
@override
Widget build(BuildContext context) {
return Container(
child: Text('1'),
);
}
}
class RAddPost extends StatefulWidget {
@override
_RAddPostState createState() => _RAddPostState();
}
class _RAddPostState extends State<RAddPost> {
@override
Widget build(BuildContext context) {
return Container(
child: Text('2'),
);
}
}
class RLibrary extends StatefulWidget {
@override
_RLibraryState createState() => _RLibraryState();
}
class _RLibraryState extends State<RLibrary> {
@override
Widget build(BuildContext context) {
return Container(
child: Text('3'),
);
}
}
class RProfile extends StatefulWidget {
@override
_RProfileState createState() => _RProfileState();
}
class _RProfileState extends State<RProfile> {
String _name ;
@override
void initState() {
super.initState();
SharedPreferences.getInstance().then((value) => {
setState((){
value.getString('name');
})
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xff131535),
body: SingleChildScrollView(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircleAvatar(
radius: 50,
),
Text(
'$_name',
style: TextStyle(color: Colors.black),
),
],
),
),
),
);
}
}
Ответ №1:
Я считаю, что это виновник:
SharedPreferences.getInstance().then((value) => {
setState((){
value.getString('name');
})
});
Нет необходимости когда-либо вызывать setState()
in initState()
. Итак, что происходит сейчас, так это то, что во время сборки страницы setState()
пытается инициировать другой процесс сборки. Просто удалите оболочку setState value.getString('name');
.
Комментарии:
1. даже если я удалю всю инструкцию, ошибка появится снова
2. можете ли вы дать мне код того, что я должен делать именно?
3. Я действительно не могу, потому что это единственный setState(), который я вижу. Возможно, что-то не так в других вызываемых вами классах.
4. так что, по вашему мнению, я должен его удалить?
5. Да, никогда не используйте
setState()
вinitState()