您问的是一个非常笼统的状态管理问题。我将提供一个使用布尔值和setState() 来指示加载状态的答案。这是处理状态的最原始方式。一旦你有更多的状态/页面,它会变得更加混乱。您应该阅读here 中的更多文章并选择状态管理解决方案。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: ScreenHome(),
);
}
}
class ScreenHome extends StatefulWidget {
@override
_ScreenHomeState createState() => _ScreenHomeState();
}
class _ScreenHomeState extends State<ScreenHome> {
List<int> _ids = [3,75,776,23];
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: ListView.builder(
itemCount: _ids.length,
itemBuilder: (_, index) {
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ArticlePage(_ids[index])),
);
},
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Text(_ids[index].toString()),
),
);
},
),
),
);
}
}
class ArticlePage extends StatefulWidget {
final int articleId;
const ArticlePage(this.articleId, {Key key}) : super(key: key);
@override
_ArticlePageState createState() => _ArticlePageState();
}
class _ArticlePageState extends State<ArticlePage> {
bool _loading = true;
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 1), () {
setState(() {
_loading = false;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child:
_loading ? CircularProgressIndicator() : Text("Article id: ${widget.articleId}"),
),
);
}
}