Hi Guy’s This is a fun article on How to create an unclickable button that keeps moving when you hover on it, until the form text Field is not valid.

main.dart
import 'package:flutter/material.dart';
import 'package:waste_button/onHover.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:fluttertoast/fluttertoast.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Moving Button if Form InValid',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: emailController,
keyboardType: TextInputType.text,
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
hintText: "Email",
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)))),
).p4().px24(),
TextField(
controller: passwordController,
keyboardType: TextInputType.text,
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
hintText: "Password",
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)))),
).p4().px24(),
OnHover(builder: (isHovered){
return
ElevatedButton(onPressed: (){
print('Clicked');
Fluttertoast.showToast(
msg: "Form Submited Successfully",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
timeInSecForIosWeb: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0
);
}, child: Text("Sign-In"));
}),
],
),
),
);
}
}
onHover.dart
import 'package:flutter/material.dart';
class OnHover extends StatefulWidget {
final Widget Function(bool iaHovered) builder;
const OnHover({Key? key, required this.builder}) : super(key: key);
@override
_OnHoverState createState() => _OnHoverState();
}
class _OnHoverState extends State<OnHover> {
bool isHovered = false;
@override
Widget build(BuildContext context) {
final hovered = Matrix4.identity()..translate(130,0,130);
final transform = isHovered ? hovered : Matrix4.identity();
return MouseRegion(
onEnter: (_)=> onEntered(true),
onExit: (_)=> onEntered(false),
child: AnimatedContainer(
duration: Duration(milliseconds: 150),
transform: transform,
child: widget.builder(isHovered),
),
);
}
void onEntered(bool isHovered){
setState(() {
this.isHovered = isHovered;
});
}
}





