Skip to content

Instantly share code, notes, and snippets.

@suragch
Last active May 2, 2022 02:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save suragch/58dea40828dd111e95b7543896c537c9 to your computer and use it in GitHub Desktop.
Save suragch/58dea40828dd111e95b7543896c537c9 to your computer and use it in GitHub Desktop.
Three buttons, change icon (with GetIt and manager class)
import 'package:final_exam/home_screen/home_screen_manager.dart';
import 'package:get_it/get_it.dart';
final getIt = GetIt.instance;
void setupGetIt() {
getIt.registerLazySingleton(() => HomeScreenManager());
}
import 'package:final_exam/get_it.dart';
import 'package:flutter/material.dart';
import 'home_screen_manager.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final manager = getIt<HomeScreenManager>();
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ValueListenableBuilder<MyIcon>(
valueListenable: manager.iconNotifier,
builder: (context, myIcon, child) {
if (myIcon == MyIcon.sun) {
return Icon(Icons.sunny, size: 50);
} else if (myIcon == MyIcon.cloud) {
return Icon(Icons.cloud, size: 50);
} else {
return Icon(Icons.house, size: 50);
}
}),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
manager.chooseHouse();
},
child: Text('House'),
),
SizedBox(width: 20),
ElevatedButton(
onPressed: () {
manager.chooseSun();
},
child: Text('Sun'),
),
SizedBox(width: 20),
ElevatedButton(
onPressed: () {
manager.chooseCloud();
},
child: Text('Cloud'),
),
],
),
],
),
);
}
}
import 'package:flutter/material.dart';
class HomeScreenManager {
final iconNotifier = ValueNotifier<MyIcon>(MyIcon.house);
void chooseHouse() {
iconNotifier.value = MyIcon.house;
}
void chooseSun() {
iconNotifier.value = MyIcon.sun;
}
void chooseCloud() {
iconNotifier.value = MyIcon.cloud;
}
}
enum MyIcon {
house,
sun,
cloud,
}
import 'package:final_exam/get_it.dart';
import 'package:final_exam/home_screen/home_screen.dart';
import 'package:flutter/material.dart';
void main() {
setupGetIt();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: HomeScreen(),
);
}
}
name: final_exam
description: A new Flutter project.
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.16.1 <3.0.0"
dependencies:
flutter:
sdk: flutter
get_it: ^7.2.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^1.0.0
flutter:
uses-material-design: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment