Making of next element of @Appwrite website

This blog is very long to read, I have summarized every bit made the video of it, and have provided all the code on GitHub, check them out:
GitHub: https://github.com/raman04-byte/appwrite_webpage
Video: https://youtu.be/I75RalITPYA
In this blog, we are going to make an Appwrite Website element:

In this whole project, I am going to follow MVC architecture
Let's dive into code, I would like you to read my before blog where I have given the folder structure and the base of the application, let's look at the code that will help us make this:
I have added button.dart file so that we can import this file and use this again and again without writing the code repeatedly.

import 'package:flutter/material.dart';
import '../constants/dimes.dart';
class CommonButton extends StatefulWidget {
final String text;
final double height;
final double width;
const CommonButton({super.key, required this.text,required this.height,required this.width});
@override
State<CommonButton> createState() => _CommonButtonState();
}
class _CommonButtonState extends State<CommonButton> {
@override
Widget build(BuildContext context) {
return Container(
height: widget.height,
width: widget.width,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(50),
color: const Color(0xFFc7d8eb)),
alignment: Alignment.center,
child: Text(
widget.text,
style: TextStyle(
color: const Color(0xFF171d37), fontSize: Dimensions.scaleH(15)),
),
);
}
}
This code defines a CommonButton widget that represents a button with customizable text, height, and width. Here's an explanation of the code:
CommonButtonis a StatefulWidget that requires three parameters:text: The text to be displayed on the button.height: The height of the button.width: The width of the button.
_CommonButtonStatemanages the state of the widget.In the
buildmethod:A
Containerwidget is used to create the button. It has a height and width determined by thewidget.heightandwidget.widthparameters.The button has a circular border-radius, giving it a rounded appearance, and a background color specified as
const Color(0xFFc7d8eb).The content of the button is centered using the
alignmentproperty.Inside the container, a
Textwidget displays thewidget.text. The text is styled with a specific color (const Color(0xFF171d37)) and font size, which is calculated based on theDimensions.scaleH(15)value.
Overall, this code creates a reusable CommonButton widget that allows you to create buttons with customizable text, height, and width. The appearance of the button can be adjusted using the provided parameters.
Here is the updation in home_template.dart file:
import 'package:appwrite_web/feature/home/template/navbar_template.dart';
import 'package:flutter/material.dart';
import 'appwrite_template.dart';
class HomeTemplate extends StatefulWidget {
const HomeTemplate({super.key});
@override
State<HomeTemplate> createState() => _HomeTemplateState();
}
class _HomeTemplateState extends State<HomeTemplate> {
@override
Widget build(BuildContext context) {
return const Column(
children: [
NavbarContainer(),
// This new Template is added here (Appwrite Template)
AppwriteTemplate(),
],
);
}
}
Now let's dive into our AppwriteTemplate() class which has the file name of appwrite_template.dart :
import 'package:appwrite_web/common_widgets/button.dart';
import 'package:appwrite_web/constants/colors.dart';
import 'package:flutter/material.dart';
import '../../../constants/dimes.dart';
class AppwriteTemplate extends StatefulWidget {
const AppwriteTemplate({super.key});
@override
State<AppwriteTemplate> createState() => _AppwriteTemplateState();
}
class _AppwriteTemplateState extends State<AppwriteTemplate> {
final double _fontPadding = 68;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(
top: Dimensions.scaleH(60),
),
child: Column(
children: [
MouseRegion(
cursor: SystemMouseCursors.click,
child: Container(
width: Dimensions.scaleW(35),
decoration: BoxDecoration(
color: const Color(0xFF34b86d),
borderRadius: BorderRadius.circular(15),
),
alignment: Alignment.center,
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Text(
'Appwrite 1.4 is here!',
style: TextStyle(
color: Colors.white, fontSize: Dimensions.scaleH(13)),
),
),
),
),
Padding(
padding: EdgeInsets.only(top: Dimensions.scaleH(15)),
child: MouseRegion(
cursor: SystemMouseCursors.text,
child: Text(
"Build Fast. Scale Big. All in One Place.",
style: TextStyle(
color: AppColor.fontColor,
fontWeight: FontWeight.bold,
fontSize: Dimensions.scaleH(40),
),
),
),
),
Padding(
padding: EdgeInsets.only(
top: Dimensions.scaleH(15),
left: Dimensions.scaleW(_fontPadding),
right: Dimensions.scaleW(_fontPadding)),
child: MouseRegion(
cursor: SystemMouseCursors.text,
child: Text(
"Appwrite is a backend platform for developing Web, Mobile, and Flutter applications. Built with the open source community and optimized for developer experience in the coding languages you love.",
textAlign: TextAlign.center,
style: TextStyle(
color: AppColor.fontColor,
fontSize: Dimensions.scaleH(15),
),
),
),
),
MouseRegion(
cursor: SystemMouseCursors.click,
child: Padding(
padding: EdgeInsets.only(top: Dimensions.scaleH(30)),
child: CommonButton(
text: "Get Started",
height: Dimensions.scaleH(50),
width: Dimensions.scaleW(33),
),
),
)
],
),
);
}
}
Let's go into detail about the AppwriteTemplate code:
AppwriteTemplateWidget:- This widget is intended to represent a template for displaying information about Appwrite, which is a backend platform, along with a call-to-action button.
_AppwriteTemplateStateClass:- This class manages the internal state of the
AppwriteTemplatewidget.
- This class manages the internal state of the
PaddingWidget (Top Spacing):- The top-level
Paddingwidget adds vertical spacing to the content within the template. It is usedDimensions.scaleH(60)to determine the top padding, making it responsive based on screen size.
- The top-level
ColumnWidget:- Inside the
Padding, there is aColumnwidget that organizes the content vertically.
- Inside the
Green Banner:
A
MouseRegionwidget is used to detect mouse click events on a green-colored container. It displays the text "Appwrite 1.4 is here!" in white. This is likely an informational banner or announcement.The banner has a green background color (
Color(0xFF34b86d)) and rounded corners due toBorderRadius.circular(15).The text is centered within the container and styled with a white color and a font size based on
Dimensions.scaleH(13).
Headline:
Below the green banner, there's another
MouseRegioncontaining a headline that reads "Build Fast. Scale Big. All in One Place."This text is styled with a larger font size, a bold font weight, and a specific color.
Description:
Following the headline, there's a
MouseRegioncontains a paragraph of text that describes Appwrite as a backend platform.The text is centered within the region and styled with smaller font size.
"Get Started" Button:
At the bottom of the
Column, there's aMouseRegioncontains a call-to-action button labeled "Get Started."This button is created using the
CommonButtonwidget.The button's appearance can be customized with parameters like
text,height, andwidth.
Overall, this AppwriteTemplate provides a structured layout for presenting information about Appwrite, including a banner, headline, description, and a button to encourage users to get started. The design and responsiveness of the template can be adjusted using the provided parameters and styles.
This is what we have created till now by comparing both the Appwrite website and our webpage in Flutter WebView:
Appwrite Website:

Flutter WebView:





