mirror of
https://github.com/flutter/samples.git
synced 2025-11-08 13:58:47 +00:00
Update for Flutter 3.10 beta (#1746)
## Pre-launch Checklist - [x] I read the [Flutter Style Guide] _recently_, and have followed its advice. - [x] I signed the [CLA]. - [x] I read the [Contributors Guide]. - [x] I updated/added relevant documentation (doc comments with `///`). - [ ] All existing and new tests are passing. --------- Co-authored-by: David Iglesias <ditman@gmail.com> Co-authored-by: Mark Thompson <2554588+MarkTechson@users.noreply.github.com> Co-authored-by: John Ryan <ryjohn@google.com>
This commit is contained in:
@@ -20,7 +20,8 @@ class MyApp extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _MyAppState extends State<MyApp> {
|
||||
final ValueNotifier<DemoScreen> _screen = ValueNotifier<DemoScreen>(DemoScreen.counter);
|
||||
final ValueNotifier<DemoScreen> _screen =
|
||||
ValueNotifier<DemoScreen>(DemoScreen.counter);
|
||||
final ValueNotifier<int> _counter = ValueNotifier<int>(0);
|
||||
final ValueNotifier<String> _text = ValueNotifier<String>('');
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ class _CounterDemoState extends State<CounterDemo> {
|
||||
'You have pushed the button this many times:',
|
||||
),
|
||||
ValueListenableBuilder(
|
||||
valueListenable: widget.counter,
|
||||
valueListenable: widget.counter,
|
||||
builder: (context, value, child) => Text(
|
||||
'$value',
|
||||
style: Theme.of(context).textTheme.headlineMedium,
|
||||
@@ -38,7 +38,9 @@ class _CounterDemoState extends State<CounterDemo> {
|
||||
),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () { widget.counter.value++; },
|
||||
onPressed: () {
|
||||
widget.counter.value++;
|
||||
},
|
||||
tooltip: 'Increment',
|
||||
child: const Icon(Icons.add),
|
||||
),
|
||||
|
||||
@@ -21,12 +21,9 @@ class _DashDemoState extends State<DashDemo> {
|
||||
super.initState();
|
||||
// Initial value of the text box
|
||||
totalCharCount = widget.text.value.length;
|
||||
textController = TextEditingController.fromValue(
|
||||
TextEditingValue(
|
||||
textController = TextEditingController.fromValue(TextEditingValue(
|
||||
text: widget.text.value,
|
||||
selection: TextSelection.collapsed(offset: widget.text.value.length)
|
||||
)
|
||||
);
|
||||
selection: TextSelection.collapsed(offset: widget.text.value.length)));
|
||||
// Report changes
|
||||
textController.addListener(_onTextControllerChange);
|
||||
// Listen to changes from the outside
|
||||
@@ -77,35 +74,34 @@ class _DashDemoState extends State<DashDemo> {
|
||||
Text(
|
||||
'COUNT WITH DASH!',
|
||||
style: Theme.of(context).textTheme.titleLarge!.copyWith(
|
||||
color: Colors.white,
|
||||
),
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
// Bordered dash avatar
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: ClipOval(
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
padding: const EdgeInsets.all(2),
|
||||
child: ClipOval(
|
||||
child: Container(
|
||||
color: colorPrimary,
|
||||
padding: const EdgeInsets.all(2),
|
||||
child: const CircleAvatar(
|
||||
radius: 45,
|
||||
backgroundColor: Colors.white,
|
||||
foregroundImage: AssetImage('assets/dash.png'),
|
||||
)
|
||||
),
|
||||
)
|
||||
),
|
||||
color: Colors.white,
|
||||
padding: const EdgeInsets.all(2),
|
||||
child: ClipOval(
|
||||
child: Container(
|
||||
color: colorPrimary,
|
||||
padding: const EdgeInsets.all(2),
|
||||
child: const CircleAvatar(
|
||||
radius: 45,
|
||||
backgroundColor: Colors.white,
|
||||
foregroundImage:
|
||||
AssetImage('assets/dash.png'),
|
||||
)),
|
||||
)),
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'$totalCharCount',
|
||||
style: Theme.of(context).textTheme.displayLarge!.copyWith(
|
||||
color: Colors.white,
|
||||
),
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -15,12 +15,9 @@ class _TextFieldDemoState extends State<TextFieldDemo> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
// Initial value of the text box
|
||||
textController = TextEditingController.fromValue(
|
||||
TextEditingValue(
|
||||
textController = TextEditingController.fromValue(TextEditingValue(
|
||||
text: widget.text.value,
|
||||
selection: TextSelection.collapsed(offset: widget.text.value.length)
|
||||
)
|
||||
);
|
||||
selection: TextSelection.collapsed(offset: widget.text.value.length)));
|
||||
// Report changes
|
||||
textController.addListener(_onTextControllerChange);
|
||||
// Listen to changes from the outside
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/// Exposes useful functions to interop with JS from our Flutter app.
|
||||
library example_js_interop;
|
||||
|
||||
|
||||
@@ -24,7 +24,9 @@ class DemoAppStateManager {
|
||||
required ValueNotifier<DemoScreen> screen,
|
||||
required ValueNotifier<int> counter,
|
||||
required ValueNotifier<String> text,
|
||||
}) : _counter = counter, _text = text, _screen = screen;
|
||||
}) : _counter = counter,
|
||||
_text = text,
|
||||
_screen = screen;
|
||||
|
||||
final ValueNotifier<DemoScreen> _screen;
|
||||
final ValueNotifier<int> _counter;
|
||||
@@ -34,12 +36,15 @@ class DemoAppStateManager {
|
||||
int getClicks() {
|
||||
return _counter.value;
|
||||
}
|
||||
|
||||
void setClicks(int value) {
|
||||
_counter.value = value;
|
||||
}
|
||||
|
||||
void incrementClicks() {
|
||||
_counter.value++;
|
||||
}
|
||||
|
||||
void decrementClicks() {
|
||||
_counter.value--;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ class DomCustomEvent {
|
||||
external factory DomCustomEvent.withOptions(JSString type, JSAny options);
|
||||
factory DomCustomEvent._(String type, [Object? options]) {
|
||||
if (options != null) {
|
||||
return DomCustomEvent.withOptions(type.toJS, js_util.jsify(options) as JSAny);
|
||||
return DomCustomEvent.withOptions(
|
||||
type.toJS, js_util.jsify(options) as JSAny);
|
||||
}
|
||||
return DomCustomEvent.withType(type.toJS);
|
||||
}
|
||||
@@ -31,6 +32,7 @@ dispatchCustomEvent(DomElement target, String type, Object data) {
|
||||
@JS()
|
||||
@staticInterop
|
||||
class DomEventTarget {}
|
||||
|
||||
extension DomEventTargetExtension on DomEventTarget {
|
||||
@JS('dispatchEvent')
|
||||
external JSBoolean _dispatchEvent(DomCustomEvent event);
|
||||
@@ -40,6 +42,7 @@ extension DomEventTargetExtension on DomEventTarget {
|
||||
@JS()
|
||||
@staticInterop
|
||||
class DomElement extends DomEventTarget {}
|
||||
|
||||
extension DomElementExtension on DomElement {
|
||||
@JS('querySelector')
|
||||
external DomElement? _querySelector(JSString selectors);
|
||||
|
||||
Reference in New Issue
Block a user