Skip to content

Instantly share code, notes, and snippets.

@tiagolpadua
Created August 7, 2020 13:18
Show Gist options
  • Save tiagolpadua/b4d7e2a759de5664cfb2c717dd0efde3 to your computer and use it in GitHub Desktop.
Save tiagolpadua/b4d7e2a759de5664cfb2c717dd0efde3 to your computer and use it in GitHub Desktop.
Dynamic Theme Changing Challange
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()),
),
);
}
}
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