[feat] set default starting tab (#55)

Fixes #40
This commit is contained in:
Shreyas Thirumalai 2020-04-25 17:58:30 +05:30 committed by GitHub
parent be30bcb7d8
commit 54a2d71891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 118 additions and 12 deletions

View File

@ -32,10 +32,7 @@ class _HomeState extends State<Home> {
final GlobalKey<NavigatorState> tab3 = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> tab4 = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> tab5 = GlobalKey<NavigatorState>();
final List<Widget> screens = List<Widget>();
int active = 0;
final CupertinoTabController _controller = CupertinoTabController();
_buildScreen(int index) {
// return GlProjectScreen(32221);
@ -44,7 +41,6 @@ class _HomeState extends State<Home> {
// return IssueScreen('reactjs', 'rfcs', 68, isPullRequest: true);
// return Image.asset('images/spinner.webp', width: 32, height: 32);
final auth = Provider.of<AuthModel>(context);
switch (auth.activeAccount.platform) {
case PlatformType.github:
switch (index) {
@ -203,11 +199,28 @@ class _HomeState extends State<Home> {
Widget build(BuildContext context) {
final theme = Provider.of<ThemeModel>(context);
final auth = Provider.of<AuthModel>(context);
final CupertinoTabController _controller = CupertinoTabController();
if (auth.activeAccount == null) {
return LoginScreen();
}
switch (auth.activeAccount.platform) {
case PlatformType.github:
theme.setActiveTab(theme.startTabGh);
break;
case PlatformType.gitlab:
theme.setActiveTab(theme.startTabGl);
break;
case PlatformType.bitbucket:
theme.setActiveTab(theme.startTabBb);
break;
case PlatformType.gitea:
theme.setActiveTab(theme.startTabGt);
break;
}
_controller.index = theme.active;
switch (theme.theme) {
case AppThemeType.cupertino:
return WillPopScope(
@ -227,25 +240,54 @@ class _HomeState extends State<Home> {
},
tabBar: CupertinoTabBar(
items: _navigationItems,
currentIndex: _controller.index,
onTap: (index) {
if (active == index) {
if (theme.active == index) {
getNavigatorKey(index)
.currentState
.popUntil((route) => route.isFirst);
}
active = index;
theme.setActiveTab(index);
switch (auth.activeAccount.platform) {
case PlatformType.github:
theme.setDefaultStartTabGh(index);
break;
case PlatformType.gitlab:
theme.setDefaultStartTabGl(index);
break;
case PlatformType.bitbucket:
theme.setDefaultStartTabBb(index);
break;
case PlatformType.gitea:
theme.setDefaultStartTabGt(index);
break;
}
})));
default:
return Scaffold(
body: _buildScreen(active),
body: _buildScreen(theme.active),
bottomNavigationBar: BottomNavigationBar(
selectedItemColor: theme.palette.primary,
items: _navigationItems,
currentIndex: active,
currentIndex: theme.active,
type: BottomNavigationBarType.fixed,
onTap: (int index) {
switch (auth.activeAccount.platform) {
case PlatformType.github:
theme.setDefaultStartTabGh(index);
break;
case PlatformType.gitlab:
theme.setDefaultStartTabGl(index);
break;
case PlatformType.bitbucket:
theme.setDefaultStartTabBb(index);
break;
case PlatformType.gitea:
theme.setDefaultStartTabGt(index);
break;
}
setState(() {
active = index;
theme.setActiveTab(index);
});
},
),

View File

@ -104,7 +104,6 @@ class ThemeModel with ChangeNotifier {
Brightness systemBrightness = Brightness.light;
void setSystemBrightness(Brightness v) {
// print('systemBrightness: $v');
if (v != systemBrightness) {
Future.microtask(() {
systemBrightness = v;
@ -116,6 +115,59 @@ class ThemeModel with ChangeNotifier {
int _brightnessValue = AppBrightnessType.followSystem;
int get brighnessValue => _brightnessValue;
Future<void> setActiveTab(int v) async {
_activeTab = v;
Fimber.d('write active tab: $v');
notifyListeners();
}
int _activeTab = 0;
int get active => _activeTab;
int _defaultStartTabGh = 0;
int get startTabGh => _defaultStartTabGh;
Future<void> setDefaultStartTabGh(int v) async {
_defaultStartTabGh = v;
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(StorageKeys.defaultStartTabGh, v);
Fimber.d('write default start tab for github: $v');
notifyListeners();
}
int _defaultStartTabGl = 0;
int get startTabGl => _defaultStartTabGl;
Future<void> setDefaultStartTabGl(int v) async {
_defaultStartTabGl = v;
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(StorageKeys.defaultStartTabGl, v);
Fimber.d('write default start tab for gitlab: $v');
notifyListeners();
}
int _defaultStartTabBb = 0;
int get startTabBb => _defaultStartTabBb;
Future<void> setDefaultStartTabBb(int v) async {
_defaultStartTabBb = v;
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(StorageKeys.defaultStartTabBb, v);
Fimber.d('write default start tab for bitbucket: $v');
notifyListeners();
}
int _defaultStartTabGt = 0;
int get startTabGt => _defaultStartTabGt;
Future<void> setDefaultStartTabGt(int v) async {
_defaultStartTabGt = v;
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(StorageKeys.defaultStartTabGt, v);
Fimber.d('write default start tab for gitea: $v');
notifyListeners();
}
// could be null
Brightness get brightness {
switch (_brightnessValue) {
@ -183,6 +235,14 @@ class ThemeModel with ChangeNotifier {
if (AppBrightnessType.values.contains(b)) {
_brightnessValue = b;
}
final dGh = prefs.getInt(StorageKeys.defaultStartTabGh);
_defaultStartTabGh = dGh;
final dGl = prefs.getInt(StorageKeys.defaultStartTabGl);
_defaultStartTabGl = dGl;
final dBb = prefs.getInt(StorageKeys.defaultStartTabBb);
_defaultStartTabBb = dBb;
final dGt = prefs.getInt(StorageKeys.defaultStartTabGt);
_defaultStartTabGt = dGt;
notifyListeners();
}

View File

@ -26,6 +26,10 @@ class StorageKeys {
static const codeThemeDark = 'code-theme-dark';
static const iCodeFontSize = 'code-font-size';
static const codeFontFamily = 'code-font-family';
static const defaultStartTabGh = 'default-start-tab-github';
static const defaultStartTabGl = 'default-start-tab-gitlab';
static const defaultStartTabBb = 'default-start-tab-bitbucket';
static const defaultStartTabGt = 'default-start-tab-gitea';
}
class CommonStyle {