body
и FAB
являются свойствами Scaffold
. Поэтому, когда вы пытаетесь управлять состоянием body
из FAB
, он должен обрабатывать не body
, а сам Scaffold
. Посмотрите, Scaffold
расширяется StatefulWidget
, а с другой стороны, MyList
расширяется StatelessWidget
. Надеюсь, вы меня поняли.
main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyScaffold(),
theme: ThemeData(primarySwatch: Colors.green),
);
}
}
class MyScaffold extends StatefulWidget {
@override
State<StatefulWidget> createState() => MyScaffoldState();
}
class MyScaffoldState extends State {
int count = 3;
void changeCount() {
setState(() {
count = count == 3 ? 5 : 3;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("My App")),
body: MyList(count),
floatingActionButton: FloatingActionButton(
onPressed: changeCount,
child: Icon(Icons.add),
),
);
}
}
class MyList extends StatelessWidget {
final int count;
const MyList(this.count);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: count,
itemBuilder: (BuildContext context, int index) {
return Container(
margin: const EdgeInsets.all(10),
height: 30,
color: Colors.red,
);
},
);
}
}
Примечание:
Позже, когда ваши состояния станут более сложными, вы не захотите использовать setState
для управления Штаты. Как говорили другие, вы можете изучать BLo C, ChangeNotifier или все, что вам подходит.