You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
70 lines
1.8 KiB
import 'dart:io' show Platform; |
|
|
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter/cupertino.dart'; |
|
|
|
import 'package:info_tren/models/train_data.dart'; |
|
import 'package:info_tren/train_info_page/train_info_cupertino.dart'; |
|
import 'package:info_tren/train_info_page/train_info_material.dart'; |
|
|
|
mixin TrainInfoMixin { |
|
String title; |
|
bool showTrainData; |
|
TrainLookupResult lookupResult; |
|
bool requestedData; |
|
} |
|
|
|
class TrainInfo extends StatelessWidget { |
|
final int trainNumber; |
|
|
|
TrainInfo({@required this.trainNumber}); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return TrainDataWebViewAdapter( |
|
builder: (context) { |
|
if (Platform.isAndroid) { |
|
return TrainInfoMaterial(trainNumber: trainNumber,); |
|
} |
|
else if (Platform.isIOS) { |
|
return TrainInfoCupertino(trainNumber: trainNumber,); |
|
} |
|
|
|
return null; |
|
}, |
|
); |
|
} |
|
} |
|
|
|
typedef FutureDisplayCallback<T>(BuildContext context, T data); |
|
|
|
class FutureDisplay<T> extends StatelessWidget { |
|
final Future<T> future; |
|
final FutureDisplayCallback<T> builder; |
|
|
|
FutureDisplay({Key key, @required this.future, @required this.builder}): super(key: key); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return FutureBuilder( |
|
future: future, |
|
builder: (context, snapshot) { |
|
if (snapshot.hasData) return builder(context, snapshot.data); |
|
if (snapshot.hasError) throw snapshot.error; |
|
if (snapshot.connectionState == ConnectionState.done) return Container(); |
|
|
|
Widget loadingWidget; |
|
if (Platform.isAndroid) { |
|
loadingWidget = CircularProgressIndicator(); |
|
} |
|
else if (Platform.isIOS) { |
|
loadingWidget = CupertinoActivityIndicator(); |
|
} |
|
|
|
return Center( |
|
child: loadingWidget, |
|
); |
|
}, |
|
); |
|
} |
|
} |