forked from firka/student-legacy
fixed translate bugs and subject name things
This commit is contained in:
parent
93438ce3df
commit
db5a9fb197
@ -11,6 +11,7 @@ import 'package:filcnaplo/models/config.dart';
|
|||||||
import 'package:filcnaplo/theme/observer.dart';
|
import 'package:filcnaplo/theme/observer.dart';
|
||||||
import 'package:filcnaplo/theme/theme.dart';
|
import 'package:filcnaplo/theme/theme.dart';
|
||||||
import 'package:filcnaplo_kreta_api/client/client.dart';
|
import 'package:filcnaplo_kreta_api/client/client.dart';
|
||||||
|
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
@ -22,13 +23,18 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:filcnaplo_mobile_ui/common/system_chrome.dart' as mobile;
|
import 'package:filcnaplo_mobile_ui/common/system_chrome.dart' as mobile;
|
||||||
import 'package:filcnaplo_mobile_ui/screens/login/login_route.dart' as mobile;
|
import 'package:filcnaplo_mobile_ui/screens/login/login_route.dart' as mobile;
|
||||||
import 'package:filcnaplo_mobile_ui/screens/login/login_screen.dart' as mobile;
|
import 'package:filcnaplo_mobile_ui/screens/login/login_screen.dart' as mobile;
|
||||||
import 'package:filcnaplo_mobile_ui/screens/navigation/navigation_screen.dart' as mobile;
|
import 'package:filcnaplo_mobile_ui/screens/navigation/navigation_screen.dart'
|
||||||
import 'package:filcnaplo_mobile_ui/screens/settings/settings_route.dart' as mobile;
|
as mobile;
|
||||||
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.dart' as mobile;
|
import 'package:filcnaplo_mobile_ui/screens/settings/settings_route.dart'
|
||||||
|
as mobile;
|
||||||
|
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.dart'
|
||||||
|
as mobile;
|
||||||
|
|
||||||
// Desktop UI
|
// Desktop UI
|
||||||
import 'package:filcnaplo_desktop_ui/screens/navigation/navigation_screen.dart' as desktop;
|
import 'package:filcnaplo_desktop_ui/screens/navigation/navigation_screen.dart'
|
||||||
import 'package:filcnaplo_desktop_ui/screens/login/login_screen.dart' as desktop;
|
as desktop;
|
||||||
|
import 'package:filcnaplo_desktop_ui/screens/login/login_screen.dart'
|
||||||
|
as desktop;
|
||||||
import 'package:filcnaplo_desktop_ui/screens/login/login_route.dart' as desktop;
|
import 'package:filcnaplo_desktop_ui/screens/login/login_route.dart' as desktop;
|
||||||
|
|
||||||
// Providers
|
// Providers
|
||||||
@ -36,7 +42,6 @@ import 'package:filcnaplo/models/settings.dart';
|
|||||||
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/exam_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/exam_provider.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
|
|
||||||
import 'package:filcnaplo_kreta_api/providers/homework_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/homework_provider.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/message_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/message_provider.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/note_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/note_provider.dart';
|
||||||
@ -52,7 +57,12 @@ class App extends StatelessWidget {
|
|||||||
final UserProvider user;
|
final UserProvider user;
|
||||||
final DatabaseProvider database;
|
final DatabaseProvider database;
|
||||||
|
|
||||||
const App({Key? key, required this.database, required this.settings, required this.user}) : super(key: key);
|
const App(
|
||||||
|
{Key? key,
|
||||||
|
required this.database,
|
||||||
|
required this.settings,
|
||||||
|
required this.user})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -65,7 +75,8 @@ class App extends StatelessWidget {
|
|||||||
|
|
||||||
final status = StatusProvider();
|
final status = StatusProvider();
|
||||||
final kreta = KretaClient(user: user, settings: settings, status: status);
|
final kreta = KretaClient(user: user, settings: settings, status: status);
|
||||||
final timetable = TimetableProvider(user: user, database: database, kreta: kreta);
|
final timetable =
|
||||||
|
TimetableProvider(user: user, database: database, kreta: kreta);
|
||||||
final premium = PremiumProvider(settings: settings);
|
final premium = PremiumProvider(settings: settings);
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
@ -83,23 +94,44 @@ class App extends StatelessWidget {
|
|||||||
ChangeNotifierProvider<StatusProvider>(create: (_) => status),
|
ChangeNotifierProvider<StatusProvider>(create: (_) => status),
|
||||||
Provider<KretaClient>(create: (_) => kreta),
|
Provider<KretaClient>(create: (_) => kreta),
|
||||||
Provider<DatabaseProvider>(create: (context) => database),
|
Provider<DatabaseProvider>(create: (context) => database),
|
||||||
ChangeNotifierProvider<ThemeModeObserver>(create: (context) => ThemeModeObserver(initialTheme: settings.theme)),
|
ChangeNotifierProvider<ThemeModeObserver>(
|
||||||
ChangeNotifierProvider<NewsProvider>(create: (context) => NewsProvider(context: context)),
|
create: (context) =>
|
||||||
ChangeNotifierProvider<UpdateProvider>(create: (context) => UpdateProvider(context: context)),
|
ThemeModeObserver(initialTheme: settings.theme)),
|
||||||
|
ChangeNotifierProvider<NewsProvider>(
|
||||||
|
create: (context) => NewsProvider(context: context)),
|
||||||
|
ChangeNotifierProvider<UpdateProvider>(
|
||||||
|
create: (context) => UpdateProvider(context: context)),
|
||||||
|
|
||||||
// User data providers
|
// User data providers
|
||||||
ChangeNotifierProvider<GradeProvider>(create: (_) => GradeProvider(settings: settings, user: user, database: database, kreta: kreta)),
|
ChangeNotifierProvider<GradeProvider>(
|
||||||
|
create: (_) => GradeProvider(
|
||||||
|
settings: settings,
|
||||||
|
user: user,
|
||||||
|
database: database,
|
||||||
|
kreta: kreta)),
|
||||||
ChangeNotifierProvider<TimetableProvider>(create: (_) => timetable),
|
ChangeNotifierProvider<TimetableProvider>(create: (_) => timetable),
|
||||||
ChangeNotifierProvider<ExamProvider>(create: (context) => ExamProvider(context: context)),
|
ChangeNotifierProvider<ExamProvider>(
|
||||||
ChangeNotifierProvider<HomeworkProvider>(create: (context) => HomeworkProvider(context: context)),
|
create: (context) => ExamProvider(context: context)),
|
||||||
ChangeNotifierProvider<MessageProvider>(create: (context) => MessageProvider(context: context)),
|
ChangeNotifierProvider<HomeworkProvider>(
|
||||||
ChangeNotifierProvider<NoteProvider>(create: (context) => NoteProvider(context: context)),
|
create: (context) => HomeworkProvider(context: context)),
|
||||||
ChangeNotifierProvider<EventProvider>(create: (context) => EventProvider(context: context)),
|
ChangeNotifierProvider<MessageProvider>(
|
||||||
ChangeNotifierProvider<AbsenceProvider>(create: (context) => AbsenceProvider(context: context)),
|
create: (context) => MessageProvider(context: context)),
|
||||||
|
ChangeNotifierProvider<NoteProvider>(
|
||||||
|
create: (context) => NoteProvider(context: context)),
|
||||||
|
ChangeNotifierProvider<EventProvider>(
|
||||||
|
create: (context) => EventProvider(context: context)),
|
||||||
|
ChangeNotifierProvider<AbsenceProvider>(
|
||||||
|
create: (context) => AbsenceProvider(context: context)),
|
||||||
|
|
||||||
ChangeNotifierProvider<GradeCalculatorProvider>(
|
ChangeNotifierProvider<GradeCalculatorProvider>(
|
||||||
create: (_) => GradeCalculatorProvider(settings: settings, user: user, database: database, kreta: kreta)),
|
create: (_) => GradeCalculatorProvider(
|
||||||
ChangeNotifierProvider<LiveCardProvider>(create: (context) => LiveCardProvider(timetable: timetable, settings: settings))
|
settings: settings,
|
||||||
|
user: user,
|
||||||
|
database: database,
|
||||||
|
kreta: kreta)),
|
||||||
|
ChangeNotifierProvider<LiveCardProvider>(
|
||||||
|
create: (context) =>
|
||||||
|
LiveCardProvider(timetable: timetable, settings: settings))
|
||||||
],
|
],
|
||||||
child: Consumer<ThemeModeObserver>(
|
child: Consumer<ThemeModeObserver>(
|
||||||
builder: (context, themeMode, child) {
|
builder: (context, themeMode, child) {
|
||||||
@ -110,12 +142,15 @@ class App extends StatelessWidget {
|
|||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
builder: (context, child) {
|
builder: (context, child) {
|
||||||
// Limit font size scaling to 1.0
|
// Limit font size scaling to 1.0
|
||||||
double textScaleFactor = min(MediaQuery.of(context).textScaleFactor, 1.0);
|
double textScaleFactor =
|
||||||
|
min(MediaQuery.of(context).textScaleFactor, 1.0);
|
||||||
|
|
||||||
return I18n(
|
return I18n(
|
||||||
initialLocale: Locale(settings.language, settings.language.toUpperCase()),
|
initialLocale: Locale(
|
||||||
|
settings.language, settings.language.toUpperCase()),
|
||||||
child: MediaQuery(
|
child: MediaQuery(
|
||||||
data: MediaQuery.of(context).copyWith(textScaleFactor: textScaleFactor),
|
data: MediaQuery.of(context)
|
||||||
|
.copyWith(textScaleFactor: textScaleFactor),
|
||||||
child: child ?? Container(),
|
child: child ?? Container(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@ -148,7 +183,8 @@ class App extends StatelessWidget {
|
|||||||
return locale;
|
return locale;
|
||||||
},
|
},
|
||||||
onGenerateRoute: (settings) => rootNavigator(settings),
|
onGenerateRoute: (settings) => rootNavigator(settings),
|
||||||
initialRoute: user.getUsers().isNotEmpty ? "navigation" : "login",
|
initialRoute:
|
||||||
|
user.getUsers().isNotEmpty ? "navigation" : "login",
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -162,7 +198,8 @@ class App extends StatelessWidget {
|
|||||||
if (Platform.isAndroid || Platform.isIOS) {
|
if (Platform.isAndroid || Platform.isIOS) {
|
||||||
switch (route.name) {
|
switch (route.name) {
|
||||||
case "login_back":
|
case "login_back":
|
||||||
return CupertinoPageRoute(builder: (context) => const mobile.LoginScreen(back: true));
|
return CupertinoPageRoute(
|
||||||
|
builder: (context) => const mobile.LoginScreen(back: true));
|
||||||
case "login":
|
case "login":
|
||||||
return _rootRoute(const mobile.LoginScreen());
|
return _rootRoute(const mobile.LoginScreen());
|
||||||
case "navigation":
|
case "navigation":
|
||||||
@ -175,7 +212,8 @@ class App extends StatelessWidget {
|
|||||||
} else if (Platform.isWindows || Platform.isMacOS || Platform.isLinux) {
|
} else if (Platform.isWindows || Platform.isMacOS || Platform.isLinux) {
|
||||||
switch (route.name) {
|
switch (route.name) {
|
||||||
case "login_back":
|
case "login_back":
|
||||||
return CupertinoPageRoute(builder: (context) => const desktop.LoginScreen(back: true));
|
return CupertinoPageRoute(
|
||||||
|
builder: (context) => const desktop.LoginScreen(back: true));
|
||||||
case "login":
|
case "login":
|
||||||
return _rootRoute(const desktop.LoginScreen());
|
return _rootRoute(const desktop.LoginScreen());
|
||||||
case "navigation":
|
case "navigation":
|
||||||
|
@ -6,6 +6,7 @@ import 'package:filcnaplo_kreta_api/client/api.dart';
|
|||||||
import 'package:filcnaplo_kreta_api/client/client.dart';
|
import 'package:filcnaplo_kreta_api/client/client.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/grade.dart';
|
import 'package:filcnaplo_kreta_api/models/grade.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/group_average.dart';
|
import 'package:filcnaplo_kreta_api/models/group_average.dart';
|
||||||
|
import 'package:filcnaplo_kreta_api/providers/grade_provider.i18n.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class GradeProvider with ChangeNotifier {
|
class GradeProvider with ChangeNotifier {
|
||||||
@ -21,7 +22,8 @@ class GradeProvider with ChangeNotifier {
|
|||||||
|
|
||||||
// Public
|
// Public
|
||||||
List<Grade> get grades => _grades;
|
List<Grade> get grades => _grades;
|
||||||
DateTime get lastSeenDate => _settings.gradeOpeningFun ? _lastSeen : DateTime(3000);
|
DateTime get lastSeenDate =>
|
||||||
|
_settings.gradeOpeningFun ? _lastSeen : DateTime(3000);
|
||||||
String get groups => _groups;
|
String get groups => _groups;
|
||||||
List<GroupAverage> get groupAverages => _groupAvg;
|
List<GroupAverage> get groupAverages => _groupAvg;
|
||||||
|
|
||||||
@ -65,7 +67,9 @@ class GradeProvider with ChangeNotifier {
|
|||||||
_groupAvg = await userQuery.getGroupAverages(userId: userId);
|
_groupAvg = await userQuery.getGroupAverages(userId: userId);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
DateTime lastSeenDB = await userQuery.lastSeenGrade(userId: userId);
|
DateTime lastSeenDB = await userQuery.lastSeenGrade(userId: userId);
|
||||||
if (lastSeenDB.millisecondsSinceEpoch == 0 || lastSeenDB.year == 0 || !_settings.gradeOpeningFun) {
|
if (lastSeenDB.millisecondsSinceEpoch == 0 ||
|
||||||
|
lastSeenDB.year == 0 ||
|
||||||
|
!_settings.gradeOpeningFun) {
|
||||||
_lastSeen = DateTime.now();
|
_lastSeen = DateTime.now();
|
||||||
await seenAll();
|
await seenAll();
|
||||||
} else {
|
} else {
|
||||||
@ -77,13 +81,25 @@ class GradeProvider with ChangeNotifier {
|
|||||||
|
|
||||||
// good student mode, renamed subjects
|
// good student mode, renamed subjects
|
||||||
Future<void> convertBySettings() async {
|
Future<void> convertBySettings() async {
|
||||||
Map<String, String> renamedSubjects = _settings.renamedSubjectsEnabled ? await _database.userQuery.renamedSubjects(userId: _user.user!.id) : {};
|
Map<String, String> renamedSubjects = _settings.renamedSubjectsEnabled
|
||||||
|
? await _database.userQuery.renamedSubjects(userId: _user.user!.id)
|
||||||
|
: {};
|
||||||
|
|
||||||
for (Grade grade in _grades) {
|
for (Grade grade in _grades) {
|
||||||
grade.subject.renamedTo = renamedSubjects.isNotEmpty ? renamedSubjects[grade.subject.id] : null;
|
//grade.subject.renamedTo = renamedSubjects.isNotEmpty ? renamedSubjects[grade.subject.id] : null;
|
||||||
grade.value.value = _settings.goodStudent ? 5 : grade.json!["SzamErtek"] ?? 0;
|
grade.subject.renamedTo = null;
|
||||||
grade.value.valueName = _settings.goodStudent ? "Példás" : grade.json!["SzovegesErtek"] ?? "";
|
if (renamedSubjects.isNotEmpty) {
|
||||||
grade.value.shortName = _settings.goodStudent ? "Példás" : grade.json!["SzovegesErtekelesRovidNev"] ?? "";
|
grade.subject.name =
|
||||||
|
renamedSubjects[grade.subject.id] ?? grade.subject.name;
|
||||||
|
}
|
||||||
|
grade.value.value =
|
||||||
|
_settings.goodStudent ? 5 : grade.json!["SzamErtek"] ?? 0;
|
||||||
|
grade.value.valueName = _settings.goodStudent
|
||||||
|
? "Jeles".i18n
|
||||||
|
: grade.json!["SzovegesErtek"].i18n ?? "";
|
||||||
|
grade.value.shortName = _settings.goodStudent
|
||||||
|
? "Jeles".i18n
|
||||||
|
: grade.json!["SzovegesErtekelesRovidNev"].i18n ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@ -102,12 +118,16 @@ class GradeProvider with ChangeNotifier {
|
|||||||
if (grades.isNotEmpty || _grades.isNotEmpty) await store(grades);
|
if (grades.isNotEmpty || _grades.isNotEmpty) await store(grades);
|
||||||
|
|
||||||
List? groupsJson = await _kreta.getAPI(KretaAPI.groups(iss));
|
List? groupsJson = await _kreta.getAPI(KretaAPI.groups(iss));
|
||||||
if (groupsJson == null || groupsJson.isEmpty) throw "Cannot fetch Groups for User ${user.id}";
|
if (groupsJson == null || groupsJson.isEmpty)
|
||||||
|
throw "Cannot fetch Groups for User ${user.id}";
|
||||||
_groups = (groupsJson[0]["OktatasNevelesiFeladat"] ?? {})["Uid"] ?? "";
|
_groups = (groupsJson[0]["OktatasNevelesiFeladat"] ?? {})["Uid"] ?? "";
|
||||||
|
|
||||||
List? groupAvgJson = await _kreta.getAPI(KretaAPI.groupAverages(iss, _groups));
|
List? groupAvgJson =
|
||||||
if (groupAvgJson == null) throw "Cannot fetch Class Averages for User ${user.id}";
|
await _kreta.getAPI(KretaAPI.groupAverages(iss, _groups));
|
||||||
final groupAvgs = groupAvgJson.map((e) => GroupAverage.fromJson(e)).toList();
|
if (groupAvgJson == null)
|
||||||
|
throw "Cannot fetch Class Averages for User ${user.id}";
|
||||||
|
final groupAvgs =
|
||||||
|
groupAvgJson.map((e) => GroupAverage.fromJson(e)).toList();
|
||||||
await storeGroupAvg(groupAvgs);
|
await storeGroupAvg(groupAvgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
33
filcnaplo_kreta_api/lib/providers/grade_provider.i18n.dart
Normal file
33
filcnaplo_kreta_api/lib/providers/grade_provider.i18n.dart
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import 'package:i18n_extension/i18n_extension.dart';
|
||||||
|
|
||||||
|
extension Localization on String {
|
||||||
|
static final _t = Translations.byLocale("hu_hu") +
|
||||||
|
{
|
||||||
|
"en_en": {
|
||||||
|
"Elégtelen": "Fail",
|
||||||
|
"Elégséges": "Warning but passing",
|
||||||
|
"Közepes": "Passed",
|
||||||
|
"Jó": "Good",
|
||||||
|
"Jeles": "Excellent"
|
||||||
|
},
|
||||||
|
"hu_hu": {
|
||||||
|
"Elégtelen": "Elégtelen",
|
||||||
|
"Elégséges": "Elégséges",
|
||||||
|
"Közepes": "Közepes",
|
||||||
|
"Jó": "Jó",
|
||||||
|
"Jeles": "Jeles"
|
||||||
|
},
|
||||||
|
"de_de": {
|
||||||
|
"Elégtelen": "Ungenügend",
|
||||||
|
"Elégséges": "Mangelhaft",
|
||||||
|
"Közepes": "Ausreichend",
|
||||||
|
"Jó": "Befriedigend",
|
||||||
|
"Jeles": "Gut"
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
String get i18n => localize(this, _t);
|
||||||
|
String fill(List<Object> params) => localizeFill(this, params);
|
||||||
|
String plural(int value) => localizePlural(value, this, _t);
|
||||||
|
String version(Object modifier) => localizeVersion(modifier, this, _t);
|
||||||
|
}
|
@ -6,7 +6,9 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||||
|
|
||||||
class HomeworkTile extends StatelessWidget {
|
class HomeworkTile extends StatelessWidget {
|
||||||
const HomeworkTile(this.homework, {Key? key, this.onTap, this.padding, this.censored = false}) : super(key: key);
|
const HomeworkTile(this.homework,
|
||||||
|
{Key? key, this.onTap, this.padding, this.censored = false})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
final Homework homework;
|
final Homework homework;
|
||||||
final void Function()? onTap;
|
final void Function()? onTap;
|
||||||
@ -24,7 +26,8 @@ class HomeworkTile extends StatelessWidget {
|
|||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
contentPadding: const EdgeInsets.only(left: 8.0, right: 12.0),
|
contentPadding: const EdgeInsets.only(left: 8.0, right: 12.0),
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
shape:
|
||||||
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
||||||
leading: SizedBox(
|
leading: SizedBox(
|
||||||
width: 44,
|
width: 44,
|
||||||
height: 44,
|
height: 44,
|
||||||
@ -38,7 +41,8 @@ class HomeworkTile extends StatelessWidget {
|
|||||||
: Padding(
|
: Padding(
|
||||||
padding: const EdgeInsets.only(top: 2.0),
|
padding: const EdgeInsets.only(top: 2.0),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
SubjectIcon.resolveVariant(subjectName: homework.subjectName, context: context),
|
SubjectIcon.resolveVariant(
|
||||||
|
subjectName: homework.subjectName, context: context),
|
||||||
size: 28.0,
|
size: 28.0,
|
||||||
color: AppColors.of(context).text.withOpacity(.75),
|
color: AppColors.of(context).text.withOpacity(.75),
|
||||||
),
|
),
|
||||||
|
@ -6,6 +6,7 @@ import 'package:filcnaplo_mobile_ui/common/panel/panel.dart';
|
|||||||
import 'package:filcnaplo_mobile_ui/screens/news/news_tile.dart';
|
import 'package:filcnaplo_mobile_ui/screens/news/news_tile.dart';
|
||||||
import 'package:filcnaplo/models/news.dart';
|
import 'package:filcnaplo/models/news.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/screens/news/news_view.dart';
|
import 'package:filcnaplo_mobile_ui/screens/news/news_view.dart';
|
||||||
|
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:filcnaplo/api/providers/news_provider.dart';
|
import 'package:filcnaplo/api/providers/news_provider.dart';
|
||||||
@ -24,24 +25,28 @@ class NewsScreen extends StatelessWidget {
|
|||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
|
surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
|
||||||
leading: BackButton(color: AppColors.of(context).text),
|
leading: BackButton(color: AppColors.of(context).text),
|
||||||
title: Text("News", style: TextStyle(color: AppColors.of(context).text)),
|
title: Text("news".i18n,
|
||||||
|
style: TextStyle(color: AppColors.of(context).text)),
|
||||||
),
|
),
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: RefreshIndicator(
|
child: RefreshIndicator(
|
||||||
onRefresh: () => newsProvider.fetch(),
|
onRefresh: () => newsProvider.fetch(),
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
|
physics: const BouncingScrollPhysics(
|
||||||
|
parent: AlwaysScrollableScrollPhysics()),
|
||||||
itemCount: max(news.length, 1),
|
itemCount: max(news.length, 1),
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
if (news.isNotEmpty) {
|
if (news.isNotEmpty) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 24.0, vertical: 12.0),
|
||||||
child: Panel(
|
child: Panel(
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: NewsTile(
|
child: NewsTile(
|
||||||
news[index],
|
news[index],
|
||||||
onTap: () => NewsView.show(news[index], context: context, force: true),
|
onTap: () => NewsView.show(news[index],
|
||||||
|
context: context, force: true),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user