Я использую вложенный поток и метод таймера для моего приложения. Что похоже на табло изменения значений (или экрана) каждые 10 секунд и повторите. Я понятия не имею о проблемах в моем коде (он, кажется, работает хорошо), также думаю добавить часы на моем экране, которые пока не уверены, как их реализовать (снова используя stream
или с initstate
) , Пожалуйста, проверьте мой основной код и дайте мне несколько советов, чтобы устранить любые проблемы, если таковые имеются. Мое приложение использует FireBase для получения последних данных.
class OmApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'OM Fortune Branch',
debugShowCheckedModeBanner: false,
theme: ThemeData.dark(),
home: MyApp(),
);
}
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
int screen = 0;
DocumentSnapshot docs;
//Stream for screen changing in every 10 seconds
Stream<int> _stream() {
Duration interval = Duration(seconds: 10);
Stream<int> stream = Stream<int>.periodic(interval, tiktok);
return stream;
}
int tiktok(int value) {
return value;
}
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
var screenSize = MediaQuery.of(context).size;
return Scaffold(
body: Container(
//
child: Stack(
children: <Widget>[
//Settings button: Navigate to DataFeeds page
Align(
alignment: Alignment.bottomRight,
child: IconButton(
icon: Icon(
Icons.settings,
color: Colors.white70,
size: 25.0,
),
onPressed: () {
if (docs != null) {
navigateToList();
}
print("I can't find your data in firestore");
}),
),
StreamBuilder(
stream:
Firestore.instance.collection('productionrpt').snapshots(),
//stream: strm,
builder: (context, snapshot) {
if (!snapshot.hasData ||
snapshot.connectionState == ConnectionState.waiting)
return const Center(child: Text('Loading...'));
//docs = snapshot.data;
return StreamBuilder(
stream: _stream(),
initialData: 0,
builder:
(BuildContext buildcontext, AsyncSnapshot<int> snapss) {
if (snapss.connectionState == ConnectionState.waiting) {
screen = 0;
}
if (screen > 2)
screen = 0;
else
screen++;
docs = snapshot.data.documents[screen];
return prodDisplay(context, docs, screenSize.width);
},
);
})
],
)),
);
}
void navigateToList() {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return DataFeeds();
}));
}
}