Цель роли в этом ответе - генерировать случайный пароль для new_user_name и немедленно истек пароль. Имя new_user_name необходимо для изменения пароля при первом входе в систему.
create_user.yml:
---
# create_user playbook
- hosts: your_host_group
become: True
user: ansible
roles:
- create_user
role / create_user / tasks / main.yml:
---
# Generate random password for new_user_name and the new_user_name
# is required to change his/her password on first logon.
- name: Generate password for new user
shell: makepasswd --chars=20
register: user_password
- name: Generate encrypted password
shell: mkpasswd --method=SHA-512 {{ user_password.stdout }}
register: encrypted_user_password
- name: Create user account
user: name={{ new_user_name }}
password={{ encrypted_user_password.stdout }}
state=present
append=yes
shell="/bin/bash"
update_password=always
when: new_user_name is defined and new_user_name in uids
register: user_created
- name: Force user to change password
shell: chage -d 0 {{ new_user_name }}
when: user_created.changed
- name: User created
debug: msg="Password for {{ new_user_name }} is {{ user_password.stdout }}"
when: user_created.changed
Если вы хотите создать нового пользователя:
ansible-playbook -i hosts.ini create_user.yml --extra-vars "new_user_name=kelvin"
Большая часть вашего кода в порядке. Однако вы должны просто сделать Widget side(BuildContext context)
вместо SideDrawer class extends StatelessWidget
. Вот полный файл main.dart
import 'package:flutter/material.dart';
import 'side.dart';
import 'user.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(title: 'Flutter Demo Home Page'),
);
}
}
class HomePage extends StatefulWidget {
HomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
User user = new User("name","firstname","adress","username");
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
drawer: new SideDrawer(user:user),
body: Center(
child: Text('Home page'),
),
);
}
}
. А вот другой файл, содержащий sideDrawer
import 'package:flutter/material.dart';
import 'main.dart';
import 'user.dart';
class SideDrawer extends StatelessWidget {
const SideDrawer({Key key, this.user}) : super(key: key);
final User user;
@override
Widget build(BuildContext context) {
return new SizedBox(
width: MediaQuery.of(context).size.width * 0.85,//20.0,
child: Drawer(
child: new ListView(
children: <Widget>[
new DrawerHeader(
child: new Text("DRAWER HEADER.."),
decoration: new BoxDecoration(color: Colors.orange),
),
new ListTile(
title: new Text(user.name),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
new ListTile(
title: new Text(user.firstname),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
new ListTile(
title: new Text(user.adress),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
new ListTile(
title: new Text(user.username),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
],
)),
);
}
}
И вот как это показано в конце:
Прыжки это поможет вам.
С уважением
РЕДАКТИРОВАТЬ:
Я обновил код и изображение, чтобы удовлетворить ваши потребности. Также я сделал подделку User class
только для демонстрационных целей. [ 1115]