您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

369 行
16 KiB

using System.Collections.Generic;
using uiwidgets;
using Unity.UIWidgets.foundation;
using Unity.UIWidgets.material;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.rendering;
using Unity.UIWidgets.service;
using Unity.UIWidgets.ui;
using Unity.UIWidgets.widgets;
using UnityEngine;
using Color = Unity.UIWidgets.ui.Color;
using TextStyle = Unity.UIWidgets.painting.TextStyle;
using ui_ = Unity.UIWidgets.widgets.ui_;
namespace UIWidgetsSample
{
public class TextInputSample : UIWidgetsSamplePanel
{
protected override void main()
{
ui_.runApp(
new MaterialApp(
home: new EditableInputTypeWidget()
)
);
}
protected new void OnEnable()
{
base.OnEnable();
}
class _TextInputSample : StatefulWidget
{
public readonly string title;
public _TextInputSample(Key key = null, string title = null) : base(key)
{
this.title = title;
}
public override State createState()
{
return new _TextInputSampleState();
}
}
class _TextInputSampleState : State<_TextInputSample>
{
TextEditingController titleController = new TextEditingController("");
TextEditingController descController = new TextEditingController("");
FocusNode _titleFocusNode;
FocusNode _descFocusNode;
public override void initState()
{
base.initState();
this._titleFocusNode = new FocusNode();
this._descFocusNode = new FocusNode();
}
public override void dispose()
{
this._titleFocusNode.dispose();
this._descFocusNode.dispose();
base.dispose();
}
Widget title()
{
return new Container(child: new Text(this.widget.title ?? "", textAlign: TextAlign.center,
style: new TextStyle(fontSize: 24, fontWeight: FontWeight.w700)),
margin: EdgeInsets.only(bottom: 20));
}
Widget titleInput()
{
return new Row(
children: new List<Widget>(
)
{
new SizedBox(width: 100, child: new Text("Title")),
new Flexible(child: new Container(
decoration: new BoxDecoration(border: Border.all(new Color(0xFF000000), 1)),
padding: EdgeInsets.fromLTRB(8, 0, 8, 0),
child: new EditableText(maxLines: 1,
controller: this.titleController,
selectionControls: MaterialUtils.materialTextSelectionControls,
backgroundCursorColor: Colors.transparent,
autofocus: true,
focusNode: new FocusNode(),
style: new TextStyle(
fontSize: 18,
height: 1.5f,
color: new Color(0xFF1389FD)
),
selectionColor: Color.fromARGB(255, 255, 0, 0),
cursorColor: Color.fromARGB(255, 0, 0, 0))
)),
}
);
}
Widget descInput()
{
return new Container(
margin: EdgeInsets.fromLTRB(0, 10, 0, 10),
child: new Row(
children: new List<Widget>(
)
{
new SizedBox(width: 100, child: new Text("Description")),
new Flexible(child: new Container(
height: 200,
decoration: new BoxDecoration(border: Border.all(new Color(0xFF000000), 1)),
padding: EdgeInsets.fromLTRB(8, 0, 8, 0),
child: new EditableText(maxLines: 200,
controller: this.descController,
backgroundCursorColor: Colors.transparent,
selectionControls: MaterialUtils.materialTextSelectionControls,
focusNode: new FocusNode(),
style: new TextStyle(
fontSize: 18,
height: 1.5f,
color: new Color(0xFF1389FD)
),
selectionColor: Color.fromARGB(255, 255, 0, 0),
cursorColor: Color.fromARGB(255, 0, 0, 0))
)),
}
));
}
public override Widget build(BuildContext context)
{
var container = new Container(
padding: EdgeInsets.all(10),
decoration: new BoxDecoration(color: new Color(0x7F000000),
border: Border.all(color: Color.fromARGB(255, 255, 0, 0), width: 5),
borderRadius: BorderRadius.all(2)),
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: new List<Widget>
{
this.title(),
this.titleInput(),
this.descInput(),
}
)
);
return container;
}
}
}
public class EditableInputTypeWidget : StatefulWidget
{
public EditableInputTypeWidget(Key key = null) : base(key)
{
}
public override State createState()
{
return new _EditableInputTypeWidgetState();
}
}
class _EditableInputTypeWidgetState : State<EditableInputTypeWidget>
{
Widget rowWidgets(string title, Widget widget)
{
return new Container(
height: 80,
child: new Row(
children: new List<Widget>
{
new Container(width: 100,
child: new Text(title,
style: new TextStyle(fontSize: 14, height: 2.0f, color: Colors.black,
decoration: TextDecoration.none))),
new Flexible(child: new Container(child: widget, padding: EdgeInsets.all(4), decoration:
new BoxDecoration(border: Border.all(color: Color.black))))
}
));
}
void textSubmitted(string text)
{
Debug.Log($"text submitted {text}");
}
List<Widget> buildInputs(bool unityKeyboard)
{
List<Widget> widgets = new List<Widget>();
var style = new TextStyle();
var cursorColor = new Color(0xFF000000);
var selectionColor = new Color(0xFF6F6F6F);
widgets.Add(this.rowWidgets("Default", new EditStateProvider(builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.blue,
selectionColor: selectionColor, onSubmitted: this.textSubmitted
, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls,
cursorWidth: 5.0f, cursorRadius: Radius.circular(2.5f), cursorOpacityAnimates: true,
paintCursorAboveText: true)))));
widgets.Add(this.rowWidgets("Multiple Line", new EditStateProvider(
builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.transparent,
selectionColor: selectionColor, maxLines: 4,
onSubmitted: this.textSubmitted, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls
// ,
// globalKeyEventHandler: (evt, enableCustomAction) => {
// //customized key event handler which may swallow input keys to the editable and
// //perform customized functionality
// //
// //evt is the input rawKeyEvent
// //you should perform any customized functionality within the closure of "if(enableCustomAction) {}",
// //otherwise it could be performed multiple times for a single key event.
// //
// //Very Important: for any input event, please ensure that all the output RawInputKeyResponse is the same
// //regardless of the value of enableCustomAction, otherwise the behavior of this handler would become
// //wrong and unpredictable
// if (evt.data.unityEvent.keyCode == KeyCode.UpArrow) {
// if (enableCustomAction) {
// Debug.Log("UpUpUp");
// }
//
// return RawInputKeyResponse.swallowResponse;
// }
//
// if (evt.data.unityEvent.keyCode == KeyCode.DownArrow) {
// if (enableCustomAction) {
// Debug.Log("UpUpUp");
// }
//
// return RawInputKeyResponse.swallowResponse;
// }
//
// if (evt.data.unityEvent.character == '\n' ||
// evt.data.unityEvent.character == '\r' ||
// evt.data.unityEvent.character == 3 ||
// evt.data.unityEvent.character == 10) {
//
// if (evt.data.unityEvent.shift) {
// if (enableCustomAction) {
// Debug.Log("shift return >>>");
// }
// return new RawInputKeyResponse(true, evt.data.unityEvent.character, inputAction: TextInputAction.newline);
// }
// else {
// if (enableCustomAction) {
// Debug.Log("send !!!!");
// }
// return RawInputKeyResponse.swallowResponse;
// }
// }
//
// return RawInputKeyResponse.convert(evt);
// }
)))));
widgets.Add(this.rowWidgets("ObscureText", new EditStateProvider(
builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.transparent,
selectionColor: selectionColor, obscureText: true,
onSubmitted: this.textSubmitted, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls)))));
widgets.Add(this.rowWidgets("Number", new EditStateProvider(builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.transparent,
selectionColor: selectionColor, keyboardType: TextInputType.number,
onSubmitted: this.textSubmitted, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls)))));
widgets.Add(this.rowWidgets("Phone", new EditStateProvider(builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.transparent,
selectionColor: selectionColor, keyboardType: TextInputType.phone,
onSubmitted: this.textSubmitted, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls)))));
widgets.Add(this.rowWidgets("Email", new EditStateProvider(builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.transparent,
selectionColor: selectionColor, keyboardType: TextInputType.emailAddress,
onSubmitted: this.textSubmitted, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls)))));
widgets.Add(this.rowWidgets("Url", new EditStateProvider(builder: ((buildContext, controller, node) =>
new EditableText(controller: controller, focusNode: node, style: style, cursorColor: cursorColor,
backgroundCursorColor: Colors.transparent,
selectionColor: selectionColor, keyboardType: TextInputType.url,
onSubmitted: this.textSubmitted, unityTouchKeyboard: unityKeyboard,
selectionControls: MaterialUtils.materialTextSelectionControls)))));
return widgets;
}
public override Widget build(BuildContext context)
{
List<Widget> widgets = new List<Widget>();
widgets.Add(new Text("UIWidgets Touch Keyboard",
style: new TextStyle(fontSize: 20, height: 2.0f, color: Colors.black, decoration: TextDecoration.none),
textAlign: TextAlign.center));
widgets.AddRange(this.buildInputs(false));
widgets.Add(new Text("Unity Touch Keyboard",
style: new TextStyle(fontSize: 20, height: 2.0f, color: Colors.black, decoration: TextDecoration.none),
textAlign: TextAlign.center));
widgets.AddRange(this.buildInputs(true));
return new Container(
padding: EdgeInsets.all(12),
child: new SingleChildScrollView(child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: widgets)));
}
}
public class EditStateProvider : StatefulWidget
{
public delegate EditableText EditableBuilder(BuildContext context,
TextEditingController controller, FocusNode focusNode);
public readonly EditableBuilder builder;
public EditStateProvider(Key key = null, EditableBuilder builder = null) : base(key)
{
D.assert(builder != null);
this.builder = builder;
}
public override State createState()
{
return new _EditStateProviderState();
}
}
class _EditStateProviderState : State<EditStateProvider>
{
TextEditingController _controller;
FocusNode _focusNode;
public override void initState()
{
base.initState();
this._focusNode = new FocusNode();
this._controller = new TextEditingController("");
}
public override void dispose()
{
this._focusNode.dispose();
base.dispose();
}
public override Widget build(BuildContext context)
{
return this.widget.builder(context, this._controller, this._focusNode);
}
}
}