Skip to content

Instantly share code, notes, and snippets.

@inan-mahmud
Last active April 19, 2022 11:48
Show Gist options
  • Save inan-mahmud/bbffe646cf14d34ccd6bf543fbf669fe to your computer and use it in GitHub Desktop.
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.
import 'package:flutter/material.dart';
abstract class BaseScreen extends StatefulWidget {
const BaseScreen({Key? key}) : super(key: key);
}
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();
}
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