mobile: Support using an account

This commit is contained in:
Elias Projahn 2020-05-11 19:22:50 +02:00
parent 8765edc257
commit 3d3d5d50a6
3 changed files with 310 additions and 36 deletions

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:musicus_common/musicus_common.dart';
import 'account_settings.dart';
import 'server_settings.dart';
class SettingsScreen extends StatelessWidget {
@ -19,46 +20,67 @@ class SettingsScreen extends StatelessWidget {
body: ListView(
children: <Widget>[
StreamBuilder<String>(
stream: settings.musicLibraryPath,
builder: (context, snapshot) {
return ListTile(
title: Text('Music library path'),
subtitle: Text(snapshot.data ?? 'Choose folder'),
isThreeLine: snapshot.hasData,
onTap: () async {
final uri =
await _platform.invokeMethod<String>('openTree');
stream: settings.musicLibraryPath,
builder: (context, snapshot) {
return ListTile(
title: Text('Music library path'),
subtitle: Text(snapshot.data ?? 'Choose folder'),
isThreeLine: snapshot.hasData,
onTap: () async {
final uri = await _platform.invokeMethod<String>('openTree');
if (uri != null) {
settings.setMusicLibraryPath(uri);
}
},
);
}),
if (uri != null) {
settings.setMusicLibraryPath(uri);
}
},
);
},
),
StreamBuilder<MusicusServerSettings>(
stream: settings.server,
builder: (context, snapshot) {
final s = snapshot.data;
stream: settings.server,
builder: (context, snapshot) {
final s = snapshot.data;
return ListTile(
title: Text('Musicus server'),
subtitle: Text(
s != null ? '${s.host}:${s.port}${s.apiPath}' : '...'),
trailing: const Icon(Icons.chevron_right),
onTap: () async {
final MusicusServerSettings result = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ServerSettingsScreen(),
),
);
return ListTile(
title: Text('Musicus server'),
subtitle:
Text(s != null ? '${s.host}:${s.port}${s.apiPath}' : '...'),
trailing: const Icon(Icons.chevron_right),
onTap: () async {
final MusicusServerSettings result = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ServerSettingsScreen(),
),
);
if (result != null) {
settings.setServer(result);
}
},
);
}),
if (result != null) {
settings.setServer(result);
}
},
);
},
),
StreamBuilder<MusicusAccountSettings>(
stream: settings.account,
builder: (context, snapshot) {
final a = snapshot.data;
return ListTile(
title: Text('Account settings'),
subtitle: Text(a != null ? a.username : 'No account'),
trailing: const Icon(Icons.chevron_right),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AccountSettingsScreen(),
),
);
},
);
},
),
],
),
);