Last active
April 19, 2022 11:48
-
-
Save inan-mahmud/bbffe646cf14d34ccd6bf543fbf669fe to your computer and use it in GitHub Desktop.
A simple base ui class in flutter and how to implement it.
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 BaseScreen extends StatefulWidget { | |
const BaseScreen({Key? key}) : super(key: key); | |
} |
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 '../base_screen.dart'; | |
abstract class BaseScreenState<Screen extends BaseScreen> | |
extends State<Screen> { | |
String appBarTitle(); | |
bool _isBack = true; | |
void isBackButtonShown(bool isBack) { | |
_isBack = isBack; | |
} | |
} | |
mixin BaseScreenMixin<Page extends BaseScreen> on BaseScreenState<Page> { | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text( | |
appBarTitle(), | |
style: const TextStyle( | |
color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold), | |
), | |
leading: _isBack | |
? IconButton( | |
icon: const Icon( | |
Icons.arrow_back_ios, | |
color: Colors.black, | |
), | |
onPressed: () { | |
onClickBackButton(); | |
}, | |
) | |
: const SizedBox(), | |
), | |
body: Container( | |
height: MediaQuery.of(context).size.height, | |
width: MediaQuery.of(context).size.width, | |
child: body(), | |
color: Colors.white, | |
), | |
); | |
} | |
Widget body(); | |
} |
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/src/widgets/framework.dart'; | |
import '../base_screen.dart'; | |
import '../base_screen_state.dart'; | |
class HomeScreen extends BaseScreen { | |
const HomeScreen({Key? key}) : super(key: key); | |
@override | |
_HomeScreenState createState() => _HomeScreenState(); | |
} | |
class _HomeScreenState extends BaseScreenState<HomeScreen> | |
with BaseScreenMixin { | |
@override | |
void initState() { | |
isBackButtonShown(false); | |
super.initState(); | |
} | |
@override | |
String appBarTitle() { | |
return "Home"; | |
} | |
@override | |
void isBackButtonShown(bool isBack) { | |
super.isBackButtonShown(isBack); | |
} | |
@override | |
Widget body() { | |
// TODO: implement body | |
throw UnimplementedError(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment