Created
August 7, 2020 13:18
-
-
Save tiagolpadua/b4d7e2a759de5664cfb2c717dd0efde3 to your computer and use it in GitHub Desktop.
Dynamic Theme Changing Challange
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:bytebank/models/transfer.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:scoped_model/scoped_model.dart'; | |
import '../../main.dart'; | |
import 'file:///C:/git/mo20-082020/bytebank/lib/screens/transfer/form.dart'; | |
class TransfersList extends StatefulWidget { | |
final List<Transfer> _transfers = List(); | |
@override | |
State<StatefulWidget> createState() { | |
return TransfersListState(); | |
} | |
} | |
class TransfersListState extends State<TransfersList> { | |
@override | |
Widget build(BuildContext context) { | |
const _appBarTitle = 'Transfers'; | |
// return ScopedModelDescendant<DarkModeModel>( | |
// builder: (context, child, model) { | |
return Scaffold( | |
body: ListView.builder( | |
itemCount: widget._transfers.length, | |
itemBuilder: (context, index) { | |
final transfer = widget._transfers[index]; | |
return TransferItem(transfer); | |
}, | |
), | |
appBar: AppBar( | |
title: Text(_appBarTitle), | |
actions: <Widget>[ | |
ScopedModelDescendant<DarkModeModel>( | |
builder: (context, snapshot, model) { | |
return IconButton( | |
icon: Icon(Icons.lightbulb_outline), | |
onPressed: () { | |
model.toggle(); | |
}, | |
); | |
} | |
), | |
], | |
), | |
floatingActionButton: FloatingActionButton( | |
child: Icon(Icons.add), | |
onPressed: () { | |
final Future future = Navigator.push( | |
context, | |
MaterialPageRoute( | |
builder: (context) { | |
return TransferForm(); | |
}, | |
), | |
); | |
future.then( | |
(transferReceived) { | |
debugPrint('arrived at then of the future'); | |
debugPrint('$transferReceived'); | |
if (transferReceived != null) { | |
setState( | |
() => widget._transfers.add(transferReceived), | |
); | |
} | |
}, | |
); | |
}, | |
), | |
// ); | |
// } | |
); | |
} | |
} | |
class TransferItem extends StatelessWidget { | |
final Transfer _transfer; | |
TransferItem(this._transfer); | |
@override | |
Widget build(BuildContext context) { | |
return Card( | |
child: ListTile( | |
leading: Icon(Icons.monetization_on), | |
title: Text(_transfer.value.toString()), | |
subtitle: Text(_transfer.accountNumber.toString()), | |
), | |
); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:bytebank/screens/transfer/list.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:scoped_model/scoped_model.dart'; | |
void main() => runApp(BytebankApp()); | |
class BytebankApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return ScopedModel<DarkModeModel>( | |
model: DarkModeModel(), | |
child: ScopedModelDescendant<DarkModeModel>( | |
builder: (context, child, model) => MaterialApp( | |
theme: model.darkmode ? ThemeData.dark() : defaultTheme(), | |
home: Scaffold( | |
body: TransfersList(), | |
), | |
), | |
), | |
); | |
} | |
} | |
class DarkModeModel extends Model { | |
bool darkmode = false; | |
void toggle() { | |
darkmode = !darkmode; | |
debugPrint('Dark mode is now $darkmode'); | |
notifyListeners(); | |
} | |
} | |
ThemeData defaultTheme() { | |
return ThemeData( | |
primaryColor: Colors.green[900], | |
accentColor: Colors.blueAccent[700], | |
buttonTheme: ButtonThemeData( | |
buttonColor: Colors.blueAccent[700], | |
textTheme: ButtonTextTheme.primary, | |
), | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment