Restructure some things

This commit is contained in:
zontreck 2025-01-31 14:23:15 -07:00
parent 99f15fda36
commit d4bbca6405
9 changed files with 174 additions and 81 deletions

25
lib/Alert.dart Normal file
View file

@ -0,0 +1,25 @@
import 'package:flutter/material.dart';
class Alert extends StatelessWidget {
String title;
String body;
Function()? dismissAction;
Alert(
{required this.title, required this.body, super.key, this.dismissAction});
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text(title),
content: Text(body),
actions: [
ElevatedButton(
onPressed: () {
if (dismissAction != null) dismissAction!.call();
},
child: Text("Dismiss"))
],
);
}
}

View file

@ -2,5 +2,5 @@ import 'package:flutter/material.dart';
class LibACFlutterConstants { class LibACFlutterConstants {
static const Color TITLEBAR_COLOR = Color.fromARGB(255, 99, 0, 0); static const Color TITLEBAR_COLOR = Color.fromARGB(255, 99, 0, 0);
static const VERSION = "1.0.013125+1234"; static const VERSION = "1.0.013125+1423";
} }

View file

@ -3,23 +3,35 @@ import 'package:flutter/material.dart';
enum InputPromptType { Text, Number } enum InputPromptType { Text, Number }
/// Prompt which enables the input of data /// Prompt which enables the input of data
///
/// An input prompt can be for numbers or for text. Though the input type only affects platforms that display a keyboard.
class InputPrompt extends StatefulWidget { class InputPrompt extends StatefulWidget {
String title; String title;
String prompt; String prompt;
String currentValue; String currentValue;
InputPromptType type; InputPromptType type;
Function()? cancelAction;
Function(String)? successAction;
InputPrompt( InputPrompt(
{super.key, {super.key,
required this.title, required this.title,
required this.prompt, required this.prompt,
this.currentValue = "", this.currentValue = "",
required this.type}); required this.type,
this.cancelAction,
this.successAction});
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
// ignore: no_logic_in_create_state
return InputPromptState( return InputPromptState(
title: title, prompt: prompt, currentValue: currentValue, type: type); title: title,
prompt: prompt,
currentValue: currentValue,
type: type,
successAction: successAction ?? (str) {},
cancelAction: cancelAction ?? () {});
} }
} }
@ -28,13 +40,17 @@ class InputPromptState extends State<InputPrompt> {
String prompt; String prompt;
String currentValue; String currentValue;
InputPromptType type; InputPromptType type;
Function() cancelAction;
Function(String) successAction;
TextEditingController textField = TextEditingController(); TextEditingController textField = TextEditingController();
InputPromptState( InputPromptState(
{required this.title, {required this.title,
required this.prompt, required this.prompt,
required this.currentValue, required this.currentValue,
required this.type}) { required this.type,
required this.successAction,
required this.cancelAction}) {
textField.text = currentValue; textField.text = currentValue;
} }
@ -63,11 +79,13 @@ class InputPromptState extends State<InputPrompt> {
actions: [ actions: [
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
successAction.call(textField.text);
Navigator.pop(context, textField.text); Navigator.pop(context, textField.text);
}, },
child: Text("Submit")), child: Text("Submit")),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
cancelAction.call();
Navigator.pop(context, ""); Navigator.pop(context, "");
}, },
child: Text("Cancel")) child: Text("Cancel"))
@ -75,18 +93,3 @@ class InputPromptState extends State<InputPrompt> {
); );
} }
} }
class Alert extends StatelessWidget {
String title;
String body;
Alert({required this.title, required this.body, super.key});
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text(title),
content: Text(body),
);
}
}

31
lib/tests/alert.dart Normal file
View file

@ -0,0 +1,31 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:libacflutter/Alert.dart';
import 'package:libacflutter/Constants.dart';
class TestAlert extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Alert Dialog Null Callback Test"),
backgroundColor: LibACFlutterConstants.TITLEBAR_COLOR),
body: Center(
child: ElevatedButton(
onPressed: () async {
await showAdaptiveDialog(
context: context,
builder: (builder) {
return Alert(
title: "Test Alert",
body: "This is a test that you can ignore");
});
exit(0);
},
child: Text("Test Null Alert")),
),
);
}
}

58
lib/tests/prompt.dart Normal file
View file

@ -0,0 +1,58 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:libacflutter/Alert.dart';
import 'package:libacflutter/Constants.dart';
import 'package:libacflutter/Prompt.dart';
class TestPrompt extends StatefulWidget {
const TestPrompt({super.key});
@override
State<StatefulWidget> createState() {
return TestPromptState();
}
}
class TestPromptState extends State<TestPrompt> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Input Prompt Test"),
backgroundColor: LibACFlutterConstants.TITLEBAR_COLOR,
),
body: Column(
children: [
ElevatedButton(
onPressed: () async {
var reply = await showAdaptiveDialog(
context: context,
builder: (buildx) {
return InputPrompt(
title: "Test",
prompt: "Enter a value",
currentValue: "",
type: InputPromptType.Text,
);
});
// Show a alert dialog with the reply content
showAdaptiveDialog(
context: context,
builder: (buildx) {
return Alert(
title: "Test Result",
body: reply,
dismissAction: () {
exit(0);
},
);
});
},
child: Text("Show prompt"))
],
),
);
}
}

21
lib/tests/tester.dart Normal file
View file

@ -0,0 +1,21 @@
import 'package:flutter/material.dart';
import 'package:libacflutter/tests/alert.dart';
import 'package:libacflutter/tests/prompt.dart';
class WidgetTest extends StatelessWidget {
String route;
WidgetTest({super.key, required this.route});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
routes: {
"/testprompt": (context) => TestPrompt(),
"/testalert0": (context) => TestAlert()
},
home: TestPrompt(),
);
}
}

View file

@ -1,6 +1,6 @@
name: libacflutter name: libacflutter
description: "A new Flutter package project." description: "A new Flutter package project."
version: 1.0.013125+1234 version: 1.0.013125+1423
homepage: https://zontreck.com homepage: https://zontreck.com
publish_to: https://git.zontreck.com/api/packages/AriasCreations/pub publish_to: https://git.zontreck.com/api/packages/AriasCreations/pub

11
test/testAlert.dart Normal file
View file

@ -0,0 +1,11 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:libacflutter/tests/tester.dart';
void main() {
test("Test a null alert callback", () async {
runApp(WidgetTest(route: "/testalert0"));
});
}

View file

@ -1,70 +1,14 @@
import 'package:flutter/cupertino.dart'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:libacflutter/Alert.dart';
import 'package:libacflutter/Constants.dart'; import 'package:libacflutter/Constants.dart';
import 'package:libacflutter/Prompt.dart'; import 'package:libacflutter/Prompt.dart';
import 'package:libacflutter/tests/tester.dart';
void main() { void main() {
test("Test the input prompt", () async { test("Test the input prompt", () async {
runApp(WidgetTester(route: "/testprompt")); runApp(WidgetTest(route: "/testprompt"));
}); });
} }
class WidgetTester extends StatelessWidget {
String route;
WidgetTester({required this.route});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
routes: {"/testprompt": (context) => TestPrompt()},
home: TestPrompt(),
);
}
}
class TestPrompt extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return TestPromptState();
}
}
class TestPromptState extends State<TestPrompt> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Input Prompt Test"),
backgroundColor: LibACFlutterConstants.TITLEBAR_COLOR,
),
body: Column(
children: [
ElevatedButton(
onPressed: () async {
var reply = await showAdaptiveDialog(
context: context,
builder: (buildx) {
return InputPrompt(
title: "Test",
prompt: "Enter a value",
currentValue: "",
type: InputPromptType.Text,
);
});
// Show a alert dialog with the reply content
showAdaptiveDialog(
context: context,
builder: (buildx) {
return Alert(title: "Test Result", body: reply);
});
},
child: Text("Show prompt"))
],
),
);
}
}