浏览代码

Merge branch 'dev_1.17.5' of github.com:Unity-Technologies/com.unity.uiwidgets into dev_1.17.5

/siyaoH-1.17-PlatformMessage
xingweizhu 4 年前
当前提交
2dbd5636
共有 14 个文件被更改,包括 1377 次插入104 次删除
  1. 4
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/cupertino/cupertino_navigation_demo.cs
  2. 6
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/drawer_demo.cs
  3. 207
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/gallery/demos.cs
  4. 7
      com.unity.uiwidgets/Runtime/material/bottom_sheet.cs
  5. 6
      com.unity.uiwidgets/Runtime/painting/matrix_utils.cs
  6. 11
      com.unity.uiwidgets/Runtime/ui2/Matrix4.cs
  7. 549
      Samples/UIWidgetsSamples_2019_4/Assets/Scene/GalleryTest.unity
  8. 7
      Samples/UIWidgetsSamples_2019_4/Assets/Scene/GalleryTest.unity.meta
  9. 43
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/modal_bottom_sheet_demo.cs
  10. 103
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/persistent_bottom_sheet_demo.cs
  11. 3
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/persistent_bottom_sheet_demo.cs.meta
  12. 346
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/search_demo.cs
  13. 3
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/search_demo.cs.meta
  14. 186
      Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/tabs_fab_demo.cs

4
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/cupertino/cupertino_navigation_demo.cs


decoration: new BoxDecoration(
image: new DecorationImage(
image: new FileImage(
file: "people/square/trevor.png"
file: "gallery/people/square/trevor.png"
)
),
shape: BoxShape.circle

decoration: new BoxDecoration(
image: new DecorationImage(
image: new FileImage(
"people/square/sandra.png"
"gallery/people/square/sandra.png"
)
),
shape: BoxShape.circle

6
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/drawer_demo.cs


{
public static class DrawerDemoUtils
{
public static readonly string _kAsset0 = "people/square/trevor.png";
public static readonly string _kAsset1 = "people/square/stella.png";
public static readonly string _kAsset2 = "people/square/sandra.png";
public static readonly string _kAsset0 = "gallery/people/square/trevor.png";
public static readonly string _kAsset1 = "gallery/people/square/stella.png";
public static readonly string _kAsset2 = "gallery/people/square/sandra.png";
public static readonly string _kGalleryAssetsPackage = "flutter_gallery_assets";
}

207
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/gallery/demos.cs


using UIWidgetsGallery.demo;
using UIWidgetsGallery.demo.material;
using Unity.UIWidgets.foundation;
using Unity.UIWidgets.material;
using Unity.UIWidgets.widgets;
using UnityEngine;

public static List<GalleryDemo> _buildGalleryDemos()
{
List<GalleryDemo> galleryDemos = new List<GalleryDemo>
List<GalleryDemo> galleryDemos = new List<GalleryDemo>()
title: "Activity Indicator",
icon: GalleryIcons.cupertino_progress,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoProgressIndicatorDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoActivityIndicator-class.html",
buildRoute: (BuildContext context) => new CupertinoProgressIndicatorDemo()
),
new GalleryDemo(
title: "Alerts",
icon: GalleryIcons.dialogs,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoAlertDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/showCupertinoDialog.html",
buildRoute: (BuildContext context) => new CupertinoAlertDemo()
),
new GalleryDemo(
title: "Buttons",
icon: GalleryIcons.generic_buttons,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoButtonsDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoButton-class.html",
buildRoute: (BuildContext context) => new CupertinoButtonsDemo()
),
new GalleryDemo(
title: "Navigation",
icon: GalleryIcons.bottom_navigation,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoNavigationDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoTabScaffold-class.html",
buildRoute: (BuildContext context) => new CupertinoNavigationDemo()
),
new GalleryDemo(
title: "Pickers",
icon: GalleryIcons.cards,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoPickerDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoPicker-class.html",
buildRoute: (BuildContext context) => new CupertinoPickerDemo()
),
new GalleryDemo(
title: "Pull to refresh",
icon: GalleryIcons.cupertino_pull_to_refresh,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoRefreshControlDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSliverRefreshControl-class.html",
buildRoute: (BuildContext context) => new CupertinoRefreshControlDemo()
),
new GalleryDemo(
title: "Segmented Control",
icon: GalleryIcons.tabs,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoSegmentedControlDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSegmentedControl-class.html",
buildRoute: (BuildContext context) => new CupertinoSegmentedControlDemo()
),
new GalleryDemo(
title: "Sliders",
icon: GalleryIcons.sliders,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoSliderDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSlider-class.html",
buildRoute: (BuildContext context) => new CupertinoSliderDemo()
),
new GalleryDemo(
title: "Switches",
icon: GalleryIcons.cupertino_switch,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoSwitchDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSwitch-class.html",
buildRoute: (BuildContext context) => new CupertinoSwitchDemo()
),
new GalleryDemo(
title: "Text Fields",
icon: GalleryIcons.text_fields_alt,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoTextFieldDemo.routeName,
buildRoute: (BuildContext context) => new CupertinoTextFieldDemo()
),
new GalleryDemo(
title: "Shrine",
subtitle: "Basic shopping app",
icon: GalleryIcons.shrine,

buildRoute: (BuildContext context) => new BottomNavigationDemo()
),
new GalleryDemo(
title: "Bottom sheet: Modal",
subtitle: "A dismissable bottom sheet",
icon: GalleryIcons.bottom_sheets,
category: GalleryDemoCategory._kMaterialComponents,
routeName: ModalBottomSheetDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/material/showModalBottomSheet.html",
buildRoute: (BuildContext context) => new ModalBottomSheetDemo()
),
new GalleryDemo(
title: "Bottom sheet: Persistent",
subtitle: "A bottom sheet that sticks around",
icon: GalleryIcons.bottom_sheet_persistent,
category: GalleryDemoCategory._kMaterialComponents,
routeName: PersistentBottomSheetDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/material/ScaffoldState/showBottomSheet.html",
buildRoute: (BuildContext context) => new PersistentBottomSheetDemo()
),
new GalleryDemo(
title: "Buttons",
subtitle: "Flat, raised, dropdown, and more",
icon: GalleryIcons.generic_buttons,

buildRoute: (BuildContext context) => new CardsDemo()
),
new GalleryDemo(
title: "Buttons: Floating Action Button",
subtitle: "FAB with transitions",
icon: GalleryIcons.buttons,
category: GalleryDemoCategory._kMaterialComponents,
routeName: TabsFabDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/material/FloatingActionButton-class.html",
buildRoute: (BuildContext context) => new TabsFabDemo()
),
new GalleryDemo(
title: "Chips",
subtitle: "Labeled with delete buttons and avatars",
icon: GalleryIcons.chips,

buildRoute: (BuildContext context) => new DataTableDemo()
),
new GalleryDemo(
title: "Search",
subtitle: "Expandable search",
icon: Icons.search,
category: GalleryDemoCategory._kMaterialComponents,
routeName: SearchDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/material/showSearch.html",
buildRoute: (BuildContext context) => new SearchDemo()
),
new GalleryDemo(
title: "Dialogs",
subtitle: "Simple, alert, and fullscreen",
icon: GalleryIcons.dialogs,

documentationUrl: "https://docs.flutter.io/flutter/material/Drawer-class.html",
buildRoute: (BuildContext context) => new DrawerDemo()
),
new GalleryDemo(
title: "Expansion panels",
subtitle: "List of expanding panels",
icon: GalleryIcons.expand_all,
category: GalleryDemoCategory._kMaterialComponents,
routeName: ExpansionPanelsDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/material/ExpansionPanel-class.html",
buildRoute: (BuildContext context) => new ExpansionPanelsDemo()
),
new GalleryDemo(
title: "Activity Indicator",
icon: GalleryIcons.cupertino_progress,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoProgressIndicatorDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoActivityIndicator-class.html",
buildRoute: (BuildContext context) => new CupertinoProgressIndicatorDemo()
),
new GalleryDemo(
title: "Alerts",
icon: GalleryIcons.dialogs,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoAlertDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/showCupertinoDialog.html",
buildRoute: (BuildContext context) => new CupertinoAlertDemo()
),
new GalleryDemo(
title: "Buttons",
icon: GalleryIcons.generic_buttons,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoButtonsDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoButton-class.html",
buildRoute: (BuildContext context) => new CupertinoButtonsDemo()
),
new GalleryDemo(
title: "Navigation",
icon: GalleryIcons.bottom_navigation,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoNavigationDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoTabScaffold-class.html",
buildRoute: (BuildContext context) => new CupertinoNavigationDemo()
),
new GalleryDemo(
title: "Pickers",
icon: GalleryIcons.cards,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoPickerDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoPicker-class.html",
buildRoute: (BuildContext context) => new CupertinoPickerDemo()
),
new GalleryDemo(
title: "Pull to refresh",
icon: GalleryIcons.cupertino_pull_to_refresh,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoRefreshControlDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSliverRefreshControl-class.html",
buildRoute: (BuildContext context) => new CupertinoRefreshControlDemo()
),
new GalleryDemo(
title: "Segmented Control",
icon: GalleryIcons.tabs,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoSegmentedControlDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSegmentedControl-class.html",
buildRoute: (BuildContext context) => new CupertinoSegmentedControlDemo()
),
new GalleryDemo(
title: "Sliders",
icon: GalleryIcons.sliders,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoSliderDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSlider-class.html",
buildRoute: (BuildContext context) => new CupertinoSliderDemo()
),
new GalleryDemo(
title: "Switches",
icon: GalleryIcons.cupertino_switch,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoSwitchDemo.routeName,
documentationUrl: "https://docs.flutter.io/flutter/cupertino/CupertinoSwitch-class.html",
buildRoute: (BuildContext context) => new CupertinoSwitchDemo()
),
new GalleryDemo(
title: "Text Fields",
icon: GalleryIcons.text_fields_alt,
category:GalleryDemoCategory._kCupertinoComponents,
routeName: CupertinoTextFieldDemo.routeName,
buildRoute: (BuildContext context) => new CupertinoTextFieldDemo()
)
};
return galleryDemos;

7
com.unity.uiwidgets/Runtime/material/bottom_sheet.cs


public partial class material_ {
public static readonly TimeSpan _bottomSheetEnterDuration = new TimeSpan(0, 0, 0, 0, 250);
public static readonly TimeSpan _bottomSheetExitDuration = new TimeSpan(0, 0, 0, 0, 200);
public static readonly Curve _modalBottomSheetCurve = material_.decelerateEasing;
public static Curve _modalBottomSheetCurve {
get => decelerateEasing;
}
public const float _minFlingVelocity = 700.0f;
public const float _closeProgressThreshold = 0.5f;

D.assert(builder != null);
D.assert(elevation == null || elevation >= 0.0);
D.assert(elevation >= 0.0f);
this.animationController = animationController;
this.enableDrag = enableDrag;
this.elevation = elevation;

6
com.unity.uiwidgets/Runtime/painting/matrix_utils.cs


//FIXME: there is a bug here
//In flutter this assertion has been commented, but we cannot do it since the call of Matrix4.tryInvert will fail
//we need to find a better way to fix this issue here
D.assert(transform.determinant() != 0.0);
// D.assert(transform.determinant() != 0.0);
transform = Matrix4.tryInvert(transform);
transform = Matrix4.copy(transform);
transform.invert();
return transformRect(transform, rect);
}

11
com.unity.uiwidgets/Runtime/ui2/Matrix4.cs


return result;
}
public Matrix4 copy(Matrix4 other) {
setFrom(other);
return this;
public static Matrix4 copy(Matrix4 other) {
var result = zero();
result.setFrom(other);
return result;
}

return r;
}
public Matrix4 clone() => new Matrix4().copy(this);
public Matrix4 clone() => copy(this);
public static Matrix4 operator *(Matrix4 a, Matrix4 b) {
var result = a.clone();

float invSY = 1.0f / sy;
float invSZ = 1.0f / sz;
Matrix4 m = new Matrix4().copy(this);
Matrix4 m = copy(this);
m._m4storage[0] *= invSX;
m._m4storage[1] *= invSX;
m._m4storage[2] *= invSX;

549
Samples/UIWidgetsSamples_2019_4/Assets/Scene/GalleryTest.unity


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &764046566
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 764046568}
- component: {fileID: 764046567}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &764046567
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 764046566}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &764046568
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 764046566}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &847097468
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 847097469}
- component: {fileID: 847097471}
- component: {fileID: 847097470}
m_Layer: 5
m_Name: RawImage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &847097469
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 847097468}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2122288190}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &847097470
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 847097468}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9c5c86936ca864ae684720ddcd50d759, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Texture: {fileID: 0}
m_UVRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
fonts:
- family: Material Icons
fonts:
- asset: MaterialIcons-Regular.ttf
weight: 0
- family: CupertinoIcons
fonts:
- asset: CupertinoIcons.ttf
weight: 0
- family: GalleryIcons
fonts:
- asset: gallery/GalleryIcons.ttf
weight: 0
devicePixelRatioOverride: 1
hardwareAntiAliasing: 0
--- !u!222 &847097471
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 847097468}
m_CullTransparentMesh: 0
--- !u!1 &1548023132
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1548023135}
- component: {fileID: 1548023134}
- component: {fileID: 1548023133}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &1548023133
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1548023132}
m_Enabled: 1
--- !u!20 &1548023134
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1548023132}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 1
orthographic size: 5.6
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1548023135
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1548023132}
m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 1, z: 0.32}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0}
--- !u!1 &1900497009
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1900497012}
- component: {fileID: 1900497011}
- component: {fileID: 1900497010}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1900497010
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1900497009}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &1900497011
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1900497009}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1900497012
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1900497009}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2122288186
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2122288190}
- component: {fileID: 2122288189}
- component: {fileID: 2122288188}
- component: {fileID: 2122288187}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &2122288187
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2122288186}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!114 &2122288188
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2122288186}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
--- !u!223 &2122288189
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2122288186}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_AdditionalShaderChannelsFlag: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &2122288190
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2122288186}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_Children:
- {fileID: 847097469}
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}

7
Samples/UIWidgetsSamples_2019_4/Assets/Scene/GalleryTest.unity.meta


fileFormatVersion: 2
guid: 27915d755e23b4d4a893865b51d5203b
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

43
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/modal_bottom_sheet_demo.cs


using System.Collections.Generic;
using Unity.UIWidgets.material;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.ui;
using Unity.UIWidgets.widgets;
using TextStyle = Unity.UIWidgets.painting.TextStyle;
namespace UIWidgetsGallery.gallery {
public class ModalBottomSheetDemo : StatelessWidget {
public const string routeName = "/material/modal-bottom-sheet";
public override Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Modal bottom sheet"),
actions: new List<Widget> {new MaterialDemoDocumentationButton(routeName)}
),
body: new Center(
child: new RaisedButton(
child: new Text("SHOW BOTTOM SHEET"),
onPressed: () => {
material_.showModalBottomSheet<object>(context: context,
builder: (BuildContext _context) => {
return new Container(
child: new Padding(
padding: EdgeInsets.all(32.0f),
child: new Text("This is the modal bottom sheet. Tap anywhere to dismiss.",
textAlign: TextAlign.center,
style: new TextStyle(
color: Theme.of(_context).accentColor,
fontSize: 24.0f
)
)
)
);
});
}
)
)
);
}
}
}

103
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/persistent_bottom_sheet_demo.cs


using System.Collections.Generic;
using uiwidgets;
using Unity.UIWidgets.material;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.ui;
using Unity.UIWidgets.widgets;
using TextStyle = Unity.UIWidgets.painting.TextStyle;
namespace UIWidgetsGallery.gallery {
public class PersistentBottomSheetDemo : StatefulWidget {
public const string routeName = "/material/persistent-bottom-sheet";
public override State createState() {
return new _PersistentBottomSheetDemoState();
}
}
class _PersistentBottomSheetDemoState : State<PersistentBottomSheetDemo> {
GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>.key();
VoidCallback _showBottomSheetCallback;
public override void initState() {
base.initState();
this._showBottomSheetCallback = this._showBottomSheet;
}
void _showBottomSheet() {
this.setState(() => {
// disable the button
this._showBottomSheetCallback = null;
});
this._scaffoldKey.currentState.showBottomSheet((BuildContext context) => {
ThemeData themeData = Theme.of(this.context);
return new Container(
decoration: new BoxDecoration(
border: new Border(top: new BorderSide(color: themeData.disabledColor))
),
child: new Padding(
padding: EdgeInsets.all(32.0f),
child: new Text("This is a Material persistent bottom sheet. Drag downwards to dismiss it.",
textAlign: TextAlign.center,
style: new TextStyle(
color: themeData.accentColor,
fontSize: 24.0f
)
)
)
);
})
.closed.then((value) => {
if (this.mounted) {
this.setState(() => {
// re-enable the button
this._showBottomSheetCallback = this._showBottomSheet;
});
}
});
}
void _showMessage() {
DialogUtils.showGeneralDialog<object>(
context: this.context,
pageBuilder: ( context, _, __) => {
return new AlertDialog(
content: new Text("You tapped the floating action button."),
actions: new List<Widget> {
new FlatButton(
onPressed: () => { Navigator.pop(context); },
child: new Text("OK")
)
}
);
}
);
}
public override Widget build(BuildContext context) {
return new Scaffold(
key: this._scaffoldKey,
appBar: new AppBar(
title: new Text("Persistent bottom sheet"),
actions: new List<Widget> {
new MaterialDemoDocumentationButton(PersistentBottomSheetDemo.routeName)
}
),
floatingActionButton: new FloatingActionButton(
onPressed: this._showMessage,
backgroundColor: Colors.redAccent,
child: new Icon(
Icons.add
)
),
body: new Center(
child: new RaisedButton(
onPressed: this._showBottomSheetCallback,
child: new Text("SHOW BOTTOM SHEET")
)
)
);
}
}
}

3
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/persistent_bottom_sheet_demo.cs.meta


fileFormatVersion: 2
guid: c949d1ae2a444ef085b83e1a0db18cc9
timeCreated: 1612683278

346
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/search_demo.cs


using System;
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.ui;
using Unity.UIWidgets.widgets;
using UnityEngine;
namespace UIWidgetsGallery.gallery {
public class SearchDemo : StatefulWidget {
public const string routeName = "/material/search";
public override State createState() {
return new _SearchDemoState();
}
}
class _SearchDemoState : State<SearchDemo> {
readonly _SearchDemoSearchDelegate _delegate = new _SearchDemoSearchDelegate();
readonly GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>.key();
int? _lastIntegerSelected;
public override Widget build(BuildContext context) {
return new Scaffold(
key: this._scaffoldKey,
appBar: new AppBar(
leading: new IconButton(
tooltip: "Navigation menu",
icon: new AnimatedIcon(
icon: AnimatedIcons.arrow_menu,
color: Colors.white,
progress: this._delegate.transitionAnimation
),
onPressed: () => { this._scaffoldKey.currentState.openDrawer(); }
),
title: new Text("Numbers"),
actions: new List<Widget> {
new IconButton(
tooltip: "Search",
icon: new Icon(Icons.search),
onPressed: () => {
SearchUtils.showSearch(
context: context,
del: this._delegate
).then_((selected) => {
if (selected != null && (int) selected != this._lastIntegerSelected) {
this.setState(() => { this._lastIntegerSelected = (int) selected; });
}
});
}
),
new MaterialDemoDocumentationButton(SearchDemo.routeName),
new IconButton(
tooltip: "More (not implemented)",
icon: new Icon(
Theme.of(context).platform == RuntimePlatform.IPhonePlayer
? Icons.more_horiz
: Icons.more_vert
),
onPressed: () => { }
)
}
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: new List<Widget> {
new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: new List<Widget> {
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: new List<Widget> {
new Text("Press the "),
new Tooltip(
message: "search",
child: new Icon(
Icons.search,
size: 18.0f
)
),
new Text(" icon in the AppBar")
}
),
new Text("and search for an integer between 0 and 100,000.")
}
),
new SizedBox(height: 64.0f),
new Text(
this._lastIntegerSelected == null
? $"Last selected integer: {this._lastIntegerSelected}."
: $"Last selected integer: NONE."
),
}
)
),
floatingActionButton: FloatingActionButton.extended(
tooltip: "Back", // Tests depend on this label to exit the demo.
onPressed: () => { Navigator.of(context).pop<object>(); },
label:
new Text("Close demo"),
icon:
new Icon(Icons.close)
),
drawer: new Drawer(
child: new Column(
children: new List<Widget> {
new UserAccountsDrawerHeader(
accountName: new Text("Peter Widget"),
accountEmail: new Text("peter.widget@example.com"),
currentAccountPicture: new CircleAvatar(
backgroundImage: new FileImage(
"gallery/people/square/peter.png"
)
),
margin: EdgeInsets.zero
),
MediaQuery.removePadding(
context: context,
// DrawerHeader consumes top MediaQuery padding.
removeTop: true,
child: new ListTile(
leading: new Icon(Icons.payment),
title: new Text("Placeholder")
)
)
}
)
)
);
}
}
class _SearchDemoSearchDelegate : SearchDelegate<int>
{
static List<int> listGenerate(int count, Func<int, int> func) {
var list = new List<int>();
for (int i = 0; i < count; i++) {
list.Add(func(i));
}
list.Reverse();
return list;
}
readonly List<int> _data = listGenerate(100001, (int i) => i);
readonly List<int> _history = new List<int> {42607, 85604, 66374, 44, 174};
public override Widget buildLeading(BuildContext context) {
return new IconButton(
tooltip: "Back",
icon: new AnimatedIcon(
icon: AnimatedIcons.arrow_menu,
progress: this.transitionAnimation
),
onPressed: () => { this.close(context, null); }
);
}
public override Widget buildSuggestions(BuildContext context) {
List<int> suggestions;
if (this.query.isEmpty()) {
suggestions = this._history;
}
else {
suggestions = new List<int>();
foreach (var item in this._data) {
var str = item.ToString();
var flag = true;
if (str.Length < this.query.Length) {
continue;
}
for (int i = 0; i < this.query.Length; i++) {
if (str[i] != this.query[i]) {
flag = false;
break;
}
}
if (flag) {
suggestions.Add(item);
}
}
}
List<string> suggestionStrings = new List<string>();
foreach (var item in suggestions) {
suggestionStrings.Add(item.ToString());
}
return new _SuggestionList(
query: this.query,
suggestions: suggestionStrings,
onSelected: (string suggestion) => {
this.query = suggestion;
this.showResults(context);
}
);
}
public override Widget buildResults(BuildContext context) {
int searched;
try {
searched = int.Parse(this.query);
}
catch (Exception) {
return new Center(
child: new Text(
$"{this.query}\n is not a valid integer between 0 and 100,000.\nTry again.",
textAlign: TextAlign.center
)
);
}
if (!this._data.Contains(searched)) {
return new Center(
child: new Text(
$"{this.query}\n is not a valid integer between 0 and 100,000.\nTry again.",
textAlign: TextAlign.center
)
);
}
return new ListView(
children: new List<Widget> {
new _ResultCard(
title: "This integer",
integer: searched,
searchDelegate: this
),
new _ResultCard(
title: "Next integer",
integer: searched + 1,
searchDelegate: this
),
new _ResultCard(
title: "Previous integer",
integer: searched - 1,
searchDelegate: this
)
}
);
}
public override List<Widget> buildActions(BuildContext context) {
return new List<Widget> {
this.query.isEmpty()
? new IconButton(
tooltip: "Voice Search",
icon: new Icon(Icons.mic),
onPressed: () => { this.query = "TODO: implement voice input"; }
)
: new IconButton(
tooltip: "Clear",
icon: new Icon(Icons.clear),
onPressed:
() => {
this.query = "";
this.showSuggestions(context);
}
)
};
}
}
class _ResultCard : StatelessWidget {
public _ResultCard(
int integer, string title, SearchDelegate<int> searchDelegate
) {
this.integer = integer;
this.title = title;
this.searchDelegate = searchDelegate;
}
public readonly int integer;
public readonly string title;
public readonly SearchDelegate<int> searchDelegate;
public override Widget build(BuildContext context) {
ThemeData theme = Theme.of(context);
return new GestureDetector(
onTap: () => { this.searchDelegate.close(context, this.integer); },
child:
new Card(
child: new Padding(
padding: EdgeInsets.all(8.0f),
child: new Column(
children: new List<Widget> {
new Text(this.title),
new Text(this.integer.ToString(),
style: theme.textTheme.headline.copyWith(fontSize: 72.0f)
),
}
)
)
)
);
}
}
class _SuggestionList : StatelessWidget {
public _SuggestionList(
List<string> suggestions, string query, ValueChanged<string> onSelected
) {
this.suggestions = suggestions;
this.query = query;
this.onSelected = onSelected;
}
public readonly List<string> suggestions;
public readonly string query;
public readonly ValueChanged<string> onSelected;
public override Widget build(BuildContext context) {
ThemeData theme = Theme.of(context);
return ListView.builder(
itemCount: this.suggestions.Count,
itemBuilder: (BuildContext _context, int i) => {
string suggestion = this.suggestions[i];
return new ListTile(
leading: this.query.isEmpty() ? new Icon(Icons.history) : new Icon(null),
title: new RichText(
text: new TextSpan(
text: suggestion.Substring(0, this.query.Length),
style: theme.textTheme.subhead.copyWith(fontWeight: FontWeight.bold),
children: new List<InlineSpan>
{
new TextSpan(
text: suggestion.Substring(this.query.Length),
style: theme.textTheme.subhead
)
}
)
),
onTap: () => { this.onSelected(suggestion); }
);
}
);
}
}
}

3
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/search_demo.cs.meta


fileFormatVersion: 2
guid: 958332d4fa614f18b3d446a66cc0f93d
timeCreated: 1612682743

186
Samples/UIWidgetsSamples_2019_4/Assets/UIWidgetsGallery/demo/material/tabs_fab_demo.cs


using System.Collections.Generic;
using System.Linq;
using uiwidgets;
using Unity.UIWidgets.foundation;
using Unity.UIWidgets.material;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.ui;
using Unity.UIWidgets.widgets;
using TextStyle = Unity.UIWidgets.painting.TextStyle;
namespace UIWidgetsGallery.gallery {
class TabsFabDemoUtils {
public const string _explanatoryText =
"When the Scaffold's floating action button changes, the new button fades and " +
"turns into view. In this demo, changing tabs can cause the app to be rebuilt " +
"with a FloatingActionButton that the Scaffold distinguishes from the others " +
"by its key.";
public static readonly List<_Page> _allPages = new List<_Page> {
new _Page(label: "Blue", colors: Colors.indigo, icon: Icons.add),
new _Page(label: "Eco", colors: Colors.green, icon: Icons.create),
new _Page(label: "No"),
new _Page(label: "Teal", colors: Colors.teal, icon: Icons.add),
new _Page(label: "Red", colors: Colors.red, icon: Icons.create)
};
}
class _Page {
public _Page(
string label,
MaterialColor colors = null,
IconData icon = null
) {
this.label = label;
this.colors = colors;
this.icon = icon;
}
public readonly string label;
public readonly MaterialColor colors;
public readonly IconData icon;
public Color labelColor {
get { return this.colors != null ? this.colors.shade300 : Colors.grey.shade300; }
}
public bool fabDefined {
get { return this.colors != null && this.icon != null; }
}
public Color fabColor {
get { return this.colors.shade400; }
}
public Icon fabIcon {
get { return new Icon(this.icon); }
}
public Key fabKey {
get { return new ValueKey<Color>(this.fabColor); }
}
}
public class TabsFabDemo : StatefulWidget {
public const string routeName = "/material/tabs-fab";
public override State createState() {
return new _TabsFabDemoState();
}
}
class _TabsFabDemoState : SingleTickerProviderStateMixin<TabsFabDemo> {
GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>.key();
TabController _controller;
_Page _selectedPage;
bool _extendedButtons = false;
public override void initState() {
base.initState();
this._controller = new TabController(vsync: this, length: TabsFabDemoUtils._allPages.Count);
this._controller.addListener(this._handleTabSelection);
this._selectedPage = TabsFabDemoUtils._allPages[0];
}
public override void dispose() {
this._controller.dispose();
base.dispose();
}
void _handleTabSelection() {
this.setState(() => { this._selectedPage = TabsFabDemoUtils._allPages[this._controller.index]; });
}
void _showExplanatoryText() {
this._scaffoldKey.currentState.showBottomSheet((BuildContext context) => {
return new Container(
decoration: new BoxDecoration(
border: new Border(top: new BorderSide(color: Theme.of(this.context).dividerColor))
),
child: new Padding(
padding: EdgeInsets.all(32.0f),
child: new Text(TabsFabDemoUtils._explanatoryText,
style: Theme.of(this.context).textTheme.subhead)
)
);
});
}
Widget buildTabView(_Page page) {
return new Builder(
builder: (BuildContext context) => {
return new Container(
key: new ValueKey<string>(page.label),
padding: EdgeInsets.fromLTRB(48.0f, 48.0f, 48.0f, 96.0f),
child: new Card(
child: new Center(
child: new Text(page.label,
style: new TextStyle(
color: page.labelColor,
fontSize: 32.0f
),
textAlign: TextAlign.center
)
)
)
);
}
);
}
Widget buildFloatingActionButton(_Page page) {
if (!page.fabDefined) {
return null;
}
if (this._extendedButtons) {
return FloatingActionButton.extended(
key: new ValueKey<Key>(page.fabKey),
tooltip: "Show explanation",
backgroundColor: page.fabColor,
icon: page.fabIcon,
label: new Text(page.label.ToUpper()),
onPressed: this._showExplanatoryText
);
}
return new FloatingActionButton(
key: page.fabKey,
tooltip: "Show explanation",
backgroundColor: page.fabColor,
child: page.fabIcon,
onPressed: this._showExplanatoryText
);
}
public override Widget build(BuildContext context) {
return new Scaffold(
key: this._scaffoldKey,
appBar: new AppBar(
title: new Text("FAB per tab"),
bottom: new TabBar(
controller: this._controller,
tabs: TabsFabDemoUtils._allPages
.Select<_Page, Widget>((_Page page) => new Tab(text: page.label.ToUpper())).ToList()
),
actions: new List<Widget> {
new MaterialDemoDocumentationButton(TabsFabDemo.routeName),
new IconButton(
icon: new Icon(Icons.sentiment_very_satisfied),
onPressed: () => {
this.setState(() => { this._extendedButtons = !this._extendedButtons; });
}
)
}
),
floatingActionButton: this.buildFloatingActionButton(this._selectedPage),
body: new TabBarView(
controller: this._controller,
children: TabsFabDemoUtils._allPages.Select<_Page, Widget>(this.buildTabView).ToList()
)
);
}
}
}
正在加载...
取消
保存