我正在嘗試使用提供程式以隨機??方式更改 appbar 和容器的顏色。但是,和往常一樣,一切都出錯了(我在哪里犯了錯誤?我已經閱讀了一些關于這個主題的主題,但不明白,它是如何作業的
import 'package:provider/provider.dart';
import 'dart:math';
void main() => runApp(MyApp());
class SwitchProvider extends ChangeNotifier {
bool is_switched = false;
bool _switch() {
is_switched = !is_switched;
notifyListeners();
return is_switched;
}
}
class MyApp extends StatelessWidget {
bool is_changed = true;
@override
Widget build(BuildContext context) {
SwitchProvider _state = Provider.of<SwitchProvider>(context);
return MaterialApp(
home: ChangeNotifierProvider<SwitchProvider>.value(
value: SwitchProvider(),
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(
"Homework Provider",
),
backgroundColor: Color(
generateRandomHexColor(),
),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
color: Color(
generateRandomHexColor(),
),
height: 200,
width: 200,
),
Consumer(
builder: (context, value, child) => Switch(
value: is_changed,
onChanged: (is_changed) => _state.is_switched,
// onChanged: (bool is_changed) => !is_changed,
),
),
],
),
),
),
);
}
}
Random random = new Random();
int generateRandomHexColor() {
int length = 6;
String chars = '0123456789ABCDEF';
String hex = '';
while (length-- > 0) hex = chars[(random.nextInt(16)) | 0];
print(hex);
return int.parse("0xFF" hex);
}
uj5u.com熱心網友回復:
您需要首先初始化您的提供程式,然后您才能訪問該提供程式。因此,您需要將腳手架包裝到另一個小部件中。這樣您就可以在material app widget中初始化provider后訪問provider。下面的代碼應該可以作業。
import 'package:provider/provider.dart';
import 'dart:math';
void main() => runApp(MyApp());
class SwitchProvider extends ChangeNotifier {
bool is_switched = false;
bool _switch() {
is_switched = !is_switched;
notifyListeners();
return is_switched;
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ChangeNotifierProvider<SwitchProvider>.value(
value: SwitchProvider(),
child: Example()
),
);
}
}
class Example extends StatelessWidget {
Widget build(BuildContext context) {
final SwitchProvider _state = Provider.of<SwitchProvider>(context);
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(
"Homework Provider",
),
backgroundColor: Color(
generateRandomHexColor(),
),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
color: Color(
generateRandomHexColor(),
),
height: 200,
width: 200,
),
Consumer(
builder: (context, value, child) => Switch(
value: _state.is_switched,
onChanged: (_) => _state._switch(),
// onChanged: (bool is_changed) => !is_changed,
),
),
],
),
);
}
}
Random random = new Random();
int generateRandomHexColor() {
int length = 6;
String chars = '0123456789ABCDEF';
String hex = '';
while (length-- > 0) hex = chars[(random.nextInt(16)) | 0];
print(hex);
return int.parse("0xFF" hex);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459952.html
