Last active
May 12, 2020 10:14
-
-
Save rafdls/e9f90f17af3feafd87208788f4e940c5 to your computer and use it in GitHub Desktop.
Flutter Flavors code
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:flutter/material.dart'; | |
import 'package:flutter_flavors/repository/dog_repository.dart'; | |
abstract class AppConfig { | |
String get appName; | |
DogRepository get dogRepository; | |
ColorSwatch get colorSwatch; | |
} |
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:flutter/material.dart'; | |
import 'package:flutter_flavors/config/app_config.dart'; | |
import 'package:flutter_flavors/repository/dog_repository.dart'; | |
import 'package:flutter_flavors/repository/dog_repository_dev.dart'; | |
class AppConfigDev implements AppConfig { | |
final _dogRepository = DogRepositoryDev(); | |
final _appName = "(DEV) Dog Match"; | |
@override | |
String get appName => _appName; | |
@override | |
DogRepository get dogRepository => _dogRepository; | |
@override | |
ColorSwatch get colorSwatch => Colors.orange; | |
} |
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:flutter/material.dart'; | |
import 'package:flutter_flavors/config/app_config.dart'; | |
import 'package:flutter_flavors/repository/dog_repository.dart'; | |
import 'package:flutter_flavors/repository/dog_repository_prod.dart'; | |
class AppConfigProd implements AppConfig { | |
final _dogRepository = DogRepositoryProd(); | |
final _appName = "Dog Match"; | |
@override | |
String get appName => _appName; | |
@override | |
DogRepository get dogRepository => _dogRepository; | |
@override | |
ColorSwatch get colorSwatch => Colors.deepPurple; | |
} |
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:flutter/material.dart'; | |
import 'package:flutter_flavors/config/app_config.dart'; | |
import 'package:flutter_flavors/widgets/dog_stack.dart'; | |
import 'package:flutter_flavors/widgets/generic_button.dart'; | |
import 'package:flutter_flavors/widgets/generic_loading_spinner.dart'; | |
class DogApp extends StatefulWidget { | |
DogApp(this.appConfig); | |
final AppConfig appConfig; | |
@override | |
_DogAppState createState() => _DogAppState(appConfig); | |
} | |
class _DogAppState extends State<DogApp> { | |
_DogAppState(this.appConfig); | |
final AppConfig appConfig; | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
theme: ThemeData( | |
primarySwatch: appConfig.colorSwatch, | |
backgroundColor: Theme.of(context).backgroundColor, | |
visualDensity: VisualDensity.adaptivePlatformDensity, | |
), | |
home: Scaffold( | |
appBar: AppBar( | |
title: Text(appConfig.appName), | |
centerTitle: true, | |
), | |
body: Stack( | |
children: <Widget>[ | |
Center( | |
child: GenericButton( | |
child: Text('More dogs!'), | |
onPressed: _refreshDogImages, | |
), | |
), | |
Container( | |
color: Theme.of(context).canvasColor, | |
child: FutureBuilder( | |
key: UniqueKey(), | |
future: appConfig.dogRepository.getDogImages(count: 10), | |
builder: (context, snapshot) { | |
final dogImages = snapshot.data as List<ImageProvider>; | |
if (snapshot.hasData) { | |
return DogStack(images: dogImages); | |
} else if (snapshot.hasError) { | |
return Center(child: Text('There is an error in dog server')); | |
} else { | |
return Center( | |
child: Container(child: GenericLoadingSpinner()), | |
); | |
} | |
}, | |
), | |
), | |
], | |
), | |
), | |
debugShowCheckedModeBanner: false, | |
); | |
} | |
void _refreshDogImages() { | |
setState(() {}); | |
} | |
} |
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:flutter/material.dart'; | |
abstract class DogRepository { | |
Future<List<ImageProvider>> getDogImages({int count}); | |
} |
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:flutter/material.dart'; | |
import 'package:flutter_flavors/repository/dog_repository.dart'; | |
class DogRepositoryDev implements DogRepository { | |
@override | |
Future<List<ImageProvider>> getDogImages({int count = 1}) { | |
return Future.value(List.generate(count, (_) => AssetImage('assets/dog.jpg'))); | |
} | |
} |
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 'dart:convert'; | |
import 'package:flutter/material.dart'; | |
import 'package:flutter_flavors/repository/dog_repository.dart'; | |
import 'package:http/http.dart' as http; | |
class DogRepositoryProd implements DogRepository { | |
@override | |
Future<List<ImageProvider>> getDogImages({int count = 1}) async { | |
final response = await http.get('https://dog.ceo/api/breeds/image/random/$count'); | |
final List<ImageProvider> images = | |
(json.decode(response.body)['message'] as List).map((dogUrl) => NetworkImage(dogUrl)).toList(); | |
return Future.value(images); | |
} | |
} |
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
{ | |
"version": "0.2.0", | |
"configurations": [ | |
{ | |
"name": "Dog Match Dev", | |
"request": "launch", | |
"type": "dart", | |
"program": "lib/main_dev.dart", | |
}, | |
{ | |
"name": "Dog Match Prod", | |
"request": "launch", | |
"type": "dart", | |
"program": "lib/main_prod.dart", | |
} | |
] | |
} |
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:flutter/material.dart'; | |
import 'package:flutter_flavors/config/app_config.dart'; | |
import 'package:flutter_flavors/dog_app.dart'; | |
void mainCommon(AppConfig appConfig) { | |
runApp(DogApp( | |
appConfig, | |
)); | |
} |
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:flutter_flavors/config/app_config.dart'; | |
import 'package:flutter_flavors/config/app_config_dev.dart'; | |
import 'package:flutter_flavors/main_common.dart'; | |
void main() { | |
final AppConfig appConfig = AppConfigDev(); | |
mainCommon(appConfig); | |
} |
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:flutter_flavors/config/app_config.dart'; | |
import 'package:flutter_flavors/config/app_config_prod.dart'; | |
import 'package:flutter_flavors/main_common.dart'; | |
void main() { | |
final AppConfig appConfig = AppConfigProd(); | |
mainCommon(appConfig); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment