#flutter #dart #setstate #statefulwidget #flutter-state
#flutter #dart #setstate #statefulwidget #состояние flutter
Вопрос:
Я Рави. Я в значительной степени новичок в Flutter, но я не новичок в программировании. Я застрял, работая с виджетами Flutter с отслеживанием состояния. Поскольку я новичок в этом SDK, я не могу понять, почему мое состояние не обновляется. Я просто написал некоторый код, который увеличивал бы число при каждом нажатии кнопки, и я знал, что мы должны использовать виджеты с отслеживанием состояния, чтобы обновлять любые данные в режиме реального времени. но мой код работает не так, как должен. Кто-нибудь может мне помочь с этим.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
int level = 0;
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Stateful Widget'),
),
body: Center(
child: Column(
children: [
Text('$level'),
RaisedButton(
child: Text('Increment'),
onPressed: () {
setState(() {
level = level 1;
print(level);
});
},
),
],
),
)),
);
}
}
Console:
Performing hot reload...
Syncing files to device sdk gphone x86 arm...
Reloaded 1 of 513 libraries in 1,722ms.
I/flutter ( 8886): 1
Ответ №1:
Проблема связана с областью действия вашей level
переменной. Это должно быть не в вашем build
методе, а в вашем class
class _MyAppState extends State<MyApp> {
//Moved level here.
int level = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Stateful Widget'),
),
body: Center(
child: Column(
children: [
Text('$level'),
RaisedButton(
child: Text('Increment'),
onPressed: () {
setState(() {
level = level 1;
print(level);
});
},
),
],
),
),
),
);
}
}
Комментарии:
1. точно, потому что, когда вы вызываете метод,
setState()
он вызываетbuild()
метод, поэтомуlevel
переменной возвращается значение 0.